|
import decimal |
|
from decimal import Decimal |
|
from unittest import TestCase |
|
from hjson.compat import StringIO, reload_module |
|
|
|
import hjson as json |
|
|
|
class TestDecimal(TestCase): |
|
NUMS = "1.0", "10.00", "1.1", "1234567890.1234567890", "500" |
|
def dumps(self, obj, **kw): |
|
sio = StringIO() |
|
json.dumpJSON(obj, sio, **kw) |
|
res = json.dumpsJSON(obj, **kw) |
|
self.assertEqual(res, sio.getvalue()) |
|
return res |
|
|
|
def loads(self, s, **kw): |
|
sio = StringIO(s) |
|
res = json.loads(s, **kw) |
|
self.assertEqual(res, json.load(sio, **kw)) |
|
return res |
|
|
|
def test_decimal_encode(self): |
|
for d in map(Decimal, self.NUMS): |
|
self.assertEqual(self.dumps(d, use_decimal=True), str(d)) |
|
|
|
def test_decimal_decode(self): |
|
for s in self.NUMS: |
|
self.assertEqual(self.loads(s, parse_float=Decimal), Decimal(s)) |
|
|
|
def test_stringify_key(self): |
|
for d in map(Decimal, self.NUMS): |
|
v = {d: d} |
|
self.assertEqual( |
|
self.loads( |
|
self.dumps(v, use_decimal=True), parse_float=Decimal), |
|
{str(d): d}) |
|
|
|
def test_decimal_roundtrip(self): |
|
for d in map(Decimal, self.NUMS): |
|
|
|
|
|
for v in [d, [d], {'': d}]: |
|
self.assertEqual( |
|
self.loads( |
|
self.dumps(v, use_decimal=True), parse_float=Decimal), |
|
v) |
|
|
|
def test_decimal_defaults(self): |
|
d = Decimal('1.1') |
|
|
|
self.assertRaises(TypeError, json.dumpsJSON, d, use_decimal=False) |
|
self.assertEqual('1.1', json.dumpsJSON(d)) |
|
self.assertEqual('1.1', json.dumpsJSON(d, use_decimal=True)) |
|
self.assertRaises(TypeError, json.dumpJSON, d, StringIO(), |
|
use_decimal=False) |
|
sio = StringIO() |
|
json.dumpJSON(d, sio) |
|
self.assertEqual('1.1', sio.getvalue()) |
|
sio = StringIO() |
|
json.dumpJSON(d, sio, use_decimal=True) |
|
self.assertEqual('1.1', sio.getvalue()) |
|
|
|
def test_decimal_reload(self): |
|
|
|
|
|
global Decimal |
|
Decimal = reload_module(decimal).Decimal |
|
import hjson.encoder |
|
hjson.encoder.Decimal = Decimal |
|
self.test_decimal_roundtrip() |
|
|