@@ -19,7 +19,7 @@ def testGetRequest(self):
1919
2020 def testPostRequestWithQuery (self ):
2121 fs = FieldStorage (fp = BytesIO (), environ = dict (
22- REQUEST_METHOD = 'GET ' , QUERY_STRING = 'a=1&b=2&b=3&c=3' ))
22+ REQUEST_METHOD = 'POST ' , QUERY_STRING = 'a=1&b=2&b=3&c=3' ))
2323 self .assertEqual (fs .getfirst ('a' ), '1' )
2424 self .assertEqual (fs .getfirst ('b' ), '2' )
2525 self .assertEqual (fs .getfirst ('c' ), '3' )
@@ -53,22 +53,66 @@ def testPostRequestOverrides(self):
5353 self .assertEqual (fs .getlist ('e' ), ['5' , '6' ])
5454 self .assertEqual (fs .getlist ('f' ), ['6' ])
5555
56+ def testPostRequestWithTooManyFields (self ):
57+ fs = FieldStorage (fp = BytesIO (), environ = dict (
58+ REQUEST_METHOD = 'POST' , QUERY_STRING = 'a=1&a=2&a=3&a=4' ),
59+ max_num_fields = 4 )
60+ self .assertEqual (fs .getlist ('a' ), ['1' , '2' , '3' , '4' ])
61+ if hasattr (fs , 'max_num_fields' ): # only test if this is supported
62+ self .assertRaises (
63+ ValueError , FieldStorage ,
64+ fp = BytesIO (), environ = dict (
65+ REQUEST_METHOD = 'POST' , QUERY_STRING = 'a=1&a=2&a=3&a=4' ),
66+ max_num_fields = 3 )
67+
5668 def testPostRequestWithQueryWithSemicolon1 (self ):
5769 fs = FieldStorage (fp = BytesIO (), environ = dict (
58- REQUEST_METHOD = 'GET ' , QUERY_STRING = 'a=1&b=2;b=3&c=3' ))
70+ REQUEST_METHOD = 'POST ' , QUERY_STRING = 'a=1&b=2;b=3&c=3' ))
5971 self .assertEqual (fs .getfirst ('a' ), '1' )
60- self .assertEqual (fs .getfirst ('b' ), '2' )
6172 self .assertEqual (fs .getfirst ('c' ), '3' )
6273 self .assertEqual (fs .getlist ('a' ), ['1' ])
63- self .assertEqual (fs .getlist ('b' ), ['2' , '3' ])
6474 self .assertEqual (fs .getlist ('c' ), ['3' ])
75+ separator = getattr (fs , 'separator' , None )
76+ if separator : # new Python version, splits only &
77+ self .assertEqual (fs .getfirst ('b' ), '2;b=3' )
78+ self .assertEqual (fs .getlist ('b' ), ['2;b=3' ])
79+ fs = FieldStorage (fp = BytesIO (), environ = dict (
80+ REQUEST_METHOD = 'POST' , QUERY_STRING = 'a=1&b=2&b=3&c=3' ),
81+ separator = '&' )
82+ self .assertEqual (fs .getfirst ('a' ), '1' )
83+ self .assertEqual (fs .getfirst ('b' ), '2' )
84+ self .assertEqual (fs .getfirst ('c' ), '3' )
85+ self .assertEqual (fs .getlist ('a' ), ['1' ])
86+ self .assertEqual (fs .getlist ('b' ), ['2' , '3' ])
87+ self .assertEqual (fs .getlist ('c' ), ['3' ])
88+ else : # old Python version, splits ; and &
89+ self .assertEqual (fs .getfirst ('b' ), '2' )
90+ self .assertEqual (fs .getlist ('b' ), ['2' , '3' ])
6591
6692 def testPostRequestWithQueryWithSemicolon2 (self ):
6793 fs = FieldStorage (fp = BytesIO (), environ = dict (
68- REQUEST_METHOD = 'GET' , QUERY_STRING = 'a=1;b=2&b=3;c=3' ))
69- self .assertEqual (fs .getfirst ('a' ), '1' )
70- self .assertEqual (fs .getfirst ('b' ), '2' )
71- self .assertEqual (fs .getfirst ('c' ), '3' )
72- self .assertEqual (fs .getlist ('a' ), ['1' ])
73- self .assertEqual (fs .getlist ('b' ), ['2' , '3' ])
74- self .assertEqual (fs .getlist ('c' ), ['3' ])
94+ REQUEST_METHOD = 'POST' , QUERY_STRING = 'a=1;b=2&b=3;c=3' ))
95+ separator = getattr (fs , 'separator' , None )
96+ if separator : # new Python version, splits only &
97+ self .assertEqual (fs .getfirst ('a' ), '1;b=2' )
98+ self .assertEqual (fs .getfirst ('b' ), '3;c=3' )
99+ self .assertIsNone (fs .getfirst ('c' ))
100+ self .assertEqual (fs .getlist ('a' ), ['1;b=2' ])
101+ self .assertEqual (fs .getlist ('b' ), ['3;c=3' ])
102+ self .assertEqual (fs .getlist ('c' ), [])
103+ fs = FieldStorage (fp = BytesIO (), environ = dict (
104+ REQUEST_METHOD = 'POST' , QUERY_STRING = 'a=1;b=2;b=3;c=3' ),
105+ separator = ';' )
106+ self .assertEqual (fs .getfirst ('a' ), '1' )
107+ self .assertEqual (fs .getfirst ('b' ), '2' )
108+ self .assertEqual (fs .getfirst ('c' ), '3' )
109+ self .assertEqual (fs .getlist ('a' ), ['1' ])
110+ self .assertEqual (fs .getlist ('b' ), ['2' , '3' ])
111+ self .assertEqual (fs .getlist ('c' ), ['3' ])
112+ else : # old Python version, splits ; and &
113+ self .assertEqual (fs .getfirst ('a' ), '1' )
114+ self .assertEqual (fs .getfirst ('b' ), '2' )
115+ self .assertEqual (fs .getfirst ('c' ), '3' )
116+ self .assertEqual (fs .getlist ('a' ), ['1' ])
117+ self .assertEqual (fs .getlist ('b' ), ['2' , '3' ])
118+ self .assertEqual (fs .getlist ('c' ), ['3' ])
0 commit comments