Source

wsgiform / test_wsgiform.py

Lynn Rees 08cfe4a 

















































































































































# Copyright (c) 2006 L. C. Rees
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
#    1. Redistributions of source code must retain the above copyright notice, 
#       this list of conditions and the following disclaimer.
#    
#    2. Redistributions in binary form must reproduce the above copyright 
#       notice, this list of conditions and the following disclaimer in the
#       documentation and/or other materials provided with the distribution.
#
#    3. Neither the name of WsgiForm nor the names of its contributors may be used
#       to endorse or promote products derived from this software without
#       specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

'''Unit tests for wsgiform.'''

import wsgiform
import unittest
import StringIO
import copy

class TestWsgiForm(unittest.TestCase):
    
    '''Test cases for wsgiform.'''
        
    test_env = {
        'CONTENT_LENGTH': '118',
        'wsgi.multiprocess': 0,
        'wsgi.version': (1, 0),
        'CONTENT_TYPE': 'application/x-www-form-urlencoded',
        'SERVER_NAME': '127.0.0.1',
        'wsgi.run_once': 0,
        'wsgi.errors': StringIO.StringIO(),
        'wsgi.multithread': 0,
        'SCRIPT_NAME': '',
        'wsgi.url_scheme': 'http',
        'wsgi.input': StringIO.StringIO(
'num=12121&str1=test&name=%3Ctag+id%3D%22Test%22%3EThis+is+a+%27test%27+%26+another.%3C%2Ftag%3E&state=NV&Submit=Submit'
            ), 
        'REQUEST_METHOD': 'POST',
        'HTTP_HOST': '127.0.0.1',
        'PATH_INFO': '/',
        'SERVER_PORT': '80',
        'SERVER_PROTOCOL': 'HTTP/1.0'}       

    def dummy_app(self, environ, func):
        return environ

    def dummy_sr(self):
        pass

    def testfieldstorage(self):
        '''Parses form data into a FieldStorage instance.'''
        env = wsgiform.WsgiForm(self.dummy_app).fieldstorage(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.fieldstorage'].getfirst('num'), '12121')

    def testdictionary(self):
        '''Parses form data into a dictionary.'''
        env = wsgiform.WsgiForm(self.dummy_app).dictionary(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.dict']['num'], '12121')

    def testkwargs(self):
        '''Parses form data into keyword arguments.'''
        env = wsgiform.WsgiForm(self.dummy_app).kwargs(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgize.kwargs']['num'], '12121')

    def testenviron(self):
        '''Parses form data into individual environ entries.'''
        env = wsgiform.WsgiForm(self.dummy_app).environ(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.num'], '12121')

    def testdict_escape(self):
        '''Parses form data into a dictionary with HTML escaping. '''
        env = wsgiform.WsgiForm(self.dummy_app).dict_escape(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.dict']['name'], '<tag id="Test">This is a 'test' & another.</tag>')         

    def testkwargs_escape(self):
        '''Parses form data into keyword arguments with HTML escaping.'''
        env = wsgiform.WsgiForm(self.dummy_app).kwargs_escape(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgize.kwargs']['name'], '<tag id="Test">This is a 'test' & another.</tag>')

    def testenviron_escape(self):
        '''Parses form data into individual environ entries with HTML escaping.'''
        env = wsgiform.WsgiForm(self.dummy_app).environ_escape(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.name'], '<tag id="Test">This is a 'test' & another.</tag>')

    def testdict_strictescape(self):
        '''Parses form data into a dictionary with strict HTML escaping.'''
        env = wsgiform.WsgiForm(self.dummy_app).dict_strictescape(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.dict']['name'], '<tag id="Test">This is a 'test' & another.</tag>')

    def testkwargs_strictescape(self):
        '''Parses form data into keyword arguments with strict HTML escaping.'''
        env = wsgiform.WsgiForm(self.dummy_app).kwargs_strictescape(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgize.kwargs']['name'], '<tag id="Test">This is a 'test' & another.</tag>')

    def testenviron_strictescape(self):
        '''Parses form data into individual environ entries with strict HTML escaping.'''
        env = wsgiform.WsgiForm(self.dummy_app).environ_strictescape(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.name'], '<tag id="Test">This is a 'test' & another.</tag>')

    def testdict_sterilize(self):
        '''Parses form data into a dictionary with data sterilization.'''
        env = wsgiform.WsgiForm(self.dummy_app).dict_sterilize(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.dict']['name'], 'tag idTestThis is a test  another.tag')

    def testkwargs_sterilize(self):
        '''Parses form data into keyword arguments with data sterilization.'''
        env = wsgiform.WsgiForm(self.dummy_app).kwargs_sterilize(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgize.kwargs']['name'], 'tag idTestThis is a test  another.tag')

    def testenviron_sterilize(self):
        '''Parses form data into individual environ entries with data sterilization.'''
        env = wsgiform.WsgiForm(self.dummy_app).environ_sterilize(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.name'], 'tag idTestThis is a test  another.tag')

    def testdict_strictsterilize(self):
        '''Parses form data into a dictionary with strict data sterilization.'''
        env = wsgiform.WsgiForm(self.dummy_app).dict_strictsterilize(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.dict']['name'], 'tag idTestThis is a test  another.tag')

    def testkwargs_strictsterilize(self):
        '''Parses form data into keyword arguments with strict data sterilization.'''
        env = wsgiform.WsgiForm(self.dummy_app).kwargs_strictsterilize(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgize.kwargs']['name'], 'tag idTestThis is a test  another.tag')

    def testenviron_strictsterilize(self):
        '''Parses form data into individual environ entries with strict data sterilization.'''
        env = wsgiform.WsgiForm(self.dummy_app).environ_strictsterilize(copy.deepcopy(self.test_env), self.dummy_sr)
        self.assertEqual(env['wsgiform.name'], 'tag idTestThis is a test  another.tag')


if __name__ == '__main__': unittest.main()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.