def test_attribute_values_inheritance(self): t1 = CMetaclass("T1") t2 = CMetaclass("T2") c = CMetaclass("C", superclasses=[t1, t2]) sc = CMetaclass("C", superclasses=c) t1.attributes = {"i0": 0} t2.attributes = {"i1": 1} c.attributes = {"i2": 2} sc.attributes = {"i3": 3} cl = CClass(sc, "C") for name, value in {"i0": 0, "i1": 1, "i2": 2, "i3": 3}.items(): eq_(cl.get_value(name), value) eq_(cl.get_value("i0", t1), 0) eq_(cl.get_value("i1", t2), 1) eq_(cl.get_value("i2", c), 2) eq_(cl.get_value("i3", sc), 3) for name, value in {"i0": 10, "i1": 11, "i2": 12, "i3": 13}.items(): cl.set_value(name, value) for name, value in {"i0": 10, "i1": 11, "i2": 12, "i3": 13}.items(): eq_(cl.get_value(name), value) eq_(cl.get_value("i0", t1), 10) eq_(cl.get_value("i1", t2), 11) eq_(cl.get_value("i2", c), 12) eq_(cl.get_value("i3", sc), 13)
def test_attribute_values_same_name_inheritance(self): t1 = CMetaclass("T1") t2 = CMetaclass("T2") c = CMetaclass("C", superclasses=[t1, t2]) sc = CMetaclass("C", superclasses=c) t1.attributes = {"i": 0} t2.attributes = {"i": 1} c.attributes = {"i": 2} sc.attributes = {"i": 3} cl1 = CClass(sc) cl2 = CClass(c) cl3 = CClass(t1) eq_(cl1.get_value("i"), 3) eq_(cl2.get_value("i"), 2) eq_(cl3.get_value("i"), 0) eq_(cl1.get_value("i", sc), 3) eq_(cl1.get_value("i", c), 2) eq_(cl1.get_value("i", t2), 1) eq_(cl1.get_value("i", t1), 0) eq_(cl2.get_value("i", c), 2) eq_(cl2.get_value("i", t2), 1) eq_(cl2.get_value("i", t1), 0) eq_(cl3.get_value("i", t1), 0) cl1.set_value("i", 10) cl2.set_value("i", 11) cl3.set_value("i", 12) eq_(cl1.get_value("i"), 10) eq_(cl2.get_value("i"), 11) eq_(cl3.get_value("i"), 12) eq_(cl1.get_value("i", sc), 10) eq_(cl1.get_value("i", c), 2) eq_(cl1.get_value("i", t2), 1) eq_(cl1.get_value("i", t1), 0) eq_(cl2.get_value("i", c), 11) eq_(cl2.get_value("i", t2), 1) eq_(cl2.get_value("i", t1), 0) eq_(cl3.get_value("i", t1), 12) cl1.set_value("i", 130, sc) cl1.set_value("i", 100, t1) cl1.set_value("i", 110, t2) cl1.set_value("i", 120, c) eq_(cl1.get_value("i"), 130) eq_(cl1.get_value("i", sc), 130) eq_(cl1.get_value("i", c), 120) eq_(cl1.get_value("i", t2), 110) eq_(cl1.get_value("i", t1), 100)
def test_attribute_values_inheritance_after_delete_superclass(self): t1 = CMetaclass("T1") t2 = CMetaclass("T2") c = CMetaclass("C", superclasses=[t1, t2]) sc = CMetaclass("C", superclasses=c) t1.attributes = {"i0": 0} t2.attributes = {"i1": 1} c.attributes = {"i2": 2} sc.attributes = {"i3": 3} cl = CClass(sc, "C") t2.delete() for name, value in {"i0": 0, "i2": 2, "i3": 3}.items(): eq_(cl.get_value(name), value) try: cl.get_value("i1") exception_expected_() except CException as e: eq_(e.value, "attribute 'i1' unknown for 'C'") eq_(cl.get_value("i0", t1), 0) try: cl.get_value("i1", t2) exception_expected_() except CException as e: eq_(e.value, "attribute 'i1' unknown for ''") eq_(cl.get_value("i2", c), 2) eq_(cl.get_value("i3", sc), 3) for name, value in {"i0": 10, "i2": 12, "i3": 13}.items(): cl.set_value(name, value) try: cl.set_value("i1", 11) exception_expected_() except CException as e: eq_(e.value, "attribute 'i1' unknown for 'C'") for name, value in {"i0": 10, "i2": 12, "i3": 13}.items(): eq_(cl.get_value(name), value) try: cl.get_value("i1") exception_expected_() except CException as e: eq_(e.value, "attribute 'i1' unknown for 'C'") eq_(cl.get_value("i0", t1), 10) try: cl.get_value("i1", t2) exception_expected_() except CException as e: eq_(e.value, "attribute 'i1' unknown for ''") eq_(cl.get_value("i2", c), 12) eq_(cl.get_value("i3", sc), 13)
def test_values_multiple_inheritance(self): t1 = CMetaclass("T1") t2 = CMetaclass("T2") st_a = CMetaclass("STA", superclasses=[t1, t2]) sub_a = CMetaclass("SubA", superclasses=[st_a]) st_b = CMetaclass("STB", superclasses=[t1, t2]) sub_b = CMetaclass("SubB", superclasses=[st_b]) st_c = CMetaclass("STC") sub_c = CMetaclass("SubC", superclasses=[st_c]) mcl = CMetaclass("M", superclasses=[sub_a, sub_b, sub_c]) cl = CClass(mcl, "C") t1.attributes = {"i0": 0} t2.attributes = {"i1": 1} st_a.attributes = {"i2": 2} sub_a.attributes = {"i3": 3} st_b.attributes = {"i4": 4} sub_b.attributes = {"i5": 5} st_c.attributes = {"i6": 6} sub_c.attributes = {"i7": 7} eq_(cl.get_value("i0"), 0) eq_(cl.get_value("i1"), 1) eq_(cl.get_value("i2"), 2) eq_(cl.get_value("i3"), 3) eq_(cl.get_value("i4"), 4) eq_(cl.get_value("i5"), 5) eq_(cl.get_value("i6"), 6) eq_(cl.get_value("i7"), 7) eq_(cl.get_value("i0", t1), 0) eq_(cl.get_value("i1", t2), 1) eq_(cl.get_value("i2", st_a), 2) eq_(cl.get_value("i3", sub_a), 3) eq_(cl.get_value("i4", st_b), 4) eq_(cl.get_value("i5", sub_b), 5) eq_(cl.get_value("i6", st_c), 6) eq_(cl.get_value("i7", sub_c), 7) cl.set_value("i0", 10) cl.set_value("i1", 11) cl.set_value("i2", 12) cl.set_value("i3", 13) cl.set_value("i4", 14) cl.set_value("i5", 15) cl.set_value("i6", 16) cl.set_value("i7", 17) eq_(cl.get_value("i0"), 10) eq_(cl.get_value("i1"), 11) eq_(cl.get_value("i2"), 12) eq_(cl.get_value("i3"), 13) eq_(cl.get_value("i4"), 14) eq_(cl.get_value("i5"), 15) eq_(cl.get_value("i6"), 16) eq_(cl.get_value("i7"), 17)
def test_attributes_overwrite_no_defaults(self): mcl = CMetaclass(attributes={"isBoolean": bool, "intVal": int}) cl = CClass(mcl, "C") eq_(cl.get_value("isBoolean"), None) cl.set_value("isBoolean", False) mcl.attributes = {"isBoolean": bool, "intVal": int, "floatVal": float} eq_(cl.get_value("isBoolean"), False) eq_(cl.get_value("floatVal"), None) eq_(cl.get_value("intVal"), None) cl.set_value("floatVal", 1.2) eq_(cl.get_value("floatVal"), 1.2)
def test_attribute_deleted_no_default(self): mcl = CMetaclass(attributes={"isBoolean": bool, "intVal": int}) mcl.attributes = {"isBoolean": bool} cl = CClass(mcl, "C") eq_(cl.get_value("isBoolean"), None) try: cl.get_value("intVal") exception_expected_() except CException as e: eq_(e.value, "attribute 'intVal' unknown for 'C'") try: cl.set_value("intVal", 1) exception_expected_() except CException as e: eq_(e.value, "attribute 'intVal' unknown for 'C'")
def test_attributes_overwrite(self): mcl = CMetaclass(attributes={"isBoolean": True, "intVal": 15}) cl = CClass(mcl, "C") eq_(cl.get_value("intVal"), 15) try: cl.get_value("floatVal") exception_expected_() except CException as e: eq_(e.value, "attribute 'floatVal' unknown for 'C'") cl.set_value("intVal", 18) mcl.attributes = {"isBoolean": False, "intVal": 19, "floatVal": 25.1} eq_(cl.get_value("isBoolean"), True) eq_(cl.get_value("floatVal"), 25.1) eq_(cl.get_value("intVal"), 18) cl.set_value("floatVal", 1.2) eq_(cl.get_value("floatVal"), 1.2)
def test_attribute_deleted(self): mcl = CMetaclass(attributes={"isBoolean": True, "intVal": 15}) cl = CClass(mcl, "C") eq_(cl.get_value("intVal"), 15) mcl.attributes = {"isBoolean": False} eq_(cl.get_value("isBoolean"), True) try: cl.get_value("intVal") exception_expected_() except CException as e: eq_(e.value, "attribute 'intVal' unknown for 'C'") try: cl.set_value("intVal", 1) exception_expected_() except CException as e: eq_(e.value, "attribute 'intVal' unknown for 'C'")
def test_attributes_deleted_on_subclass_no_defaults(self): mcl = CMetaclass("M", attributes={"isBoolean": bool, "intVal": int}) mcl2 = CMetaclass("M2", attributes={"isBoolean": bool}, superclasses=mcl) cl = CClass(mcl2, "C") eq_(cl.get_value("isBoolean"), None) eq_(cl.get_value("isBoolean", mcl), None) eq_(cl.get_value("isBoolean", mcl2), None) mcl2.attributes = {} eq_(cl.get_value("isBoolean"), None) eq_(cl.get_value("intVal"), None) eq_(cl.get_value("isBoolean", mcl), None) try: cl.get_value("isBoolean", mcl2) exception_expected_() except CException as e: eq_(e.value, "attribute 'isBoolean' unknown for 'M2'")
def test_attribute_defined_after_instance(self): mcl = CMetaclass("C") cl = CClass(mcl, "C") mcl.attributes = {"floatVal": float} cl.set_value("floatVal", 15) eq_(cl.get_value("floatVal"), 15)