-
-
Notifications
You must be signed in to change notification settings - Fork 138
/
Copy pathtest_ref_map.py
124 lines (113 loc) · 3.86 KB
/
test_ref_map.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import pytest
from graphql.pyutils import RefMap
obj1 = {"a": 1, "b": 2, "c": 3}
obj2 = obj1.copy()
obj3 = obj1.copy()
obj4 = obj1.copy()
def describe_object_map():
def can_create_an_empty_map():
m = RefMap[str, int]()
assert not m
assert len(m) == 0
assert list(m) == []
assert list(m.keys()) == []
assert list(m.values()) == []
assert list(m.items()) == []
def can_create_a_map_with_scalar_keys_and_values():
m = RefMap[str, int](list(obj1.items()))
assert m
assert len(m) == 3
assert list(m) == ["a", "b", "c"]
assert list(m.keys()) == ["a", "b", "c"]
assert list(m.values()) == [1, 2, 3]
assert list(m.items()) == [("a", 1), ("b", 2), ("c", 3)]
for k, v in m.items():
assert k in m
assert m[k] == v
assert m.get(k) == v
assert v not in m
with pytest.raises(KeyError):
m[v] # type: ignore
assert m.get(v) is None
def can_create_a_map_with_one_object_as_key():
m = RefMap[dict, int]([(obj1, 1)])
assert m
assert len(m) == 1
assert list(m) == [obj1]
assert list(m.keys()) == [obj1]
assert list(m.values()) == [1]
assert list(m.items()) == [(obj1, 1)]
assert obj1 in m
assert 1 not in m
assert obj2 not in m
assert m[obj1] == 1
assert m.get(obj1) == 1
with pytest.raises(KeyError):
m[1] # type: ignore
assert m.get(1) is None
with pytest.raises(KeyError):
m[obj2]
assert m.get(obj2) is None
def can_create_a_map_with_three_objects_as_keys():
m = RefMap[dict, int]([(obj1, 1), (obj2, 2), (obj3, 3)])
assert m
assert len(m) == 3
assert list(m) == [obj1, obj2, obj3]
assert list(m.keys()) == [obj1, obj2, obj3]
assert list(m.values()) == [1, 2, 3]
assert list(m.items()) == [(obj1, 1), (obj2, 2), (obj3, 3)]
for k, v in m.items():
assert k in m
assert m[k] == v
assert m.get(k) == v
assert v not in m
with pytest.raises(KeyError):
m[v] # type: ignore
assert m.get(v) is None
assert obj4 not in m
with pytest.raises(KeyError):
m[obj4]
assert m.get(obj4) is None
def can_set_a_key_that_is_an_object():
m = RefMap[dict, int]()
m[obj1] = 1
assert m[obj1] == 1
assert list(m) == [obj1]
with pytest.raises(KeyError):
m[obj2]
m[obj2] = 2
assert m[obj1] == 1
assert m[obj2] == 2
assert list(m) == [obj1, obj2]
m[obj2] = 3
assert m[obj1] == 1
assert m[obj2] == 3
assert list(m) == [obj1, obj2]
assert len(m) == 2
def can_delete_a_key_that_is_an_object():
m = RefMap[dict, int]([(obj1, 1), (obj2, 2), (obj3, 3)])
del m[obj2]
assert obj2 not in m
assert list(m) == [obj1, obj3]
with pytest.raises(KeyError):
del m[obj2]
assert list(m) == [obj1, obj3]
assert len(m) == 2
def can_update_a_map():
m = RefMap[dict, int]([(obj1, 1), (obj2, 2)])
m.update([])
assert list(m.keys()) == [obj1, obj2]
assert len(m) == 2
m.update([(obj2, 3), (obj3, 4)])
assert list(m.keys()) == [obj1, obj2, obj3]
assert list(m.values()) == [1, 3, 4]
assert list(m.items()) == [(obj1, 1), (obj2, 3), (obj3, 4)]
assert obj3 in m
assert m[obj2] == 3
assert m[obj3] == 4
assert len(m) == 3
def can_get_the_representation_of_a_ref_map():
m = RefMap[dict, int]([(obj1, 1), (obj2, 2)])
assert repr(m) == (
"RefMap([({'a': 1, 'b': 2, 'c': 3}, 1), ({'a': 1, 'b': 2, 'c': 3}, 2)])"
)