1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 from gecko_taskgraph
.util
.templates
import merge
, merge_to
13 class MergeTest(unittest
.TestCase
):
14 def test_merge_to_dicts(self
):
15 source
= {"a": 1, "b": 2}
16 dest
= {"b": "20", "c": 30}
19 "b": 2, # source overrides dest
22 self
.assertEqual(merge_to(source
, dest
), expected
)
23 self
.assertEqual(dest
, expected
)
25 def test_merge_to_lists(self
):
26 source
= {"x": [3, 4]}
28 expected
= {"x": [1, 2, 3, 4]} # dest first
29 self
.assertEqual(merge_to(source
, dest
), expected
)
30 self
.assertEqual(dest
, expected
)
32 def test_merge_diff_types(self
):
33 source
= {"x": [1, 2]}
35 expected
= {"x": [1, 2]} # source wins
36 self
.assertEqual(merge_to(source
, dest
), expected
)
37 self
.assertEqual(dest
, expected
)
40 first
= {"a": 1, "b": 2, "d": 11}
41 second
= {"b": 20, "c": 30}
42 third
= {"c": 300, "d": 400}
49 self
.assertEqual(merge(first
, second
, third
), expected
)
51 # inputs haven't changed..
52 self
.assertEqual(first
, {"a": 1, "b": 2, "d": 11})
53 self
.assertEqual(second
, {"b": 20, "c": 30})
54 self
.assertEqual(third
, {"c": 300, "d": 400})
56 def test_merge_by(self
):
59 "y": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}},
61 dest
= {"y": {"by-foo": {"purple": "rain", "default": ["x", "y", "z"]}}}
64 "y": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}},
66 self
.assertEqual(merge_to(source
, dest
), expected
)
67 self
.assertEqual(dest
, expected
)
69 def test_merge_multiple_by(self
):
70 source
= {"x": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}}}
71 dest
= {"x": {"by-bar": {"purple": "rain", "default": ["x", "y", "z"]}}}
73 "x": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}}
75 self
.assertEqual(merge_to(source
, dest
), expected
)
78 if __name__
== "__main__":