|
@@ -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):
|