示例#1
0
    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})
示例#2
0
 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)
示例#4
0
    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'")