9
11
s = u.encode('utf-8')
10
12
ju = encoder.encode(u)
11
13
js = encoder.encode(s)
12
self.assertEquals(ju, js)
14
self.assertEqual(ju, js)
14
16
def test_encoding2(self):
15
17
u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
16
18
s = u.encode('utf-8')
17
19
ju = json.dumps(u, encoding='utf-8')
18
20
js = json.dumps(s, encoding='utf-8')
19
self.assertEquals(ju, js)
21
self.assertEqual(ju, js)
21
23
def test_encoding3(self):
22
24
u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
24
self.assertEquals(j, '"\\u03b1\\u03a9"')
26
self.assertEqual(j, '"\\u03b1\\u03a9"')
26
28
def test_encoding4(self):
27
29
u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
28
30
j = json.dumps([u])
29
self.assertEquals(j, '["\\u03b1\\u03a9"]')
31
self.assertEqual(j, '["\\u03b1\\u03a9"]')
31
33
def test_encoding5(self):
32
34
u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
33
35
j = json.dumps(u, ensure_ascii=False)
34
self.assertEquals(j, u'"' + u + u'"')
36
self.assertEqual(j, u'"' + u + u'"')
36
38
def test_encoding6(self):
37
39
u = u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}'
38
40
j = json.dumps([u], ensure_ascii=False)
39
self.assertEquals(j, u'["' + u + u'"]')
41
self.assertEqual(j, u'["' + u + u'"]')
41
43
def test_big_unicode_encode(self):
43
self.assertEquals(json.dumps(u), '"\\ud834\\udd20"')
44
self.assertEquals(json.dumps(u, ensure_ascii=False), u'"\U0001d120"')
45
self.assertEqual(json.dumps(u), '"\\ud834\\udd20"')
46
self.assertEqual(json.dumps(u, ensure_ascii=False), u'"\U0001d120"')
46
48
def test_big_unicode_decode(self):
47
49
u = u'z\U0001d120x'
48
self.assertEquals(json.loads('"' + u + '"'), u)
49
self.assertEquals(json.loads('"z\\ud834\\udd20x"'), u)
50
self.assertEqual(json.loads('"' + u + '"'), u)
51
self.assertEqual(json.loads('"z\\ud834\\udd20x"'), u)
51
53
def test_unicode_decode(self):
52
54
for i in range(0, 0xd7ff):
54
56
#s = '"\\u{0:04x}"'.format(i)
55
57
s = '"\\u%04x"' % (i,)
56
self.assertEquals(json.loads(s), u)
58
self.assertEqual(json.loads(s), u)
58
60
def test_object_pairs_hook_with_unicode(self):
59
61
s = u'{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}'
74
76
def test_default_encoding(self):
75
self.assertEquals(json.loads(u'{"a": "\xe9"}'.encode('utf-8')),
77
self.assertEqual(json.loads(u'{"a": "\xe9"}'.encode('utf-8')),
78
80
def test_unicode_preservation(self):
79
self.assertEquals(type(json.loads(u'""')), unicode)
80
self.assertEquals(type(json.loads(u'"a"')), unicode)
81
self.assertEquals(type(json.loads(u'["a"]')[0]), unicode)
81
self.assertEqual(type(json.loads(u'""')), text_type)
82
self.assertEqual(type(json.loads(u'"a"')), text_type)
83
self.assertEqual(type(json.loads(u'["a"]')[0]), text_type)
83
85
def test_ensure_ascii_false_returns_unicode(self):
84
86
# http://code.google.com/p/simplejson/issues/detail?id=48
85
self.assertEquals(type(json.dumps([], ensure_ascii=False)), unicode)
86
self.assertEquals(type(json.dumps(0, ensure_ascii=False)), unicode)
87
self.assertEquals(type(json.dumps({}, ensure_ascii=False)), unicode)
88
self.assertEquals(type(json.dumps("", ensure_ascii=False)), unicode)
87
self.assertEqual(type(json.dumps([], ensure_ascii=False)), text_type)
88
self.assertEqual(type(json.dumps(0, ensure_ascii=False)), text_type)
89
self.assertEqual(type(json.dumps({}, ensure_ascii=False)), text_type)
90
self.assertEqual(type(json.dumps("", ensure_ascii=False)), text_type)
90
92
def test_ensure_ascii_false_bytestring_encoding(self):
91
93
# http://code.google.com/p/simplejson/issues/detail?id=48
92
doc1 = {u'quux': 'Arr\xc3\xaat sur images'}
93
doc2 = {u'quux': u'Arr\xeat sur images'}
94
doc1 = {u'quux': b('Arr\xc3\xaat sur images')}
95
doc2 = {u'quux': u('Arr\xeat sur images')}
94
96
doc_ascii = '{"quux": "Arr\\u00eat sur images"}'
95
97
doc_unicode = u'{"quux": "Arr\xeat sur images"}'
96
self.assertEquals(json.dumps(doc1), doc_ascii)
97
self.assertEquals(json.dumps(doc2), doc_ascii)
98
self.assertEquals(json.dumps(doc1, ensure_ascii=False), doc_unicode)
99
self.assertEquals(json.dumps(doc2, ensure_ascii=False), doc_unicode)
98
self.assertEqual(json.dumps(doc1), doc_ascii)
99
self.assertEqual(json.dumps(doc2), doc_ascii)
100
self.assertEqual(json.dumps(doc1, ensure_ascii=False), doc_unicode)
101
self.assertEqual(json.dumps(doc2, ensure_ascii=False), doc_unicode)
101
103
def test_ensure_ascii_linebreak_encoding(self):
102
104
# http://timelessrepo.com/json-isnt-a-javascript-subset
103
105
s1 = u'\u2029\u2028'
104
106
s2 = s1.encode('utf8')
105
107
expect = '"\\u2029\\u2028"'
106
self.assertEquals(json.dumps(s1), expect)
107
self.assertEquals(json.dumps(s2), expect)
108
self.assertEquals(json.dumps(s1, ensure_ascii=False), expect)
109
self.assertEquals(json.dumps(s2, ensure_ascii=False), expect)
108
self.assertEqual(json.dumps(s1), expect)
109
self.assertEqual(json.dumps(s2), expect)
110
self.assertEqual(json.dumps(s1, ensure_ascii=False), expect)
111
self.assertEqual(json.dumps(s2, ensure_ascii=False), expect)
113
def test_invalid_escape_sequences(self):
114
# incomplete escape sequence
115
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u')
116
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u1')
117
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u12')
118
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u123')
119
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u1234')
120
# invalid escape sequence
121
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u123x"')
122
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u12x4"')
123
self.assertRaises(json.JSONDecodeError, json.loads, '"\\u1x34"')
124
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ux234"')
125
if sys.maxunicode > 65535:
126
# invalid escape sequence for low surrogate
127
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\u"')
128
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\u0"')
129
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\u00"')
130
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\u000"')
131
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\u000x"')
132
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\u00x0"')
133
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\u0x00"')
134
self.assertRaises(json.JSONDecodeError, json.loads, '"\\ud800\\ux000"')
136
def test_ensure_ascii_still_works(self):
137
# in the ascii range, ensure that everything is the same
138
for c in map(unichr, range(0, 127)):
140
json.dumps(c, ensure_ascii=False),
142
snowman = u'\N{SNOWMAN}'
144
json.dumps(c, ensure_ascii=False),