-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathtest_util.py
61 lines (47 loc) · 1.55 KB
/
test_util.py
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
"""Test suite for prance.util ."""
__author__ = "Jens Finkhaeuser"
__copyright__ = "Copyright (c) 2016-2021 Jens Finkhaeuser"
__license__ = "MIT"
__all__ = ()
import pytest
from prance import util
def test_stringify_keys():
test = {
"str": 42,
"unicode": 123,
"nested": {
"str": 42,
"unicode": 123,
},
42: "int",
3.14: "float",
}
result = util.stringify_keys(test)
def assert_object_identity(key, first, second):
ret = None
for k1, v1 in first.items():
for k2, v2 in second.items():
if k1 == key and k2 == key:
assert id(k1) == id(k2)
ret = id(k1)
assert ret is not None
return ret
# The number of keys must not have changed
assert len(test) == len(result)
assert len(test["nested"]) == len(result["nested"])
# str/unicode keys must remain absolutely unchanged. We're testing for
# object identity.
found = []
for key in ("str", "unicode"):
found.append(assert_object_identity(key, test, result))
found.append(assert_object_identity(key, test["nested"], result["nested"]))
# for all other keys we find in the test set, there must exist a
# stringified version of it in the result set
for key, value in test.items():
if key in found:
continue
assert str(key) in result
for key, value in test["nested"].items():
if key in found:
continue
assert str(key) in result["nested"]