From 5285c8eeac8ef79e19d9063392fd16fc120ef6af Mon Sep 17 00:00:00 2001 From: Daehee Kim Date: Thu, 15 Aug 2019 15:53:32 +0900 Subject: [PATCH] Add tests for `json.dump` --- tests/snippets/json_snippet.py | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tests/snippets/json_snippet.py b/tests/snippets/json_snippet.py index 15866ab86..6073975a1 100644 --- a/tests/snippets/json_snippet.py +++ b/tests/snippets/json_snippet.py @@ -1,5 +1,6 @@ from testutils import assert_raises import json +from io import StringIO def round_trip_test(obj): # serde_json and Python's json module produce slightly differently spaced @@ -7,25 +8,54 @@ def round_trip_test(obj): # proxy return obj == json.loads(json.dumps(obj)) +def json_dump(obj): + f = StringIO() + json.dump(obj, f) + f.seek(0) + return f.getvalue() + assert '"string"' == json.dumps("string") +assert '"string"' == json_dump("string") + assert "1" == json.dumps(1) +assert "1" == json_dump(1) + assert "1.0" == json.dumps(1.0) +assert "1.0" == json_dump(1.0) + assert "true" == json.dumps(True) +assert "true" == json_dump(True) + assert "false" == json.dumps(False) +assert "false" == json_dump(False) + assert 'null' == json.dumps(None) +assert 'null' == json_dump(None) assert '[]' == json.dumps([]) +assert '[]' == json_dump([]) + assert '[1]' == json.dumps([1]) +assert '[1]' == json_dump([1]) + assert '[[1]]' == json.dumps([[1]]) +assert '[[1]]' == json_dump([[1]]) + assert round_trip_test([1, "string", 1.0, True]) assert '[]' == json.dumps(()) +assert '[]' == json_dump(()) + assert '[1]' == json.dumps((1,)) +assert '[1]' == json_dump((1,)) + assert '[[1]]' == json.dumps(((1,),)) +assert '[[1]]' == json_dump(((1,),)) # tuples don't round-trip through json assert [1, "string", 1.0, True] == json.loads(json.dumps((1, "string", 1.0, True))) assert '{}' == json.dumps({}) +assert '{}' == json_dump({}) assert round_trip_test({'a': 'b'}) # should reject non-str keys in jsons @@ -49,21 +79,31 @@ assert [['a'], 'b'] == json.loads('[["a"], "b"]') class String(str): pass assert "string" == json.loads(String('"string"')) + assert '"string"' == json.dumps(String("string")) +assert '"string"' == json_dump(String("string")) class Int(int): pass class Float(float): pass assert '1' == json.dumps(Int(1)) +assert '1' == json_dump(Int(1)) + assert '0.5' == json.dumps(Float(0.5)) +assert '0.5' == json_dump(Float(0.5)) class List(list): pass class Tuple(tuple): pass class Dict(dict): pass assert '[1]' == json.dumps(List([1])) +assert '[1]' == json_dump(List([1])) + assert json.dumps((1, "string", 1.0, True)) == json.dumps(Tuple((1, "string", 1.0, True))) +assert json_dump((1, "string", 1.0, True)) == json_dump(Tuple((1, "string", 1.0, True))) + assert json.dumps({'a': 'b'}) == json.dumps(Dict({'a': 'b'})) +assert json_dump({'a': 'b'}) == json_dump(Dict({'a': 'b'})) # big ints should not crash VM # TODO: test for correct output when actual serialization implemented and doesn’t throw