source: python/trunk/Lib/json/tests/test_scanstring.py

Last change on this file was 391, checked in by dmik, 11 years ago

python: Merge vendor 2.7.6 to trunk.

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1import sys
2from json.tests import PyTest, CTest
3
4
5class TestScanstring(object):
6 def test_scanstring(self):
7 scanstring = self.json.decoder.scanstring
8 self.assertEqual(
9 scanstring('"z\\ud834\\udd20x"', 1, None, True),
10 (u'z\U0001d120x', 16))
11
12 if sys.maxunicode == 65535:
13 self.assertEqual(
14 scanstring(u'"z\U0001d120x"', 1, None, True),
15 (u'z\U0001d120x', 6))
16 else:
17 self.assertEqual(
18 scanstring(u'"z\U0001d120x"', 1, None, True),
19 (u'z\U0001d120x', 5))
20
21 self.assertEqual(
22 scanstring('"\\u007b"', 1, None, True),
23 (u'{', 8))
24
25 self.assertEqual(
26 scanstring('"A JSON payload should be an object or array, not a string."', 1, None, True),
27 (u'A JSON payload should be an object or array, not a string.', 60))
28
29 self.assertEqual(
30 scanstring('["Unclosed array"', 2, None, True),
31 (u'Unclosed array', 17))
32
33 self.assertEqual(
34 scanstring('["extra comma",]', 2, None, True),
35 (u'extra comma', 14))
36
37 self.assertEqual(
38 scanstring('["double extra comma",,]', 2, None, True),
39 (u'double extra comma', 21))
40
41 self.assertEqual(
42 scanstring('["Comma after the close"],', 2, None, True),
43 (u'Comma after the close', 24))
44
45 self.assertEqual(
46 scanstring('["Extra close"]]', 2, None, True),
47 (u'Extra close', 14))
48
49 self.assertEqual(
50 scanstring('{"Extra comma": true,}', 2, None, True),
51 (u'Extra comma', 14))
52
53 self.assertEqual(
54 scanstring('{"Extra value after close": true} "misplaced quoted value"', 2, None, True),
55 (u'Extra value after close', 26))
56
57 self.assertEqual(
58 scanstring('{"Illegal expression": 1 + 2}', 2, None, True),
59 (u'Illegal expression', 21))
60
61 self.assertEqual(
62 scanstring('{"Illegal invocation": alert()}', 2, None, True),
63 (u'Illegal invocation', 21))
64
65 self.assertEqual(
66 scanstring('{"Numbers cannot have leading zeroes": 013}', 2, None, True),
67 (u'Numbers cannot have leading zeroes', 37))
68
69 self.assertEqual(
70 scanstring('{"Numbers cannot be hex": 0x14}', 2, None, True),
71 (u'Numbers cannot be hex', 24))
72
73 self.assertEqual(
74 scanstring('[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]', 21, None, True),
75 (u'Too deep', 30))
76
77 self.assertEqual(
78 scanstring('{"Missing colon" null}', 2, None, True),
79 (u'Missing colon', 16))
80
81 self.assertEqual(
82 scanstring('{"Double colon":: null}', 2, None, True),
83 (u'Double colon', 15))
84
85 self.assertEqual(
86 scanstring('{"Comma instead of colon", null}', 2, None, True),
87 (u'Comma instead of colon', 25))
88
89 self.assertEqual(
90 scanstring('["Colon instead of comma": false]', 2, None, True),
91 (u'Colon instead of comma', 25))
92
93 self.assertEqual(
94 scanstring('["Bad value", truth]', 2, None, True),
95 (u'Bad value', 12))
96
97 def test_issue3623(self):
98 self.assertRaises(ValueError, self.json.decoder.scanstring, b"xxx", 1,
99 "xxx")
100 self.assertRaises(UnicodeDecodeError,
101 self.json.encoder.encode_basestring_ascii, b"xx\xff")
102
103 def test_overflow(self):
104 with self.assertRaises(OverflowError):
105 self.json.decoder.scanstring(b"xxx", sys.maxsize+1)
106
107
108class TestPyScanstring(TestScanstring, PyTest): pass
109class TestCScanstring(TestScanstring, CTest): pass
Note: See TracBrowser for help on using the repository browser.