| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | from test.json_tests import PyTest, CTest | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-26 19:24:20 +02:00
										 |  |  | # 2007-10-05 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | JSONDOCS = [ | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail1.json | 
					
						
							|  |  |  |     '"A JSON payload should be an object or array, not a string."', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail2.json | 
					
						
							|  |  |  |     '["Unclosed array"', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail3.json | 
					
						
							| 
									
										
										
										
											2012-11-26 19:24:20 +02:00
										 |  |  |     '{unquoted_key: "keys must be quoted"}', | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     # http://json.org/JSON_checker/test/fail4.json | 
					
						
							|  |  |  |     '["extra comma",]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail5.json | 
					
						
							|  |  |  |     '["double extra comma",,]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail6.json | 
					
						
							|  |  |  |     '[   , "<-- missing value"]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail7.json | 
					
						
							|  |  |  |     '["Comma after the close"],', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail8.json | 
					
						
							|  |  |  |     '["Extra close"]]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail9.json | 
					
						
							|  |  |  |     '{"Extra comma": true,}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail10.json | 
					
						
							|  |  |  |     '{"Extra value after close": true} "misplaced quoted value"', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail11.json | 
					
						
							|  |  |  |     '{"Illegal expression": 1 + 2}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail12.json | 
					
						
							|  |  |  |     '{"Illegal invocation": alert()}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail13.json | 
					
						
							|  |  |  |     '{"Numbers cannot have leading zeroes": 013}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail14.json | 
					
						
							|  |  |  |     '{"Numbers cannot be hex": 0x14}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail15.json | 
					
						
							|  |  |  |     '["Illegal backslash escape: \\x15"]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail16.json | 
					
						
							| 
									
										
										
										
											2012-11-26 19:24:20 +02:00
										 |  |  |     '[\\naked]', | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     # http://json.org/JSON_checker/test/fail17.json | 
					
						
							|  |  |  |     '["Illegal backslash escape: \\017"]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail18.json | 
					
						
							|  |  |  |     '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail19.json | 
					
						
							|  |  |  |     '{"Missing colon" null}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail20.json | 
					
						
							|  |  |  |     '{"Double colon":: null}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail21.json | 
					
						
							|  |  |  |     '{"Comma instead of colon", null}', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail22.json | 
					
						
							|  |  |  |     '["Colon instead of comma": false]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail23.json | 
					
						
							|  |  |  |     '["Bad value", truth]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail24.json | 
					
						
							|  |  |  |     "['single quote']", | 
					
						
							| 
									
										
										
										
											2012-11-26 19:24:20 +02:00
										 |  |  |     # http://json.org/JSON_checker/test/fail25.json | 
					
						
							|  |  |  |     '["\ttab\tcharacter\tin\tstring\t"]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail26.json | 
					
						
							|  |  |  |     '["tab\\   character\\   in\\  string\\  "]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail27.json | 
					
						
							|  |  |  |     '["line\nbreak"]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail28.json | 
					
						
							|  |  |  |     '["line\\\nbreak"]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail29.json | 
					
						
							|  |  |  |     '[0e]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail30.json | 
					
						
							|  |  |  |     '[0e+]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail31.json | 
					
						
							|  |  |  |     '[0e+-1]', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail32.json | 
					
						
							|  |  |  |     '{"Comma instead if closing brace": true,', | 
					
						
							|  |  |  |     # http://json.org/JSON_checker/test/fail33.json | 
					
						
							|  |  |  |     '["mismatch"}', | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     # http://code.google.com/p/simplejson/issues/detail?id=3 | 
					
						
							|  |  |  |     '["A\u001FZ control characters in string"]', | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SKIPS = { | 
					
						
							|  |  |  |     1: "why not have a string payload?", | 
					
						
							|  |  |  |     18: "spec doesn't specify any nesting limitations", | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | class TestFail: | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     def test_failures(self): | 
					
						
							|  |  |  |         for idx, doc in enumerate(JSONDOCS): | 
					
						
							|  |  |  |             idx = idx + 1 | 
					
						
							|  |  |  |             if idx in SKIPS: | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |                 self.loads(doc) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |                 continue | 
					
						
							|  |  |  |             try: | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |                 self.loads(doc) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |             except ValueError: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |             else: | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |                 self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc)) | 
					
						
							| 
									
										
										
										
											2010-07-21 12:29:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_non_string_keys_dict(self): | 
					
						
							|  |  |  |         data = {'a' : 1, (1, 2) : 2} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         #This is for c encoder | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         self.assertRaises(TypeError, self.dumps, data) | 
					
						
							| 
									
										
										
										
											2010-07-21 12:29:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         #This is for python encoder | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |         self.assertRaises(TypeError, self.dumps, data, indent=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestPyFail(TestFail, PyTest): pass | 
					
						
							|  |  |  | class TestCFail(TestFail, CTest): pass |