test_jsonutil.py
71 lines
| 2.2 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r2947 | """Test suite for our JSON utilities. | ||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2010 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING.txt, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
# stdlib | ||||
import json | ||||
# third party | ||||
import nose.tools as nt | ||||
# our own | ||||
from ..jsonutil import json_clean | ||||
#----------------------------------------------------------------------------- | ||||
# Test functions | ||||
#----------------------------------------------------------------------------- | ||||
def test(): | ||||
# list of input/expected output. Use None for the expected output if it | ||||
# can be the same as the input. | ||||
pairs = [(1, None), # start with scalars | ||||
(1.0, None), | ||||
('a', None), | ||||
(True, None), | ||||
(False, None), | ||||
(None, None), | ||||
# complex numbers for now just go to strings, as otherwise they | ||||
# are unserializable | ||||
(1j, '1j'), | ||||
# Containers | ||||
([1, 2], None), | ||||
((1, 2), [1, 2]), | ||||
(set([1, 2]), [1, 2]), | ||||
(dict(x=1), None), | ||||
({'x': 1, 'y':[1,2,3], '1':'int'}, None), | ||||
# More exotic objects | ||||
((x for x in range(3)), [0, 1, 2]), | ||||
(iter([1, 2]), [1, 2]), | ||||
] | ||||
for val, jval in pairs: | ||||
if jval is None: | ||||
jval = val | ||||
out = json_clean(val) | ||||
# validate our cleanup | ||||
nt.assert_equal(out, jval) | ||||
# and ensure that what we return, indeed encodes cleanly | ||||
json.loads(json.dumps(out)) | ||||
def test_lambda(): | ||||
jc = json_clean(lambda : 1) | ||||
nt.assert_true(jc.startswith('<function <lambda> at ')) | ||||
json.dumps(jc) | ||||
def test_exception(): | ||||
bad_dicts = [{1:'number', '1':'string'}, | ||||
{True:'bool', 'True':'string'}, | ||||
] | ||||
for d in bad_dicts: | ||||
nt.assert_raises(ValueError, json_clean, d) | ||||