Browse Source

Test corner cases in attr_type + patch redundant test in bootstrap

Yentl Van Tendeloo 7 years ago
parent
commit
13dfddecbf
2 changed files with 24 additions and 13 deletions
  1. 9 12
      bootstrap/mini_modify.alc
  2. 15 1
      unit/test_all.py

+ 9 - 12
bootstrap/mini_modify.alc

@@ -193,19 +193,16 @@ String function cmd_attr_type(write : Boolean, model : Element, element_name : S
 				if (dict_in(model["metamodel"]["model"], "AttributeLink")):
 					attrs = getInstantiatableAttributes(model, element_name, "AttributeLink")
 					if (set_in(dict_keys(attrs), attr_name)):
-						if (set_in(dict_keys(attrs), attr_name)):
-							if (dict_in(model["model"][element_name], attr_name)):
-								Boolean optional
-								String attr_edge
-								attr_edge = reverseKeyLookup(model["model"], dict_read_edge(model["model"][element_name], attr_name))
-								optional = read_attribute(model, attr_edge, "optional")
-								model_undefine_attribute(model, element_name, attr_name)
-								model_define_attribute_ID(model, element_name, attr_name, optional, new_attr_type, attr_edge)
-								return "Success"!
-							else:
-								return "Attribute not defined here: " + attr_name!
+						if (dict_in(model["model"][element_name], attr_name)):
+							Boolean optional
+							String attr_edge
+							attr_edge = reverseKeyLookup(model["model"], dict_read_edge(model["model"][element_name], attr_name))
+							optional = read_attribute(model, attr_edge, "optional")
+							model_undefine_attribute(model, element_name, attr_name)
+							model_define_attribute_ID(model, element_name, attr_name, optional, new_attr_type, attr_edge)
+							return "Success"!
 						else:
-							return "Attribute not defined: " + attr_name!
+							return "Attribute not defined here: " + attr_name!
 					else:
 						return "Attribute not found: " + attr_name!
 				else:

+ 15 - 1
unit/test_all.py

@@ -2517,7 +2517,7 @@ class TestModelverse(unittest.TestCase):
         except ReadPermissionDenied:
             pass
 
-        # No write permissions, but can still query
+        # No write permissions
         before = element_list("formalisms/SimpleClassDiagrams")
         try:
             attribute_type("formalisms/SimpleClassDiagrams", "Class", "name", "Natural")
@@ -2533,6 +2533,20 @@ class TestModelverse(unittest.TestCase):
         except NoSimpleClassDiagramsModel:
             pass
 
+        # Attribute not defined here
+        try:
+            attribute_type("users/user/test/a", "D", "value", "Natural")
+            self.fail()
+        except SuperclassAttribute:
+            assert read_defined_attrs("users/user/test/a", "D") == ({"value": "String", "name": "String", "additional_attr": "Natural"}, {"new_name": "String"})
+
+        # Non-existing attribute
+        try:
+            attribute_type("users/user/test/a", "D", "adf", "Natural")
+            self.fail()
+        except UnknownAttribute:
+            assert read_defined_attrs("users/user/test/a", "D") == ({"value": "String", "name": "String", "additional_attr": "Natural"}, {"new_name": "String"})
+
     def test_op_attribute_name(self):
         model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
             SimpleAttribute String {}