11import decimal
2- from unittest import TestCase
32from io import StringIO
4- from contextlib import contextmanager
5-
6- import json
7- import json .decoder
8- import json .scanner
93from collections import OrderedDict
4+ from test .json_tests import PyTest , CTest
105
116
12- @contextmanager
13- def use_python_scanner ():
14- py_scanner = json .scanner .py_make_scanner
15- old_scanner = json .decoder .make_scanner
16- json .decoder .make_scanner = py_scanner
17- try :
18- yield
19- finally :
20- json .decoder .make_scanner = old_scanner
21-
22-
23- class TestDecode (TestCase ):
7+ class TestDecode :
248 def test_decimal (self ):
25- rval = json .loads ('1.1' , parse_float = decimal .Decimal )
9+ rval = self .loads ('1.1' , parse_float = decimal .Decimal )
2610 self .assertTrue (isinstance (rval , decimal .Decimal ))
2711 self .assertEqual (rval , decimal .Decimal ('1.1' ))
2812
2913 def test_float (self ):
30- rval = json .loads ('1' , parse_int = float )
14+ rval = self .loads ('1' , parse_int = float )
3115 self .assertTrue (isinstance (rval , float ))
3216 self .assertEqual (rval , 1.0 )
3317
3418 def test_empty_objects (self ):
35- self .assertEqual (json .loads ('{}' ), {})
36- self .assertEqual (json .loads ('[]' ), [])
37- self .assertEqual (json .loads ('""' ), "" )
19+ self .assertEqual (self .loads ('{}' ), {})
20+ self .assertEqual (self .loads ('[]' ), [])
21+ self .assertEqual (self .loads ('""' ), "" )
3822
3923 def test_object_pairs_hook (self ):
4024 s = '{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}'
4125 p = [("xkd" , 1 ), ("kcw" , 2 ), ("art" , 3 ), ("hxm" , 4 ),
4226 ("qrt" , 5 ), ("pad" , 6 ), ("hoy" , 7 )]
43- self .assertEqual (json .loads (s ), eval (s ))
44- self .assertEqual (json .loads (s , object_pairs_hook = lambda x : x ), p )
45- self .assertEqual (json .load (StringIO (s ),
46- object_pairs_hook = lambda x : x ), p )
47- od = json .loads (s , object_pairs_hook = OrderedDict )
27+ self .assertEqual (self .loads (s ), eval (s ))
28+ self .assertEqual (self .loads (s , object_pairs_hook = lambda x : x ), p )
29+ self .assertEqual (self . json .load (StringIO (s ),
30+ object_pairs_hook = lambda x : x ), p )
31+ od = self .loads (s , object_pairs_hook = OrderedDict )
4832 self .assertEqual (od , OrderedDict (p ))
4933 self .assertEqual (type (od ), OrderedDict )
5034 # the object_pairs_hook takes priority over the object_hook
51- self .assertEqual (json .loads (s ,
52- object_pairs_hook = OrderedDict ,
35+ self .assertEqual (self .loads (s , object_pairs_hook = OrderedDict ,
5336 object_hook = lambda x : None ),
5437 OrderedDict (p ))
5538
5639 def test_decoder_optimizations (self ):
5740 # Several optimizations were made that skip over calls to
5841 # the whitespace regex, so this test is designed to try and
5942 # exercise the uncommon cases. The array cases are already covered.
60- rval = json .loads ('{ "key" : "value" , "k":"v" }' )
43+ rval = self .loads ('{ "key" : "value" , "k":"v" }' )
6144 self .assertEqual (rval , {"key" :"value" , "k" :"v" })
6245
6346 def check_keys_reuse (self , source , loads ):
@@ -68,7 +51,9 @@ def check_keys_reuse(self, source, loads):
6851
6952 def test_keys_reuse (self ):
7053 s = '[{"a_key": 1, "b_\xe9 ": 2}, {"a_key": 3, "b_\xe9 ": 4}]'
71- self .check_keys_reuse (s , json .loads )
72- # Disabled: the pure Python version of json simply doesn't work
73- with use_python_scanner ():
74- self .check_keys_reuse (s , json .decoder .JSONDecoder ().decode )
54+ self .check_keys_reuse (s , self .loads )
55+ self .check_keys_reuse (s , self .json .decoder .JSONDecoder ().decode )
56+
57+
58+ class TestPyDecode (TestDecode , PyTest ): pass
59+ class TestCDecode (TestDecode , CTest ): pass
0 commit comments