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}'
|