Issue #7673: Fix security vulnerability (CVE-2010-2089) in the audioop module,
[python/dscho.git] / Lib / json / tests / test_decode.py
blobca8f7b349dbe5beee50b3798d6713d2cfb6707a4
1 import decimal
2 from unittest import TestCase
3 from StringIO import StringIO
5 import json
6 from collections import OrderedDict
8 class TestDecode(TestCase):
9 def test_decimal(self):
10 rval = json.loads('1.1', parse_float=decimal.Decimal)
11 self.assertTrue(isinstance(rval, decimal.Decimal))
12 self.assertEquals(rval, decimal.Decimal('1.1'))
14 def test_float(self):
15 rval = json.loads('1', parse_int=float)
16 self.assertTrue(isinstance(rval, float))
17 self.assertEquals(rval, 1.0)
19 def test_decoder_optimizations(self):
20 # Several optimizations were made that skip over calls to
21 # the whitespace regex, so this test is designed to try and
22 # exercise the uncommon cases. The array cases are already covered.
23 rval = json.loads('{ "key" : "value" , "k":"v" }')
24 self.assertEquals(rval, {"key":"value", "k":"v"})
26 def test_object_pairs_hook(self):
27 s = '{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}'
28 p = [("xkd", 1), ("kcw", 2), ("art", 3), ("hxm", 4),
29 ("qrt", 5), ("pad", 6), ("hoy", 7)]
30 self.assertEqual(json.loads(s), eval(s))
31 self.assertEqual(json.loads(s, object_pairs_hook=lambda x: x), p)
32 self.assertEqual(json.load(StringIO(s),
33 object_pairs_hook=lambda x: x), p)
34 od = json.loads(s, object_pairs_hook=OrderedDict)
35 self.assertEqual(od, OrderedDict(p))
36 self.assertEqual(type(od), OrderedDict)
37 # the object_pairs_hook takes priority over the object_hook
38 self.assertEqual(json.loads(s,
39 object_pairs_hook=OrderedDict,
40 object_hook=lambda x: None),
41 OrderedDict(p))