test_util_templates.py (2604B)
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/. 4 5 6 import unittest 7 8 import mozunit 9 from taskgraph.util.templates import merge, merge_to 10 11 12 class MergeTest(unittest.TestCase): 13 def test_merge_to_dicts(self): 14 source = {"a": 1, "b": 2} 15 dest = {"b": "20", "c": 30} 16 expected = { 17 "a": 1, # source only 18 "b": 2, # source overrides dest 19 "c": 30, # dest only 20 } 21 self.assertEqual(merge_to(source, dest), expected) 22 self.assertEqual(dest, expected) 23 24 def test_merge_to_lists(self): 25 source = {"x": [3, 4]} 26 dest = {"x": [1, 2]} 27 expected = {"x": [1, 2, 3, 4]} # dest first 28 self.assertEqual(merge_to(source, dest), expected) 29 self.assertEqual(dest, expected) 30 31 def test_merge_diff_types(self): 32 source = {"x": [1, 2]} 33 dest = {"x": "abc"} 34 expected = {"x": [1, 2]} # source wins 35 self.assertEqual(merge_to(source, dest), expected) 36 self.assertEqual(dest, expected) 37 38 def test_merge(self): 39 first = {"a": 1, "b": 2, "d": 11} 40 second = {"b": 20, "c": 30} 41 third = {"c": 300, "d": 400} 42 expected = { 43 "a": 1, 44 "b": 20, 45 "c": 300, 46 "d": 400, 47 } 48 self.assertEqual(merge(first, second, third), expected) 49 50 # inputs haven't changed.. 51 self.assertEqual(first, {"a": 1, "b": 2, "d": 11}) 52 self.assertEqual(second, {"b": 20, "c": 30}) 53 self.assertEqual(third, {"c": 300, "d": 400}) 54 55 def test_merge_by(self): 56 source = { 57 "x": "abc", 58 "y": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}}, 59 } 60 dest = {"y": {"by-foo": {"purple": "rain", "default": ["x", "y", "z"]}}} 61 expected = { 62 "x": "abc", 63 "y": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}}, 64 } # source wins 65 self.assertEqual(merge_to(source, dest), expected) 66 self.assertEqual(dest, expected) 67 68 def test_merge_multiple_by(self): 69 source = {"x": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}}} 70 dest = {"x": {"by-bar": {"purple": "rain", "default": ["x", "y", "z"]}}} 71 expected = { 72 "x": {"by-foo": {"quick": "fox", "default": ["a", "b", "c"]}} 73 } # source wins 74 self.assertEqual(merge_to(source, dest), expected) 75 76 77 if __name__ == "__main__": 78 mozunit.main()