def test_merge_dicts_raise_when_both_adding_same_key(base): left = deepcopy(base) right = deepcopy(base) left["foobar"] = "blah" right["foobar"] = "crap" try: merge_dicts(base, left, right) except ValueError as e: assert "left and right are both changing 'foobar'" in e.message else: assert False, "ValueError not raised"
def test_merge_dicts_raise_when_both_modifying_same_key(base): left = deepcopy(base) right = deepcopy(base) base["foobar"] = "foo" left["foobar"] = "blah" right["foobar"] = "crap" try: merge_dicts(base, left, right) except ValueError as e: assert "left and right are both changing" in str(e) else: assert False, "ValueError not raised"
def test_merge_dicts_mismatched_types(base): assume(len(base) > 0) left = deepcopy(base) right = deepcopy(base) to_modify = base.keys()[0] left[to_modify] = "foo" right[to_modify] = [1, 2, 3] try: merge_dicts(base, left, right) except ValueError as e: assert "type mismatch" in e.message else: assert False, "ValueError not raised"
def test_merge_dicts_unicode_and_str_are_equal(): base = {"foo": "bar"} left = {"foo": "bar", "blah": "crap", "abc": "def"} right = {u"foo": u"bar", u"blah": u"crap", u"ghi": u"jkl"} expected = {"foo": "bar", "blah": "crap", "abc": "def", "ghi": "jkl"} got = merge_dicts(base, left, right) assert got == expected
def test_merge_dicts_simple_changes(): base = {"foo": "oof", "bar": "rab", "nothing": "nothing"} left = deepcopy(base) right = deepcopy(base) expected = deepcopy(base) left["foo"] = "foo" right["bar"] = "bar" got = merge_dicts(base, left, right) expected = {"foo": "foo", "bar": "bar", "nothing": "nothing"} assert got == expected
def test_merge_dicts_join_lists(base): to_modify = None for key in base: if isinstance(base[key], list): to_modify = key break assume(to_modify is not None) left = deepcopy(base) right = deepcopy(base) expected = deepcopy(base) left[to_modify].extend(range(1, 4)) right[to_modify].extend(range(4, 7)) expected[to_modify].extend(range(1, 7)) got = merge_dicts(base, left, right) assert got == expected
def test_merge_dicts_simple_additions(): base = { "nothing": "nothing", } left = deepcopy(base) right = deepcopy(base) expected = deepcopy(base) left["foo"] = "foo" right["bar"] = "bar" got = merge_dicts(base, left, right) expected = { "foo": "foo", "bar": "bar", "nothing": "nothing", } assert got == expected