1 | from json.tests import PyTest, CTest
|
---|
2 |
|
---|
3 | # 2007-10-05
|
---|
4 | JSONDOCS = [
|
---|
5 | # http://json.org/JSON_checker/test/fail1.json
|
---|
6 | '"A JSON payload should be an object or array, not a string."',
|
---|
7 | # http://json.org/JSON_checker/test/fail2.json
|
---|
8 | '["Unclosed array"',
|
---|
9 | # http://json.org/JSON_checker/test/fail3.json
|
---|
10 | '{unquoted_key: "keys must be quoted"}',
|
---|
11 | # http://json.org/JSON_checker/test/fail4.json
|
---|
12 | '["extra comma",]',
|
---|
13 | # http://json.org/JSON_checker/test/fail5.json
|
---|
14 | '["double extra comma",,]',
|
---|
15 | # http://json.org/JSON_checker/test/fail6.json
|
---|
16 | '[ , "<-- missing value"]',
|
---|
17 | # http://json.org/JSON_checker/test/fail7.json
|
---|
18 | '["Comma after the close"],',
|
---|
19 | # http://json.org/JSON_checker/test/fail8.json
|
---|
20 | '["Extra close"]]',
|
---|
21 | # http://json.org/JSON_checker/test/fail9.json
|
---|
22 | '{"Extra comma": true,}',
|
---|
23 | # http://json.org/JSON_checker/test/fail10.json
|
---|
24 | '{"Extra value after close": true} "misplaced quoted value"',
|
---|
25 | # http://json.org/JSON_checker/test/fail11.json
|
---|
26 | '{"Illegal expression": 1 + 2}',
|
---|
27 | # http://json.org/JSON_checker/test/fail12.json
|
---|
28 | '{"Illegal invocation": alert()}',
|
---|
29 | # http://json.org/JSON_checker/test/fail13.json
|
---|
30 | '{"Numbers cannot have leading zeroes": 013}',
|
---|
31 | # http://json.org/JSON_checker/test/fail14.json
|
---|
32 | '{"Numbers cannot be hex": 0x14}',
|
---|
33 | # http://json.org/JSON_checker/test/fail15.json
|
---|
34 | '["Illegal backslash escape: \\x15"]',
|
---|
35 | # http://json.org/JSON_checker/test/fail16.json
|
---|
36 | '[\\naked]',
|
---|
37 | # http://json.org/JSON_checker/test/fail17.json
|
---|
38 | '["Illegal backslash escape: \\017"]',
|
---|
39 | # http://json.org/JSON_checker/test/fail18.json
|
---|
40 | '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]',
|
---|
41 | # http://json.org/JSON_checker/test/fail19.json
|
---|
42 | '{"Missing colon" null}',
|
---|
43 | # http://json.org/JSON_checker/test/fail20.json
|
---|
44 | '{"Double colon":: null}',
|
---|
45 | # http://json.org/JSON_checker/test/fail21.json
|
---|
46 | '{"Comma instead of colon", null}',
|
---|
47 | # http://json.org/JSON_checker/test/fail22.json
|
---|
48 | '["Colon instead of comma": false]',
|
---|
49 | # http://json.org/JSON_checker/test/fail23.json
|
---|
50 | '["Bad value", truth]',
|
---|
51 | # http://json.org/JSON_checker/test/fail24.json
|
---|
52 | "['single quote']",
|
---|
53 | # http://json.org/JSON_checker/test/fail25.json
|
---|
54 | '["\ttab\tcharacter\tin\tstring\t"]',
|
---|
55 | # http://json.org/JSON_checker/test/fail26.json
|
---|
56 | '["tab\\ character\\ in\\ string\\ "]',
|
---|
57 | # http://json.org/JSON_checker/test/fail27.json
|
---|
58 | '["line\nbreak"]',
|
---|
59 | # http://json.org/JSON_checker/test/fail28.json
|
---|
60 | '["line\\\nbreak"]',
|
---|
61 | # http://json.org/JSON_checker/test/fail29.json
|
---|
62 | '[0e]',
|
---|
63 | # http://json.org/JSON_checker/test/fail30.json
|
---|
64 | '[0e+]',
|
---|
65 | # http://json.org/JSON_checker/test/fail31.json
|
---|
66 | '[0e+-1]',
|
---|
67 | # http://json.org/JSON_checker/test/fail32.json
|
---|
68 | '{"Comma instead if closing brace": true,',
|
---|
69 | # http://json.org/JSON_checker/test/fail33.json
|
---|
70 | '["mismatch"}',
|
---|
71 | # http://code.google.com/p/simplejson/issues/detail?id=3
|
---|
72 | u'["A\u001FZ control characters in string"]',
|
---|
73 | ]
|
---|
74 |
|
---|
75 | SKIPS = {
|
---|
76 | 1: "why not have a string payload?",
|
---|
77 | 18: "spec doesn't specify any nesting limitations",
|
---|
78 | }
|
---|
79 |
|
---|
80 | class TestFail(object):
|
---|
81 | def test_failures(self):
|
---|
82 | for idx, doc in enumerate(JSONDOCS):
|
---|
83 | idx = idx + 1
|
---|
84 | if idx in SKIPS:
|
---|
85 | self.loads(doc)
|
---|
86 | continue
|
---|
87 | try:
|
---|
88 | self.loads(doc)
|
---|
89 | except ValueError:
|
---|
90 | pass
|
---|
91 | else:
|
---|
92 | self.fail("Expected failure for fail{0}.json: {1!r}".format(idx, doc))
|
---|
93 |
|
---|
94 | def test_non_string_keys_dict(self):
|
---|
95 | data = {'a' : 1, (1, 2) : 2}
|
---|
96 |
|
---|
97 | #This is for c encoder
|
---|
98 | self.assertRaises(TypeError, self.dumps, data)
|
---|
99 |
|
---|
100 | #This is for python encoder
|
---|
101 | self.assertRaises(TypeError, self.dumps, data, indent=True)
|
---|
102 |
|
---|
103 |
|
---|
104 | class TestPyFail(TestFail, PyTest): pass
|
---|
105 | class TestCFail(TestFail, CTest): pass
|
---|