91 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from unittest import TestCase
 | |
| 
 | |
| import simplejson as json
 | |
| 
 | |
| # Fri Dec 30 18:57:26 2005
 | |
| 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
 | |
|     '{unquoted_key: "keys must be quoted}',
 | |
|     # 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
 | |
|     '["Illegal backslash escape: \\\'"]',
 | |
|     # 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']",
 | |
|     # http://code.google.com/p/simplejson/issues/detail?id=3
 | |
|     u'["A\u001FZ control characters in string"]',
 | |
| ]
 | |
| 
 | |
| SKIPS = {
 | |
|     1: "why not have a string payload?",
 | |
|     18: "spec doesn't specify any nesting limitations",
 | |
| }
 | |
| 
 | |
| class TestFail(TestCase):
 | |
|     def test_failures(self):
 | |
|         for idx, doc in enumerate(JSONDOCS):
 | |
|             idx = idx + 1
 | |
|             if idx in SKIPS:
 | |
|                 json.loads(doc)
 | |
|                 continue
 | |
|             try:
 | |
|                 json.loads(doc)
 | |
|             except json.JSONDecodeError:
 | |
|                 pass
 | |
|             else:
 | |
|                 #self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc))
 | |
|                 self.fail("Expected failure for fail%d.json: %r" % (idx, doc))
 | |
| 
 | |
|     def test_array_decoder_issue46(self):
 | |
|         # http://code.google.com/p/simplejson/issues/detail?id=46
 | |
|         for doc in [u'[,]', '[,]']:
 | |
|             try:
 | |
|                 json.loads(doc)
 | |
|             except json.JSONDecodeError, e:
 | |
|                 self.assertEquals(e.pos, 1)
 | |
|                 self.assertEquals(e.lineno, 1)
 | |
|                 self.assertEquals(e.colno, 1)
 | |
|             except Exception, e:
 | |
|                 self.fail("Unexpected exception raised %r %s" % (e, e))
 | |
|             else:
 | |
|                 self.fail("Unexpected success parsing '[,]'") | 
