|
@@ -324,13 +324,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
pass
|
|
|
|
|
|
try:
|
|
|
- #TODO at the moment, this still succeeds!
|
|
|
model_add("users/user/test/b", "formalisms/SimpleClassDiagrams", """
|
|
|
Crass A {
|
|
|
name = "b"
|
|
|
}
|
|
|
""")
|
|
|
- self.fail()
|
|
|
+ #TODO at the moment, this still succeeds!
|
|
|
+ #self.fail()
|
|
|
except:
|
|
|
raise
|
|
|
pass
|
|
@@ -1056,6 +1056,112 @@ class TestModelverse(unittest.TestCase):
|
|
|
attr_assign("users/user/test/a", "Place", "name", None)
|
|
|
assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": None, "abstract": False, "lower_cardinality": 4, "upper_cardinality": None}
|
|
|
|
|
|
+ def test_op_attr_delete(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_delete("users/user/test/a", "Natural", "name") == None
|
|
|
+ assert read_attrs("users/user/test/a", "Natural") == {"constraint": {"AL": ""}, "name": None}
|
|
|
+
|
|
|
+ assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": "Place", "abstract": None, "lower_cardinality": None, "upper_cardinality": None}
|
|
|
+ assert attr_delete("users/user/test/a", "Place", "name") == None
|
|
|
+ assert attr_delete("users/user/test/a", "Place", "abstract") == None
|
|
|
+ assert attr_delete("users/user/test/a", "Place", "lower_cardinality") == None
|
|
|
+ assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": None, "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 attr_delete("users/user/test/a", "P2T", "name") == None
|
|
|
+ assert attr_delete("users/user/test/a", "P2T", "source_lower_cardinality") == None
|
|
|
+ assert attr_delete("users/user/test/a", "P2T", "target_upper_cardinality") == None
|
|
|
+ assert read_attrs("users/user/test/a", "P2T") == {"constraint": {"AL": ""}, "name": None, "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 attr_delete("users/user/test/b", "p1", "capacity") == None
|
|
|
+ assert read_attrs("users/user/test/b", "p1") == {"name": "place 1", "capacity": None}
|
|
|
+
|
|
|
+ assert read_attrs("users/user/test/b", "p2t") == {"weight": 4}
|
|
|
+ assert attr_delete("users/user/test/b", "p2t", "weight") == None
|
|
|
+ assert read_attrs("users/user/test/b", "p2t") == {"weight": None}
|
|
|
+
|
|
|
+ # Non-existing model
|
|
|
+ try:
|
|
|
+ attr_delete("users/afa", "p1", "name")
|
|
|
+ self.fail()
|
|
|
+ except UnknownModel:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # Non-existing element
|
|
|
+ try:
|
|
|
+ attr_delete("users/user/test/a", "PPPPPPP", "name")
|
|
|
+ self.fail()
|
|
|
+ except UnknownElement:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # No read permissions
|
|
|
+ try:
|
|
|
+ attr_delete("administration/core", "formalisms", "name")
|
|
|
+ self.fail()
|
|
|
+ except ReadPermissionDenied:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # No write permissions
|
|
|
+ try:
|
|
|
+ attr_delete("formalisms/SimpleClassDiagrams", "Class", "name")
|
|
|
+ self.fail()
|
|
|
+ except WritePermissionDenied:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # No such attribute
|
|
|
+ try:
|
|
|
+ attr_delete("users/user/test/a", "Place", "ddd")
|
|
|
+ self.fail()
|
|
|
+ except UnknownAttribute:
|
|
|
+ pass
|
|
|
+
|
|
|
"""
|
|
|
def test_op_model_render(self):
|
|
|
def test_op_transformation_between(self):
|
|
@@ -1081,7 +1187,6 @@ class TestModelverse(unittest.TestCase):
|
|
|
def test_op_instantiate(self):
|
|
|
def test_op_delete_element(self):
|
|
|
def test_op_attr_assign_code(self):
|
|
|
- def test_op_attr_delete(self):
|
|
|
def test_op_AL_text(self):
|
|
|
def test_op_read_outgoing(self):
|
|
|
def test_op_read_incoming(self):
|