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
|
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import absolute_import, print_function, unicode_literals
import unittest
import mozunit
from taskgraph.util.templates import merge_to, merge
class MergeTest(unittest.TestCase):
def test_merge_to_dicts(self):
source = {"a": 1, "b": 2}
dest = {"b": "20", "c": 30}
expected = {
"a": 1, # source only
"b": 2, # source overrides dest
"c": 30, # dest only
}
self.assertEqual(merge_to(source, dest), expected)
self.assertEqual(dest, expected)
def test_merge_to_lists(self):
source = {"x": [3, 4]}
dest = {"x": [1, 2]}
expected = {"x": [1, 2, 3, 4]} # dest first
self.assertEqual(merge_to(source, dest), expected)
self.assertEqual(dest, expected)
def test_merge_diff_types(self):
source = {"x": [1, 2]}
dest = {"x": "abc"}
expected = {"x": [1, 2]} # source wins
self.assertEqual(merge_to(source, dest), expected)
self.assertEqual(dest, expected)
def test_merge(self):
first = {"a": 1, "b": 2, "d": 11}
second = {"b": 20, "c": 30}
third = {"c": 300, "d": 400}
expected = {
"a": 1,
"b": 20,
"c": 300,
"d": 400,
}
self.assertEqual(merge(first, second, third), expected)
# inputs haven't changed..
self.assertEqual(first, {"a": 1, "b": 2, "d": 11})
self.assertEqual(second, {"b": 20, "c": 30})
self.assertEqual(third, {"c": 300, "d": 400})
def test_merge_by(self):
source = {
"x": "abc",
"y": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}},
}
dest = {"y": {"by-foo": {"purple": "rain", "default": ["x", "y", "z"]}}}
expected = {
"x": "abc",
"y": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}},
} # source wins
self.assertEqual(merge_to(source, dest), expected)
self.assertEqual(dest, expected)
def test_merge_multiple_by(self):
source = {"x": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}}}
dest = {"x": {"by-bar": {"purple": "rain", "default": ["x", "y", "z"]}}}
expected = {
"x": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}}
} # source wins
self.assertEqual(merge_to(source, dest), expected)
if __name__ == "__main__":
mozunit.main()
|