-
Notifications
You must be signed in to change notification settings - Fork 1
/
tests.py
119 lines (101 loc) · 3.61 KB
/
tests.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
import unittest
import jsonmerge
class TestDictzipLongest(unittest.TestCase):
def test_single_dict_results_in_dicts_items(self):
d = {1: 2, 3: 4, 5: 6}
self.assertEqual(
jsonmerge.dictzip_longest(d),
list(d.items()))
def test_empy_dicts_yield_empty_list(self):
self.assertEqual(
jsonmerge.dictzip_longest({}, {}, {}, {}),
[])
def test_missing_values_are_replaced_by_fillvalue(self):
x = dict(a=1, b=2, c=3)
y = dict(a=True, b="hi")
z = dict(a=None)
self.assertEqual(
sorted(jsonmerge.dictzip_longest(x, y, z, fillvalue="MISSING")),
[("a", 1, True, None),
("b", 2, "hi", "MISSING"),
("c", 3, "MISSING", "MISSING")])
class TestJsonMerge(unittest.TestCase):
def test_merging_2_scalar_values_yields_second(self):
self.assertEqual(jsonmerge.json_merge(123, 456), 456)
self.assertEqual(jsonmerge.json_merge(123, "foo"), "foo")
self.assertEqual(jsonmerge.json_merge(123, None), None)
def test_merging_dict_with_scalar_yields_second(self):
self.assertEqual(jsonmerge.json_merge({1: 2}, 123), 123)
self.assertEqual(jsonmerge.json_merge(True, {1: 2}), {1: 2})
def test_merging_list_with_scalar_yields_second(self):
self.assertEqual(jsonmerge.json_merge([1, 2], 123), 123)
self.assertEqual(jsonmerge.json_merge(True, [1, 2]), [1, 2])
def test_merging_list_with_dict_yields_second(self):
self.assertEqual(jsonmerge.json_merge([1, 2], {1: 2}), {1: 2})
self.assertEqual(jsonmerge.json_merge({1: 2}, [1, 2]), [1, 2])
def test_merging_2_lists_yields_concatenation_of_both(self):
self.assertEqual(jsonmerge.json_merge([1, 2, 3, 4], [5, 6]),
[1, 2, 3, 4, 5, 6])
def test_merging_2_dicts_yields_dict_with_keys_from_both(self):
a = dict(a=1, b=2, c=3)
b = dict(c=-1, d=-2)
self.assertEqual(set(jsonmerge.json_merge(a, b).keys()),
set(a.keys()) | set(b.keys()))
def test_merging_2_dicts_yields_values_from_second_for_collisions(self):
a = dict(a=1, b=2, c=3)
b = dict(a="x", c="y")
self.assertEqual(jsonmerge.json_merge(a, b),
dict(a="x", b=2, c="y"))
class TestJsonMergeAll(unittest.TestCase):
def test_merging_nothing_results_in_exception(self):
with self.assertRaises(ValueError):
jsonmerge.json_merge_all([])
def test_merging_doc_example(self):
a = {
"a": {
"foo": 1,
"bar": True
},
"b": {
"foo": 3,
"bar": False,
"nested": {
"a": 1,
"b": 2
}
}
}
b = {
"a": {
"baz": "hi"
},
"b": {
"foo": 10,
"baz": "boz",
"nested": {
"b": 10
}
},
"c": ["alice"]
}
c = {
"c": ["bill", "ben"]
}
expected = {
"a": {
"foo": 1,
"bar": True,
"baz": "hi"
},
"b": {
"foo": 10,
"bar": False,
"baz": "boz",
"nested": {
"a": 1,
"b": 10
}
},
"c": ["alice", "bill", "ben"]
}
self.assertEqual(jsonmerge.json_merge_all([a, b, c]), expected)