def test_src_always_in_output(dest, src): try: merged = merge(dest, src) except ValueError: assume(False) src_paths = set(paths(src)) merged_paths = set(paths(merged)) for path in src_paths: assert path in merged_paths assert get(merged, path) == get(src, path)
def test_dest_in_merged_if_no_overwritten(dest, src): try: merged = merge(dest, src) except ValueError: assume(False) dest_paths = set(paths(dest)) src_paths = set(paths(src)) merged_paths = set(paths(merged)) for path in dest_paths: if path not in src_paths: assert path in merged_paths assert get(merged, path) == get(dest, path)
def test_merge_returns_new_dict(): dest = {} src = {} m = merge(dest, src) assert m is not dest assert m is not src
def test_incompatible_structures_raise_ValueError(): with pytest.raises(ValueError): merge({'': 0}, {'': {}}) with pytest.raises(ValueError): merge({'': {}}, {'': 0})
def test_empty_first(config): assert merge({}, config) == config
def test_empty_second(config): assert merge(config, {}) == config
def test_merge_empty(): assert merge({}, {}) == {}