Przeglądaj źródła

Found interesting corner case that crashes Modelverse: modifying folder instead of model

Yentl Van Tendeloo 7 lat temu
rodzic
commit
9af0cabf61
1 zmienionych plików z 26 dodań i 6 usunięć
  1. 26 6
      unit/test_all.py

+ 26 - 6
unit/test_all.py

@@ -494,18 +494,38 @@ class TestModelverse(unittest.TestCase):
         assert {'__id': "A", "__type": "Class", "abstract": None, "constraint": {"AL": ""}, "lower_cardinality": None, "upper_cardinality": None, "name": "A"} in lst
         assert {'__id': "B", "__type": "Class", "abstract": True, "constraint": {"AL": ""}, "lower_cardinality": None, "upper_cardinality": None, "name": "B"} in lst
 
-        before = element_list_nice("formalisms/SimpleClassDiagrams")
+        # Test non-writable model
+        before = element_list("formalisms/SimpleClassDiagrams")
         try:
-            # Cannot overwrite non-writable model
             model_overwrite("formalisms/SimpleClassDiagrams", "")
             self.fail()
         except WritePermissionDenied:
             # No changes were made
-            after = element_list_nice("formalisms/SimpleClassDiagrams")
+            assert element_list("formalisms/SimpleClassDiagrams") == before
+
+        # Test non-existing model
+        assert "adfafd" not in model_list("")
+        try:
+            model_overwrite("adfafd", "")
+            self.fail()
+        except UnknownModel:
+            assert "adfafd" not in model_list("")
 
-            assert len(after) == len(before)
-            for entry in after:
-                assert entry in before
+        # Test compilation error
+        before = element_list_nice("users/user/test/a")
+        try:
+            model_overwrite("users/user/test/a", "afajk")
+            self.fail()
+        except CompilationError:
+            assert element_list_nice("users/user/test/a") == before
+
+        # Test overwrite of non-model location
+        before = model_list("users/user/test")
+        try:
+            model_overwrite("users/user/test", "")
+            self.fail()
+        except UnknownMetamodellingHierarchy:
+            assert model_list("users/user/test") == before
 
     def test_op_user_logout(self):
         try: