from nameHandling.base import ComponentName, NameStyleBproto from nameHandling.style.pythonNameStyle import NameStylePython from protocol_components.enumeration import FactoryEnumeration from copy import deepcopy def test_deepcopy_component_name(): name = ComponentName(["This", "Is", "Some", "text"], NameStylePython, source_string="ThisIsSomeText") new_name = deepcopy(name) name.name_parts = ["Some", "Other", "Stuff"] name.source_string = "SomeOtherStuff" name.source_style = NameStyleBproto # Verify Values did not change assert name.name_parts != new_name.name_parts assert name.source_string != new_name.source_string assert name.source_style != new_name.source_style def test_deepcopy_enum(): old_enum_factory = FactoryEnumeration() old_enum_factory.add_value("Value1", 1) old_enum_factory.add_value("Value2", 2) old_enum_factory.add_value("Value3", 3) old_enum = old_enum_factory.assemble("OldEnum") new_enum = deepcopy(old_enum) # Check ids assert id(new_enum) != id(old_enum) assert id(new_enum.name) != id(old_enum.name) assert id(old_enum.values) != id(new_enum.values) old_keys = list(old_enum.values.keys()) new_keys = list(new_enum.values.keys()) assert id(old_keys[0]) != id(new_keys[0]) assert id(old_keys[1]) != id(new_keys[1]) assert id(old_keys[2]) != id(new_keys[2]) def test_deepcopy_component_names_memo(): name1 = NameStyleBproto.fromStr("Value1") name2 = NameStyleBproto.fromStr("Value2") assert id(name1) != id(name2) name1_copy = deepcopy(name1) assert isinstance(name1_copy, ComponentName) assert name1_copy == name1 assert id(name1_copy) != id(name1) name1_copy2 = deepcopy(name1, { id(name1): name1_copy, id(name1_copy): name1_copy }) name1_copy3 = deepcopy(name1_copy, { id(name1): name1_copy, id(name1_copy): name1_copy }) assert isinstance(name1_copy2, ComponentName) assert isinstance(name1_copy3, ComponentName) assert id(name1_copy) == id(name1_copy2) assert id(name1_copy2) != id(name1) assert id(name1_copy) == id(name1_copy3) assert id(name1_copy3) != id(name1)