浏览代码

Add test for attr_assign

Yentl Van Tendeloo 7 年之前
父节点
当前提交
4a7668e967
共有 1 个文件被更改,包括 180 次插入2 次删除
  1. 180 2
      unit/test_all.py

+ 180 - 2
unit/test_all.py

@@ -314,6 +314,27 @@ class TestModelverse(unittest.TestCase):
         model_add("users/user/test/e", "users/user/test/d")
         model_add("users/user/test/f", "users/user/test/e")
 
+    def test_op_model_add_compilation_error(self):
+        try:
+            model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
+                abdfaefeaf
+                """)
+            self.fail()
+        except CompilationError:
+            pass
+
+        try:
+            #TODO at the moment, this still succeeds!
+            model_add("users/user/test/b", "formalisms/SimpleClassDiagrams", """
+                Crass A {
+                    name = "b"
+                }
+                """)
+            self.fail()
+        except:
+            raise
+            pass
+
     def test_op_model_move(self):
         # Test basic scenario
         model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
@@ -814,6 +835,165 @@ class TestModelverse(unittest.TestCase):
         assert read_info("users/user/test/a", "finish") == ("Finish", None)
         assert read_info("users/user/test/a", "nxt") == ("Next", ("start", "finish"))
 
+        # Read using different metamodel
+        alter_context("users/user/test/a", "formalisms/Bottom")
+        assert read_info("users/user/test/a", "start") == ("Node", None)
+        assert read_info("users/user/test/a", "finish") == ("Node", None)
+        assert read_info("users/user/test/a", "nxt") == ("Edge", ("start", "finish"))
+
+        # Non-existing element
+        try:
+            read_info("users/user/test/a", "notthere")
+            self.fail()
+        except UnknownElement:
+            pass
+
+        # Non-existing model
+        try:
+            read_info("users/user/test/b", "start")
+            self.fail()
+        except UnknownModel:
+            pass
+
+        # Unreadable model
+        try:
+            read_info("administration/core", "administration")
+            self.fail()
+        except ReadPermissionDenied:
+            pass
+
+    def test_op_read_attrs(self):
+        model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
+            SimpleAttribute Natural {
+                name = "natural"
+            }
+            SimpleAttribute String {
+                name = "string"
+            }
+
+            Class Place {
+                name = "Place"
+                name : String
+                capacity : Natural
+            }
+            Class Transition {
+                name = "Transition"
+                name : String
+            }
+            Association P2T (Place, Transition) {
+                name = "P2T"
+                weight : Natural
+            }
+            Association T2P (Transition, Place) {
+                name = "T2P"
+                weight : Natural
+            }
+            """)
+        assert read_attrs("users/user/test/a", "Natural") == {"constraint": {"AL": ""}, "name": "natural"}
+        assert read_attrs("users/user/test/a", "String") == {"constraint": {"AL": ""}, "name": "string"}
+        assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": "Place", "abstract": None, "lower_cardinality": None, "upper_cardinality": None}
+        assert read_attrs("users/user/test/a", "Transition") == {"constraint": {"AL": ""}, "name": "Transition", "abstract": None, "lower_cardinality": None, "upper_cardinality": None}
+        assert read_attrs("users/user/test/a", "P2T") == {"constraint": {"AL": ""}, "name": "P2T", "source_lower_cardinality": None, "source_upper_cardinality": None, "target_lower_cardinality": None, "target_upper_cardinality": None}
+        assert read_attrs("users/user/test/a", "T2P") == {"constraint": {"AL": ""}, "name": "T2P", "source_lower_cardinality": None, "source_upper_cardinality": None, "target_lower_cardinality": None, "target_upper_cardinality": None}
+
+        model_add("users/user/test/b", "users/user/test/a", """
+            Place p1 {
+                name = "place 1"
+                capacity = 2
+            }
+            Place p2 {
+                name = "place 2"
+                capacity = 1
+            }
+            Transition t1 {
+                name = "transition"
+            }
+            
+            P2T p2t (p1, t1) {
+                weight = 4
+            }
+            T2P t2p (t1, p2) {
+                weight = 10
+            }
+            """)
+        assert read_attrs("users/user/test/b", "p1") == {"name": "place 1", "capacity": 2}
+        assert read_attrs("users/user/test/b", "p2") == {"name": "place 2", "capacity": 1}
+        assert read_attrs("users/user/test/b", "t1") == {"name": "transition"}
+        assert read_attrs("users/user/test/b", "p2t") == {"weight": 4}
+        assert read_attrs("users/user/test/b", "t2p") == {"weight": 10}
+
+    def test_op_attr_assign(self):
+        model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
+            SimpleAttribute Natural {
+                name = "natural"
+            }
+            SimpleAttribute String {
+                name = "string"
+            }
+
+            Class Place {
+                name = "Place"
+                name : String
+                capacity : Natural
+            }
+            Class Transition {
+                name = "Transition"
+                name : String
+            }
+            Association P2T (Place, Transition) {
+                name = "P2T"
+                weight : Natural
+            }
+            Association T2P (Transition, Place) {
+                name = "T2P"
+                weight : Natural
+            }
+            """)
+        assert read_attrs("users/user/test/a", "Natural") == {"constraint": {"AL": ""}, "name": "natural"}
+        assert attr_assign("users/user/test/a", "Natural", "name", "nat") == None
+        assert read_attrs("users/user/test/a", "Natural") == {"constraint": {"AL": ""}, "name": "nat"}
+
+        assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": "Place", "abstract": None, "lower_cardinality": None, "upper_cardinality": None}
+        assert attr_assign("users/user/test/a", "Place", "name", "NewPlace") == None
+        assert attr_assign("users/user/test/a", "Place", "abstract", False) == None
+        assert attr_assign("users/user/test/a", "Place", "lower_cardinality", 4) == None
+        assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": "NewPlace", "abstract": False, "lower_cardinality": 4, "upper_cardinality": None}
+
+        assert read_attrs("users/user/test/a", "P2T") == {"constraint": {"AL": ""}, "name": "P2T", "source_lower_cardinality": None, "source_upper_cardinality": None, "target_lower_cardinality": None, "target_upper_cardinality": None}
+        assert attr_assign("users/user/test/a", "P2T", "name", "PPP") == None
+        assert attr_assign("users/user/test/a", "P2T", "source_lower_cardinality", 1) == None
+        assert attr_assign("users/user/test/a", "P2T", "target_upper_cardinality", 10) == None
+        assert read_attrs("users/user/test/a", "P2T") == {"constraint": {"AL": ""}, "name": "PPP", "source_lower_cardinality": 1, "source_upper_cardinality": None, "target_lower_cardinality": None, "target_upper_cardinality": 10}
+
+        model_add("users/user/test/b", "users/user/test/a", """
+            Place p1 {
+                name = "place 1"
+                capacity = 2
+            }
+            Place p2 {
+                name = "place 2"
+                capacity = 1
+            }
+            Transition t1 {
+                name = "transition"
+            }
+            
+            P2T p2t (p1, t1) {
+                weight = 4
+            }
+            T2P t2p (t1, p2) {
+                weight = 10
+            }
+            """)
+        assert read_attrs("users/user/test/b", "p1") == {"name": "place 1", "capacity": 2}
+        assert attr_assign("users/user/test/b", "p1", "name", "place 3") == None
+        assert attr_assign("users/user/test/b", "p1", "capacity", 3) == None
+        assert read_attrs("users/user/test/b", "p1") == {"name": "place 3", "capacity": 3}
+
+        assert read_attrs("users/user/test/b", "p2t") == {"weight": 4}
+        assert attr_assign("users/user/test/b", "p2t", "weight", 0) == None
+        assert read_attrs("users/user/test/b", "p2t") == {"weight": 0}
+
     """
     def test_op_model_render(self):
     def test_op_transformation_between(self):
@@ -836,10 +1016,8 @@ class TestModelverse(unittest.TestCase):
     def test_op_group_list(self):
     def test_op_conformance_delete(self):
     def test_op_conformance_add(self):
-    def test_op_read_attrs(self):
     def test_op_instantiate(self):
     def test_op_delete_element(self):
-    def test_op_attr_assign(self):
     def test_op_attr_assign_code(self):
     def test_op_attr_delete(self):
     def test_op_AL_text(self):