Index: Lib/test/test_cookie.py =================================================================== --- Lib/test/test_cookie.py (revision 69869) +++ Lib/test/test_cookie.py (working copy) @@ -12,6 +12,7 @@ class CookieTests(unittest.TestCase): # Currently this only tests SimpleCookie def test_basic(self): + "Create some cookies and test basic API" cases = [ { 'data': 'chips=ahoy; vienna=finger', 'dict': {'chips':'ahoy', 'vienna':'finger'}, @@ -19,27 +20,27 @@ 'output': 'Set-Cookie: chips=ahoy\nSet-Cookie: vienna=finger', }, - { 'data': 'keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"', - 'dict': {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'}, - 'repr': '''''', - 'output': 'Set-Cookie: keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"', - }, + { 'data': 'keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"', + 'dict': {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'}, + 'repr': '''''', + 'output': 'Set-Cookie: keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"', + }, - # Check illegal cookies that have an '=' char in an unquoted value - { 'data': 'keebler=E=mc2', - 'dict': {'keebler' : 'E=mc2'}, - 'repr': "", - 'output': 'Set-Cookie: keebler=E=mc2', - } + # Check illegal cookies that have an '=' char in an unquoted value + { 'data': 'keebler=E=mc2', + 'dict': {'keebler' : 'E=mc2'}, + 'repr': "", + 'output': 'Set-Cookie: keebler=E=mc2', + } ] for case in cases: C = Cookie.SimpleCookie() C.load(case['data']) - self.assertEqual(repr(C), case['repr']) - self.assertEqual(C.output(sep='\n'), case['output']) + self.assertEqual(repr(C), case['repr'], "repr for case '%s' is wrong"%case['data']) + self.assertEqual(C.output(sep='\n'), case['output'], "output for case '%s' is wrong"%case['data']) for k, v in sorted(case['dict'].iteritems()): - self.assertEqual(C[k].value, v) + self.assertEqual(C[k].value, v,"key for case '%s',key '%s' is wrong"%(case['data'],k)) def test_load(self): C = Cookie.SimpleCookie() @@ -54,14 +55,14 @@ self.assertEqual(C.js_output(), """ """) self.assertEqual(C.js_output(['path']), """ """) @@ -74,9 +75,71 @@ self.assertEqual(C['Customer']['version'], '1') self.assertEqual(C['Customer']['path'], '/acme') + self.assertEqual(C.output(['path']), + 'Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme') + self.assertEqual(C.js_output(), """ + + """) + self.assertEqual(C.js_output(['path']), """ + + """) + +class MorselTests(unittest.TestCase): + "Tests the Morsel object" + + def setUp(self): + self.M = Cookie.Morsel() + + def tearDown(self): + del (self.M) + + def test_reserved_keys(self): + "Tests valid and invalid reserved keys for Morsels" + def createSetter(morsel,key,value): # Small function to create a callable for assertRaises + def setter(): morsel[key] = value + return setter + for i in self.M._reserved: + # Test that all valid keys are reported as reserved and set them + self.assertTrue(self.M.isReservedKey(i)) + self.M[i]='%s_value'%i + for i in self.M._reserved: + # Test that valid key values come out fine + self.assertEqual(self.M[i],'%s_value'%i) + for i in "the holy hand grenade".split(): + # Test that invalid keys raise CookieError + self.assertRaises(Cookie.CookieError,createSetter(self.M,i,'%s_value'%i)) + + def test_setter(self): + "Tests the .set method to set keys and their values" + for i in self.M._reserved: + #Makes sure that all reserved keys can't be set this way + self.assertRaises(Cookie.CookieError,self.M.set,i,'%s_value'%i,'%s_value'%i) + for i in r"thou cast _the- !holy! ^hand| +*grenade~".split(): + #Try typical use case. Setting decent values. Check output and js_output + self.M['path']='/foo' # Try a reserved key as well + self.M.set(i,"%s_val"%i,"%s_coded_val"%i) + self.assertEqual(self.M.output(),"Set-Cookie: %s=%s; Path=/foo"%(i,"%s_coded_val"%i)) # Try normal output + expected_js_output = '\n \n '%(i,"%s_coded_val"%i) + self.assertEqual(self.M.js_output(),expected_js_output) + for i in ["foo bar", "foo@bar"]: + # Try some illegal characters + self.assertRaises(Cookie.CookieError,self.M.set,i,'%s_value'%i,'%s_value'%i) + + + + def test_main(): - run_unittest(CookieTests) + run_unittest(CookieTests,MorselTests) run_doctest(Cookie) if __name__ == '__main__': test_main() +