1#!/usr/bin/env python2
2
3import os
4import sys
5import unittest
6from StringIO import StringIO
7
8sys.path.insert(1, os.path.abspath('../..'))
9
10from WebUtils.FieldStorage import FieldStorage
11
12
13class TestFieldStorage(unittest.TestCase):
14
15    def testGetRequest(self):
16        fs = FieldStorage(environ=dict(
17            REQUEST_METHOD='GET', QUERY_STRING='a=1&b=2&b=3&c=3'))
18        self.assertEqual(fs.getfirst('a'), '1')
19        self.assertEqual(fs.getfirst('b'), '2')
20        self.assertEqual(fs.getfirst('c'), '3')
21        self.assertEqual(fs.getlist('a'), ['1'])
22        self.assertEqual(fs.getlist('b'), ['2', '3'])
23        self.assertEqual(fs.getlist('c'), ['3'])
24
25    def testPostRequestWithQuery(self):
26        fs = FieldStorage(fp=StringIO(), environ=dict(
27            REQUEST_METHOD='GET', QUERY_STRING='a=1&b=2&b=3&c=3'))
28        self.assertEqual(fs.getfirst('a'), '1')
29        self.assertEqual(fs.getfirst('b'), '2')
30        self.assertEqual(fs.getfirst('c'), '3')
31        self.assertEqual(fs.getlist('a'), ['1'])
32        self.assertEqual(fs.getlist('b'), ['2', '3'])
33        self.assertEqual(fs.getlist('c'), ['3'])
34
35    def testPostRequestWithBody(self):
36        fs = FieldStorage(
37            fp=StringIO('d=4&e=5&e=6&f=6'), environ=dict(
38            REQUEST_METHOD='POST'))
39        self.assertEqual(fs.getfirst('d'), '4')
40        self.assertEqual(fs.getfirst('e'), '5')
41        self.assertEqual(fs.getfirst('f'), '6')
42        self.assertEqual(fs.getlist('d'), ['4'])
43        self.assertEqual(fs.getlist('e'), ['5', '6'])
44        self.assertEqual(fs.getlist('f'), ['6'])
45
46    def testPostRequestOverrides(self):
47        fs = FieldStorage(
48            fp=StringIO('b=8&c=9&d=4&e=5&e=6&f=6'), environ=dict(
49            REQUEST_METHOD='POST', QUERY_STRING='a=1&b=2&b=3&c=3'))
50        self.assertEqual(fs.getfirst('a'), '1')
51        self.assertEqual(fs.getfirst('b'), '8')
52        self.assertEqual(fs.getfirst('c'), '9')
53        self.assertEqual(fs.getfirst('d'), '4')
54        self.assertEqual(fs.getfirst('e'), '5')
55        self.assertEqual(fs.getfirst('f'), '6')
56        self.assertEqual(fs.getlist('a'), ['1'])
57        self.assertEqual(fs.getlist('b'), ['8'])
58        self.assertEqual(fs.getlist('c'), ['9'])
59        self.assertEqual(fs.getlist('d'), ['4'])
60        self.assertEqual(fs.getlist('e'), ['5', '6'])
61        self.assertEqual(fs.getlist('f'), ['6'])
62
63    def testPostRequestWithQueryWithSemicolon1(self):
64        fs = FieldStorage(fp=StringIO(), environ=dict(
65            REQUEST_METHOD='GET', QUERY_STRING='a=1&b=2;b=3&c=3'))
66        self.assertEqual(fs.getfirst('a'), '1')
67        self.assertEqual(fs.getfirst('b'), '2')
68        self.assertEqual(fs.getfirst('c'), '3')
69        self.assertEqual(fs.getlist('a'), ['1'])
70        self.assertEqual(fs.getlist('b'), ['2', '3'])
71        self.assertEqual(fs.getlist('c'), ['3'])
72
73    def testPostRequestWithQueryWithSemicolon2(self):
74        fs = FieldStorage(fp=StringIO(), environ=dict(
75            REQUEST_METHOD='GET', QUERY_STRING='a=1;b=2&b=3;c=3'))
76        self.assertEqual(fs.getfirst('a'), '1')
77        self.assertEqual(fs.getfirst('b'), '2')
78        self.assertEqual(fs.getfirst('c'), '3')
79        self.assertEqual(fs.getlist('a'), ['1'])
80        self.assertEqual(fs.getlist('b'), ['2', '3'])
81        self.assertEqual(fs.getlist('c'), ['3'])
82
83
84if __name__ == '__main__':
85    unittest.main()
86