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/.
import unittest
import mozunit
from taskgraph.util.templates import merge, merge_to
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()
|