def check(self, name, file, inputCr): text = self.load(file, inputCr) shouldFail = name[0:4] == "fail" try: data = hjson.loads(text) self.assertFalse(shouldFail) text1 = hjson.dumpsJSON(data) hjson1 = hjson.dumps(data, ensure_ascii=False) result = hjson.loads(self.load(name + "_result.json", inputCr)) text2 = hjson.dumpsJSON(result) hjson2 = self.load(name + "_result.hjson", False) if self.verma > 2 or self.vermi > 6: # final check fails on py2.6 because of string formatting issues self.assertEqual(text2, text1) self.assertEqual(hjson2, hjson1) # dbg # with open(name + "_dbg1.txt", "w") as tmp: tmp.write(hjson1.encode("utf-8")) # with open(name + "_dbg2.txt", "w") as tmp: tmp.write(hjson2.encode("utf-8")) except hjson.HjsonDecodeError as e: self.assertTrue(shouldFail)
def test_tuple_array_dump(self): t = (1, 2, 3) expect = json.dumpsJSON(list(t)) # Default is True sio = StringIO() json.dumpJSON(t, sio) self.assertEqual(expect, sio.getvalue()) sio = StringIO() json.dumpJSON(t, sio, tuple_as_array=True) self.assertEqual(expect, sio.getvalue()) self.assertRaises(TypeError, json.dumpJSON, t, StringIO(), tuple_as_array=False) # Ensure that the "default" does not get called sio = StringIO() json.dumpJSON(t, sio, default=repr) self.assertEqual(expect, sio.getvalue()) sio = StringIO() json.dumpJSON(t, sio, tuple_as_array=True, default=repr) self.assertEqual(expect, sio.getvalue()) # Ensure that the "default" gets called sio = StringIO() json.dumpJSON(t, sio, tuple_as_array=False, default=repr) self.assertEqual( json.dumpsJSON(repr(t)), sio.getvalue())
def test_ensure_ascii_still_works(self): # in the ascii range, ensure that everything is the same for c in map(unichr, range(0, 127)): self.assertEqual(json.dumpsJSON(c, ensure_ascii=False), json.dumpsJSON(c)) snowman = u'\N{SNOWMAN}' self.assertEqual(json.dumpsJSON(c, ensure_ascii=False), '"' + c + '"')
def test_stringify_key(self): items = [(b('bytes'), 'bytes'), (1.0, '1.0'), (10, '10'), (True, 'true'), (False, 'false'), (None, 'null'), (long_type(100), '100')] for k, expect in items: self.assertEqual(json.loads(json.dumpsJSON({k: expect})), {expect: expect}) self.assertEqual( json.loads(json.dumpsJSON({k: expect}, sort_keys=True)), {expect: expect}) self.assertRaises(TypeError, json.dumpsJSON, {json: 1}) for v in [{}, {'other': 1}, {b('derp'): 1, 'herp': 2}]: for sort_keys in [False, True]: v0 = dict(v) v0[json] = 1 v1 = dict((as_text_type(key), val) for (key, val) in v.items()) self.assertEqual( json.loads( json.dumpsJSON(v0, skipkeys=True, sort_keys=sort_keys)), v1) self.assertEqual( json.loads( json.dumpsJSON({'': v0}, skipkeys=True, sort_keys=sort_keys)), {'': v1}) self.assertEqual( json.loads( json.dumpsJSON([v0], skipkeys=True, sort_keys=sort_keys)), [v1])
def check(self, name, file, inputCr): text = self.load(file, inputCr) shouldFail = name[0:4] == "fail" try: data = hjson.loads(text) self.assertFalse(shouldFail) text1 = hjson.dumpsJSON(data) hjson1 = hjson.dumps(data, ensure_ascii=False); result = hjson.loads(self.load(name + "_result.json", inputCr)) text2 = hjson.dumpsJSON(result) hjson2 = self.load(name + "_result.hjson", False) if self.verma>2 or self.vermi>6: # final check fails on py2.6 because of string formatting issues self.assertEqual(text2, text1) self.assertEqual(hjson2, hjson1) # dbg # with open(name + "_dbg1.txt", "w") as tmp: tmp.write(hjson1.encode("utf-8")) # with open(name + "_dbg2.txt", "w") as tmp: tmp.write(hjson2.encode("utf-8")) except hjson.HjsonDecodeError as e: self.assertTrue(shouldFail)
def assertRoundTrip(self, obj, other, for_json=True): if for_json is None: # None will use the default s = json.dumpsJSON(obj) else: s = json.dumpsJSON(obj, for_json=for_json) self.assertEqual(json.loads(s), other)
def test_asdict_not_callable_dumps(self): for f in CONSTRUCTORS: self.assertRaises(TypeError, json.dumpsJSON, f(DeadDuck()), namedtuple_as_object=True) self.assertEqual( json.dumpsJSON(f({})), json.dumpsJSON(f(DeadDict()), namedtuple_as_object=True))
def test_ints(self): for val, expect in self.values: self.assertEqual(val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)), )
def test_lists(self): for opts in self.options: for val, expect in self.values: val = [val, val] expect = [expect, expect] self.assertEqual(val, json.loads(json.dumpsJSON(val))) self.assertEqual(expect, json.loads(json.dumpsJSON(val, **opts)))
def test_dicts(self): for opts in self.options: for val, expect in self.values: val = {"k": val} expect = {"k": expect} self.assertEqual(val, json.loads(json.dumpsJSON(val))) self.assertEqual(expect, json.loads(json.dumpsJSON(val, **opts)))
def check(self, name, file, inputCr): text = self.load(file, inputCr) shouldFail = name[0:4] == "fail" try: data = hjson.loads(text) self.assertFalse(shouldFail, file) text1 = hjson.dumpsJSON(data) hjson1 = hjson.dumps(data, ensure_ascii=False); result = hjson.loads(self.load(name + "_result.json", inputCr)) text2 = hjson.dumpsJSON(result) hjson2 = self.load(name + "_result.hjson", False) # dbg # with open(name + "_dbg1.txt", "w") as tmp: tmp.write(hjson1.encode("utf-8")) # with open(name + "_dbg2.txt", "w") as tmp: tmp.write(hjson2.encode("utf-8")) # with codecs.open(name + "_dbg3.txt", 'w', 'utf-8') as tmp: hjson.dump(data, tmp) if self.verma>2 or self.vermi>6: # final check fails on py2.6 because of string formatting issues self.assertEqual(text2, text1, file) self.assertEqual(hjson2, hjson1, file) except hjson.HjsonDecodeError as e: if not shouldFail: self.fail("raised error on parsing %s: %r" % (file, e))
def test_floats(self): for num in [ 1617161771.7650001, math.pi, math.pi**100, math.pi**-100, 3.1 ]: self.assertEqual(float(json.dumpsJSON(num)), num) self.assertEqual(json.loads(json.dumpsJSON(num)), num) self.assertEqual(json.loads(text_type(json.dumpsJSON(num))), num)
def test_dict_keys(self): for opts in self.options: for val, _ in self.values: expect = {str(val): "value"} val = {val: "value"} self.assertEqual(expect, json.loads(json.dumpsJSON(val))) self.assertEqual(expect, json.loads(json.dumpsJSON(val, **opts)))
def test_stringify_key(self): items = [(b('bytes'), 'bytes'), (1.0, '1.0'), (10, '10'), (True, 'true'), (False, 'false'), (None, 'null'), (long_type(100), '100')] for k, expect in items: self.assertEqual( json.loads(json.dumpsJSON({k: expect})), {expect: expect}) self.assertEqual( json.loads(json.dumpsJSON({k: expect}, sort_keys=True)), {expect: expect}) self.assertRaises(TypeError, json.dumpsJSON, {json: 1}) for v in [{}, {'other': 1}, {b('derp'): 1, 'herp': 2}]: for sort_keys in [False, True]: v0 = dict(v) v0[json] = 1 v1 = dict((as_text_type(key), val) for (key, val) in v.items()) self.assertEqual( json.loads(json.dumpsJSON(v0, skipkeys=True, sort_keys=sort_keys)), v1) self.assertEqual( json.loads(json.dumpsJSON({'': v0}, skipkeys=True, sort_keys=sort_keys)), {'': v1}) self.assertEqual( json.loads(json.dumpsJSON([v0], skipkeys=True, sort_keys=sort_keys)), [v1])
def test_separators(self): h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', {'nifty': 87}, {'field': 'yes', 'morefield': False} ] expect = textwrap.dedent("""\ [ [ "blorpie" ] , [ "whoops" ] , [] , "d-shtaeou" , "d-nthiouh" , "i-vhbjkhnth" , { "nifty" : 87 } , { "field" : "yes" , "morefield" : false } ]""") d1 = json.dumpsJSON(h) d2 = json.dumpsJSON(h, indent=' ', sort_keys=True, separators=(' ,', ' : ')) h1 = json.loads(d1) h2 = json.loads(d2) self.assertEqual(h1, h) self.assertEqual(h2, h) self.assertEqual(d2, expect)
def test_tuple_array_dump(self): t = (1, 2, 3) expect = json.dumpsJSON(list(t)) # Default is True sio = StringIO() json.dumpJSON(t, sio) self.assertEqual(expect, sio.getvalue()) sio = StringIO() json.dumpJSON(t, sio, tuple_as_array=True) self.assertEqual(expect, sio.getvalue()) self.assertRaises(TypeError, json.dumpJSON, t, StringIO(), tuple_as_array=False) # Ensure that the "default" does not get called sio = StringIO() json.dumpJSON(t, sio, default=repr) self.assertEqual(expect, sio.getvalue()) sio = StringIO() json.dumpJSON(t, sio, tuple_as_array=True, default=repr) self.assertEqual(expect, sio.getvalue()) # Ensure that the "default" gets called sio = StringIO() json.dumpJSON(t, sio, tuple_as_array=False, default=repr) self.assertEqual(json.dumpsJSON(repr(t)), sio.getvalue())
def test_indent(self): h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', { 'nifty': 87 }, { 'field': 'yes', 'morefield': False }] expect = textwrap.dedent("""\ [ \t[ \t\t"blorpie" \t], \t[ \t\t"whoops" \t], \t[], \t"d-shtaeou", \t"d-nthiouh", \t"i-vhbjkhnth", \t{ \t\t"nifty": 87 \t}, \t{ \t\t"field": "yes", \t\t"morefield": false \t} ]""") d1 = json.dumpsJSON(h) d2 = json.dumpsJSON(h, indent='\t', sort_keys=True, separators=(',', ': ')) d3 = json.dumpsJSON(h, indent=' ', sort_keys=True, separators=(',', ': ')) d4 = json.dumpsJSON(h, indent=2, sort_keys=True, separators=(',', ': ')) h1 = json.loads(d1) h2 = json.loads(d2) h3 = json.loads(d3) h4 = json.loads(d4) self.assertEqual(h1, h) self.assertEqual(h2, h) self.assertEqual(h3, h) self.assertEqual(h4, h) self.assertEqual(d3, expect.replace('\t', ' ')) self.assertEqual(d4, expect.replace('\t', ' ')) # NOTE: Python 2.4 textwrap.dedent converts tabs to spaces, # so the following is expected to fail. Python 2.4 is not a # supported platform in hjson 2.1.0+. self.assertEqual(d2, expect)
def test_lists(self): for val, expect in self.values: val = [val, val] expect = [expect, expect] self.assertEqual(val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)) )
def test_dicts(self): for val, expect in self.values: val = {"k": val} expect = {"k": expect} self.assertEqual(val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)) )
def test_case(self): a = {'a': 1, 'c': 5, 'Jack': 'jill', 'pick': 'axe', 'Array': [1, 5, 6, 9], 'tuple': (83, 12, 3), 'crate': 'dog', 'zeak': 'oh'} self.assertEqual( '{"Array": [1, 5, 6, 9], "Jack": "jill", "a": 1, "c": 5, "crate": "dog", "pick": "axe", "tuple": [83, 12, 3], "zeak": "oh"}', json.dumpsJSON(a, item_sort_key=itemgetter(0))) self.assertEqual( '{"a": 1, "Array": [1, 5, 6, 9], "c": 5, "crate": "dog", "Jack": "jill", "pick": "axe", "tuple": [83, 12, 3], "zeak": "oh"}', json.dumpsJSON(a, item_sort_key=lambda kv: kv[0].lower()))
def test_dict_keys(self): for val, _ in self.values: expect = {str(val): "value"} val = {val: "value"} self.assertEqual(expect, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)) )
def assertRoundTrip(self, obj, other, for_json=True): if for_json is None: # None will use the default s = json.dumpsJSON(obj) else: s = json.dumpsJSON(obj, for_json=for_json) self.assertEqual( json.loads(s), other)
def test_ensure_ascii_linebreak_encoding(self): # http://timelessrepo.com/json-isnt-a-javascript-subset s1 = u'\u2029\u2028' s2 = s1.encode('utf8') expect = '"\\u2029\\u2028"' self.assertEqual(json.dumpsJSON(s1), expect) self.assertEqual(json.dumpsJSON(s2), expect) self.assertEqual(json.dumpsJSON(s1, ensure_ascii=False), expect) self.assertEqual(json.dumpsJSON(s2, ensure_ascii=False), expect)
def test_ints(self): for opts in self.options: for val, expect in self.values: self.assertEqual( val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, **opts)))
def test_ints(self): for val, expect in self.values: self.assertEqual( val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)), )
def test_ensure_ascii_linebreak_encoding(self): # http://timelessrepo.com/json-isnt-a-javascript-subset s1 = u"\u2029\u2028" s2 = s1.encode("utf8") expect = '"\\u2029\\u2028"' self.assertEqual(json.dumpsJSON(s1), expect) self.assertEqual(json.dumpsJSON(s2), expect) self.assertEqual(json.dumpsJSON(s1, ensure_ascii=False), expect) self.assertEqual(json.dumpsJSON(s2, ensure_ascii=False), expect)
def template(self, type: str, only_required: bool, output: str) -> Optional[Dict]: schema = self._template(type, only_required) if output == "hjson": print(hjson.dumps(schema, indent=4, item_sort_key=sort_attrs)) elif output == "json": print(hjson.dumpsJSON(schema, indent=4, item_sort_key=sort_attrs)) elif output == "dict": return json.loads(hjson.dumpsJSON(schema, item_sort_key=sort_attrs)) else: raise ValueError("unrecognized output")
def test_ensure_ascii_false_bytestring_encoding(self): # http://code.google.com/p/simplejson/issues/detail?id=48 doc1 = {u"quux": b("Arr\xc3\xaat sur images")} doc2 = {u"quux": u("Arr\xeat sur images")} doc_ascii = '{"quux": "Arr\\u00eat sur images"}' doc_unicode = u'{"quux": "Arr\xeat sur images"}' self.assertEqual(json.dumpsJSON(doc1), doc_ascii) self.assertEqual(json.dumpsJSON(doc2), doc_ascii) self.assertEqual(json.dumpsJSON(doc1, ensure_ascii=False), doc_unicode) self.assertEqual(json.dumpsJSON(doc2, ensure_ascii=False), doc_unicode)
def _as_json(resource: Resource, store_metadata: bool) -> Dict: data = json.loads( hjson.dumpsJSON(resource, default=encode, item_sort_key=sort_attrs)) _remove_context(data) if store_metadata is True and resource._store_metadata: data.update( json.loads( hjson.dumpsJSON(resource._store_metadata, item_sort_key=sort_attrs))) return data
def test_dict_keys(self): for val, _ in self.values: expect = {str(val): 'value'} val = {val: 'value'} self.assertEqual( expect, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)))
def test_ensure_ascii_false_bytestring_encoding(self): # http://code.google.com/p/simplejson/issues/detail?id=48 doc1 = {u'quux': b('Arr\xc3\xaat sur images')} doc2 = {u'quux': u('Arr\xeat sur images')} doc_ascii = '{"quux": "Arr\\u00eat sur images"}' doc_unicode = u'{"quux": "Arr\xeat sur images"}' self.assertEqual(json.dumpsJSON(doc1), doc_ascii) self.assertEqual(json.dumpsJSON(doc2), doc_ascii) self.assertEqual(json.dumpsJSON(doc1, ensure_ascii=False), doc_unicode) self.assertEqual(json.dumpsJSON(doc2, ensure_ascii=False), doc_unicode)
def test_lists(self): for val, expect in self.values: val = [val, val] expect = [expect, expect] self.assertEqual( val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)))
def test_ensure_ascii_still_works(self): # in the ascii range, ensure that everything is the same for c in map(unichr, range(0, 127)): self.assertEqual( json.dumpsJSON(c, ensure_ascii=False), json.dumpsJSON(c)) snowman = u'\N{SNOWMAN}' self.assertEqual( json.dumpsJSON(c, ensure_ascii=False), '"' + c + '"')
def test_dicts(self): for val, expect in self.values: val = {'k': val} expect = {'k': expect} self.assertEqual( val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, int_as_string_bitcount=31)))
def test_ensure_ascii_false_returns_unicode(self): # http://code.google.com/p/simplejson/issues/detail?id=48 self.assertEqual(type(json.dumpsJSON([], ensure_ascii=False)), text_type) self.assertEqual(type(json.dumpsJSON(0, ensure_ascii=False)), text_type) self.assertEqual(type(json.dumpsJSON({}, ensure_ascii=False)), text_type) self.assertEqual(type(json.dumpsJSON("", ensure_ascii=False)), text_type)
def test_dicts(self): for opts in self.options: for val, expect in self.values: val = {'k': val} expect = {'k': expect} self.assertEqual( val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, **opts)))
def test_lists(self): for opts in self.options: for val, expect in self.values: val = [val, val] expect = [expect, expect] self.assertEqual( val, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, **opts)))
def test_dict_keys(self): for opts in self.options: for val, _ in self.values: expect = {str(val): 'value'} val = {val: 'value'} self.assertEqual( expect, json.loads(json.dumpsJSON(val))) self.assertEqual( expect, json.loads(json.dumpsJSON(val, **opts)))
def test_namedtuple_dumps(self): for v in [Value(1), Point(1, 2), DuckValue(1), DuckPoint(1, 2)]: d = v._asdict() self.assertEqual(d, json.loads(json.dumpsJSON(v))) self.assertEqual( d, json.loads(json.dumpsJSON(v, namedtuple_as_object=True))) self.assertEqual(d, json.loads(json.dumpsJSON(v, tuple_as_array=False))) self.assertEqual( d, json.loads(json.dumpsJSON(v, namedtuple_as_object=True, tuple_as_array=False)))
def test_dictrecursion(self): x = {} x["test"] = x try: json.dumpsJSON(x) except ValueError: pass else: self.fail("didn't raise ValueError on dict recursion") x = {} y = {"a": x, "b": x} # ensure that the marker is cleared json.dumpsJSON(y)
def test_encode_truefalse(self): self.assertEqual(json.dumpsJSON( {True: False, False: True}, sort_keys=True), '{"false": true, "true": false}') self.assertEqual( json.dumpsJSON( {2: 3.0, 4.0: long_type(5), False: 1, long_type(6): True, "7": 0}, sort_keys=True), '{"2": 3.0, "4.0": 5, "6": true, "7": 0, "false": 1}')
def test_separators(self): lst = [1, 2, 3, 4] expect = '[\n1,\n2,\n3,\n4\n]' expect_spaces = '[\n1, \n2, \n3, \n4\n]' # Ensure that separators still works self.assertEqual( expect_spaces, json.dumpsJSON(lst, indent=0, separators=(', ', ': '))) # Force the new defaults self.assertEqual(expect, json.dumpsJSON(lst, indent=0, separators=(',', ': '))) # Added in 2.1.4 self.assertEqual(expect, json.dumpsJSON(lst, indent=0))
def test_namedtuple_dumps(self): for v in [Value(1), Point(1, 2), DuckValue(1), DuckPoint(1, 2)]: d = v._asdict() self.assertEqual(d, json.loads(json.dumpsJSON(v))) self.assertEqual( d, json.loads(json.dumpsJSON(v, namedtuple_as_object=True))) self.assertEqual( d, json.loads(json.dumpsJSON(v, tuple_as_array=False))) self.assertEqual( d, json.loads( json.dumpsJSON(v, namedtuple_as_object=True, tuple_as_array=False)))
def test_separators(self): h = [ ["blorpie"], ["whoops"], [], "d-shtaeou", "d-nthiouh", "i-vhbjkhnth", { "nifty": 87 }, { "field": "yes", "morefield": False }, ] expect = textwrap.dedent("""\ [ [ "blorpie" ] , [ "whoops" ] , [] , "d-shtaeou" , "d-nthiouh" , "i-vhbjkhnth" , { "nifty" : 87 } , { "field" : "yes" , "morefield" : false } ]""") d1 = json.dumpsJSON(h) d2 = json.dumpsJSON(h, indent=" ", sort_keys=True, separators=(" ,", " : ")) h1 = json.loads(d1) h2 = json.loads(d2) self.assertEqual(h1, h) self.assertEqual(h2, h) self.assertEqual(d2, expect)
def test_decimal_defaults(self): d = Decimal('1.1') # use_decimal=True is the default 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 dumps(obj, human=False, **kw): if 'cls' not in kw: kw['cls'] = HJSEncoder if human: return hjson.dumps(obj, **kw) else: return hjson.dumpsJSON(obj, **kw)
def test_ordered_dict(self): # http://bugs.python.org/issue6105 items = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)] s = json.dumpsJSON(json.OrderedDict(items)) self.assertEqual( s, '{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}')
def check(indent, expected): d1 = json.dumpsJSON(h, indent=indent) self.assertEqual(d1, expected) sio = StringIO() json.dumpJSON(h, sio, indent=indent) self.assertEqual(sio.getvalue(), expected)
def test_ordered_dict(self): # http://bugs.python.org/issue6105 items = [("one", 1), ("two", 2), ("three", 3), ("four", 4), ("five", 5)] s = json.dumpsJSON(OrderedDict(items)) self.assertEqual( s, '{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}')
def test_separators(self): lst = [1,2,3,4] expect = '[\n1,\n2,\n3,\n4\n]' expect_spaces = '[\n1, \n2, \n3, \n4\n]' # Ensure that separators still works self.assertEqual( expect_spaces, json.dumpsJSON(lst, indent=0, separators=(', ', ': '))) # Force the new defaults self.assertEqual( expect, json.dumpsJSON(lst, indent=0, separators=(',', ': '))) # Added in 2.1.4 self.assertEqual( expect, json.dumpsJSON(lst, indent=0))
def test_indent(self): h = [['blorpie'], ['whoops'], [], 'd-shtaeou', 'd-nthiouh', 'i-vhbjkhnth', {'nifty': 87}, {'field': 'yes', 'morefield': False} ] expect = textwrap.dedent("""\ [ \t[ \t\t"blorpie" \t], \t[ \t\t"whoops" \t], \t[], \t"d-shtaeou", \t"d-nthiouh", \t"i-vhbjkhnth", \t{ \t\t"nifty": 87 \t}, \t{ \t\t"field": "yes", \t\t"morefield": false \t} ]""") d1 = json.dumpsJSON(h) d2 = json.dumpsJSON(h, indent='\t', sort_keys=True, separators=(',', ': ')) d3 = json.dumpsJSON(h, indent=' ', sort_keys=True, separators=(',', ': ')) d4 = json.dumpsJSON(h, indent=2, sort_keys=True, separators=(',', ': ')) h1 = json.loads(d1) h2 = json.loads(d2) h3 = json.loads(d3) h4 = json.loads(d4) self.assertEqual(h1, h) self.assertEqual(h2, h) self.assertEqual(h3, h) self.assertEqual(h4, h) self.assertEqual(d3, expect.replace('\t', ' ')) self.assertEqual(d4, expect.replace('\t', ' ')) # NOTE: Python 2.4 textwrap.dedent converts tabs to spaces, # so the following is expected to fail. Python 2.4 is not a # supported platform in hjson 2.1.0+. self.assertEqual(d2, expect)
def test_namedtuple_dumps_false(self): for v in [Value(1), Point(1, 2)]: l = list(v) self.assertEqual( l, json.loads(json.dumpsJSON(v, namedtuple_as_object=False))) self.assertRaises(TypeError, json.dumpsJSON, v, tuple_as_array=False, namedtuple_as_object=False)
def test_sort_keys(self): # https://github.com/simplejson/simplejson/issues/106 for num_keys in range(2, 32): p = dict((str(x), x) for x in range(num_keys)) sio = StringIO() json.dumpJSON(p, sio, sort_keys=True) self.assertEqual(sio.getvalue(), json.dumpsJSON(p, sort_keys=True)) self.assertEqual(json.loads(sio.getvalue()), p)
def test_asdict_not_callable_dump(self): for f in CONSTRUCTORS: self.assertRaises(TypeError, json.dumpJSON, f(DeadDuck()), StringIO(), namedtuple_as_object=True) sio = StringIO() json.dumpJSON(f(DeadDict()), sio, namedtuple_as_object=True) self.assertEqual( json.dumpsJSON(f({})), sio.getvalue())