1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
import pytest
import json
from hypothesis import given, strategies
def is_(x, y):
return type(x) is type(y) and x == y
def test_no_ensure_ascii():
assert is_(json.dumps(u"\u1234", ensure_ascii=False), u'"\u1234"')
assert is_(json.dumps("\xc0", ensure_ascii=False), '"\xc0"')
with pytest.raises(UnicodeDecodeError) as excinfo:
json.dumps((u"\u1234", "\xc0"), ensure_ascii=False)
assert str(excinfo.value).startswith(
"'ascii' codec can't decode byte 0xc0 ")
with pytest.raises(UnicodeDecodeError) as excinfo:
json.dumps(("\xc0", u"\u1234"), ensure_ascii=False)
assert str(excinfo.value).startswith(
"'ascii' codec can't decode byte 0xc0 ")
def test_issue2191():
assert is_(json.dumps(u"xxx", ensure_ascii=False), u'"xxx"')
jsondata = strategies.recursive(
strategies.none() |
strategies.booleans() |
strategies.floats(allow_nan=False) |
strategies.text(),
lambda children: strategies.lists(children) |
strategies.dictionaries(strategies.text(), children))
@given(jsondata)
def test_roundtrip(d):
assert json.loads(json.dumps(d)) == d
def test_skipkeys():
assert json.dumps({Ellipsis: 42}, skipkeys=True) == '{}'
assert json.dumps({Ellipsis: 42, 3: 4}, skipkeys=True) == '{"3": 4}'
assert json.dumps({3: 4, Ellipsis: 42}, skipkeys=True) == '{"3": 4}'
assert json.dumps({Ellipsis: 42, NotImplemented: 43}, skipkeys=True) \
== '{}'
assert json.dumps({3: 4, Ellipsis: 42, NotImplemented: 43}, skipkeys=True)\
== '{"3": 4}'
assert json.dumps({Ellipsis: 42, 3: 4, NotImplemented: 43}, skipkeys=True)\
== '{"3": 4}'
assert json.dumps({Ellipsis: 42, NotImplemented: 43, 3: 4}, skipkeys=True)\
== '{"3": 4}'
assert json.dumps({3: 4, 5: 6, Ellipsis: 42}, skipkeys=True) \
== '{"3": 4, "5": 6}'
assert json.dumps({3: 4, Ellipsis: 42, 5: 6}, skipkeys=True) \
== '{"3": 4, "5": 6}'
assert json.dumps({Ellipsis: 42, 3: 4, 5: 6}, skipkeys=True) \
== '{"3": 4, "5": 6}'
def test_boolean_as_dict_key():
# In CPython 2.x, dumps({True:...}) gives {"True":...}. It should be
# "true" instead; it's a bug as far as I can tell. In 3.x it was fixed.
# BUT! if we call dumps() with sort_keys=True, then CPython (any version)
# gives "true" instead of "True". Surprize!
# I don't want to understand why, let's just not attempt to reproduce that.
assert json.dumps({True: 5}) == '{"true": 5}'
assert json.dumps({False: 5}) == '{"false": 5}'
|