def test_delete_attribute_values_with_superclass(self): mcl_super = CMetaclass("SCL_M", attributes={ "intVal": 20, "intVal2": 30 }) mcl = CMetaclass("M", superclasses=mcl_super, attributes={ "isBoolean": True, "intVal": 1 }) cl = CClass(mcl, "C", values={"isBoolean": False}) cl.delete_value("isBoolean") cl.delete_value("intVal2") eq_(cl.values, {"intVal": 1}) cl.set_value("intVal", 2, mcl_super) cl.set_value("intVal", 3, mcl) eq_(cl.values, {"intVal": 3}) cl.delete_value("intVal") eq_(cl.values, {"intVal": 2}) cl.set_value("intVal", 2, mcl_super) cl.set_value("intVal", 3, mcl) cl.delete_value("intVal", mcl) eq_(cl.values, {"intVal": 2}) cl.set_value("intVal", 2, mcl_super) cl.set_value("intVal", 3, mcl) cl.delete_value("intVal", mcl_super) eq_(cl.values, {"intVal": 3})
def test_delete_attribute_values(self): mcl = CMetaclass("M", attributes={ "isBoolean": True, "intVal": 1, "floatVal": 1.1, "string": "abc", "list": ["a", "b"] }) cl = CClass(mcl, "C") cl.delete_value("isBoolean") cl.delete_value("intVal") value_of_list = cl.delete_value("list") eq_(cl.values, {'floatVal': 1.1, 'string': 'abc'}) eq_(value_of_list, ['a', 'b'])
def test_links_as_attribute_values(self): code = CMetaclass("Code") source = CMetaclass("Source") code.association(source, "[contained_code] * -> [source] *") code_a = CMetaclass("Code A", superclasses=code) code_b = CMetaclass("Code B", superclasses=code) a_b_association = code_a.association(code_b, "a_b: [code_a] * -> [code_b] *", superclasses=code) CClass(source, "source_1") code_a1 = CClass(code_a, "code_a1") code_b1 = CClass(code_b, "code_b1") code_b2 = CClass(code_b, "code_b2") a_b_links = add_links({code_a1: [code_b1, code_b2]}, association=a_b_association) links_list = [code_a1, code_b2, code_b1, a_b_links[0], a_b_links[1]] collection_type = CMetaclass("Collection Type", attributes={ "primary_code": code, "default_value_code": a_b_links[0], "codes": list, "default_values_list": links_list }) collection = CClass(collection_type) eq_(collection.get_value("primary_code"), None) eq_(collection.get_value("default_value_code"), a_b_links[0]) eq_(collection.get_value("codes"), None) eq_(collection.get_value("default_values_list"), links_list) collection.set_value("primary_code", a_b_links[1]) collection.set_value("default_value_code", a_b_links[1]) collection.set_value("codes", [code_a1, a_b_links[0]]) collection.set_value("default_values_list", [a_b_links[0], a_b_links[1]]) eq_(collection.get_value("primary_code"), a_b_links[1]) eq_(collection.get_value("default_value_code"), a_b_links[1]) eq_(collection.get_value("codes"), [code_a1, a_b_links[0]]) eq_(collection.get_value("default_values_list"), [a_b_links[0], a_b_links[1]]) collection.values = {'default_values_list': [a_b_links[0]], "codes": []} eq_(collection.values, {'default_value_code': a_b_links[1], 'default_values_list': [a_b_links[0]], 'codes': [], 'primary_code': a_b_links[1]}) collection.delete_value("primary_code") collection.delete_value("default_value_code") collection.delete_value("codes") collection.delete_value("default_values_list") eq_(collection.get_value("primary_code"), None) eq_(collection.get_value("default_value_code"), None) eq_(collection.get_value("codes"), None) eq_(collection.get_value("default_values_list"), None)
def test_attribute_values_exceptional_cases(self): mcl = CMetaclass("M", attributes={"b": True}) cl1 = CClass(mcl, "C") cl1.delete() try: cl1.get_value("b") exception_expected_() except CException as e: eq_(e.value, "can't get value 'b' on deleted class") try: cl1.set_value("b", 1) exception_expected_() except CException as e: eq_(e.value, "can't set value 'b' on deleted class") try: cl1.delete_value("b") exception_expected_() except CException as e: eq_(e.value, "can't delete value 'b' on deleted class") try: cl1.values = {"b": 1} exception_expected_() except CException as e: eq_(e.value, "can't set values on deleted class") try: # we just use list here, in order to not get a warning that cl1.values has no effect list(cl1.values) exception_expected_() except CException as e: eq_(e.value, "can't get values on deleted class") cl = CClass(mcl, "C") try: cl.delete_value("x") exception_expected_() except CException as e: eq_(e.value, "attribute 'x' unknown for 'C'")