Home | History | Annotate | Download | only in tests
      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
    106