Преглед изворни кода

Merge branch 'master' of http://msdl.uantwerpen.be/git/bentley/AToMPM

bentleyjoakes пре 5 година
родитељ
комит
2cda6fb35a

+ 6 - 2
nightwatch.conf.js

@@ -16,7 +16,7 @@ module.exports = {
   "globals_path" : "",
 
   "selenium" : {
-    "start_process" : false,
+    "start_process" : true,
     "server_path" : selenium_server.path,
     "log_path" : "",
     "port" : 4444,
@@ -43,7 +43,11 @@ module.exports = {
       "desiredCapabilities": {
         "browserName": "chrome",
         "javascriptEnabled": true,
-        "marionette": true
+        "marionette": true,
+        "chromeOptions": {
+            "args" : ["--no-sandbox"],
+            "w3c": false
+          },
       }
     },
 

+ 84 - 60
package-lock.json

@@ -1,9 +1,32 @@
 {
   "name": "atompm",
-  "version": "0.8.1",
+  "version": "0.8.2",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
+    "@types/events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+      "dev": true
+    },
+    "@types/glob": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+      "dev": true,
+      "requires": {
+        "@types/events": "3.0.0",
+        "@types/minimatch": "3.0.3",
+        "@types/node": "8.10.50"
+      }
+    },
+    "@types/minimatch": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+      "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+      "dev": true
+    },
     "@types/node": {
       "version": "8.10.50",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.50.tgz",
@@ -173,12 +196,12 @@
       }
     },
     "chromedriver": {
-      "version": "2.46.0",
-      "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.46.0.tgz",
-      "integrity": "sha512-dLtKIJW3y/PuFrPmcw6Mb8Nh+HwSqgVrK1rWgTARXhHfWvV822X2VRkx2meU/tg2+YQL6/nNgT6n5qWwIDHbwg==",
+      "version": "77.0.0",
+      "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-77.0.0.tgz",
+      "integrity": "sha512-mZa1IVx4HD8rDaItWbnS470mmypgiWsDiu98r0NkiT4uLm3qrANl4vOU6no6vtWtLQiW5kt1POcIbjeNpsLbXA==",
       "dev": true,
       "requires": {
-        "del": "3.0.0",
+        "del": "4.1.1",
         "extract-zip": "1.6.7",
         "mkdirp": "0.5.1",
         "request": "2.88.0",
@@ -278,22 +301,23 @@
       "dev": true,
       "requires": {
         "ast-types": "0.13.2",
-        "escodegen": "1.11.1",
+        "escodegen": "1.12.0",
         "esprima": "3.1.3"
       }
     },
     "del": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
-      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+      "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
       "dev": true,
       "requires": {
+        "@types/glob": "7.1.1",
         "globby": "6.1.0",
-        "is-path-cwd": "1.0.0",
-        "is-path-in-cwd": "1.0.1",
-        "p-map": "1.2.0",
-        "pify": "3.0.0",
-        "rimraf": "2.6.3"
+        "is-path-cwd": "2.2.0",
+        "is-path-in-cwd": "2.1.0",
+        "p-map": "2.1.0",
+        "pify": "4.0.1",
+        "rimraf": "2.7.1"
       }
     },
     "delayed-stream": {
@@ -332,9 +356,9 @@
       }
     },
     "ejs": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz",
-      "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz",
+      "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==",
       "dev": true
     },
     "es6-promise": {
@@ -360,14 +384,14 @@
       "optional": true
     },
     "escodegen": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
-      "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
+      "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
       "dev": true,
       "requires": {
         "esprima": "3.1.3",
-        "estraverse": "4.2.0",
-        "esutils": "2.0.2",
+        "estraverse": "4.3.0",
+        "esutils": "2.0.3",
         "optionator": "0.8.2",
         "source-map": "0.6.1"
       }
@@ -379,15 +403,15 @@
       "dev": true
     },
     "estraverse": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
-      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
       "dev": true
     },
     "esutils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
       "dev": true
     },
     "extend": {
@@ -586,7 +610,7 @@
       "dependencies": {
         "pify": {
           "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         }
@@ -747,24 +771,24 @@
       "dev": true
     },
     "is-path-cwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
-      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+      "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
       "dev": true
     },
     "is-path-in-cwd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
-      "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+      "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
       "dev": true,
       "requires": {
-        "is-path-inside": "1.0.1"
+        "is-path-inside": "2.1.0"
       }
     },
     "is-path-inside": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
-      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+      "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
       "dev": true,
       "requires": {
         "path-is-inside": "1.0.2"
@@ -1090,15 +1114,15 @@
       "dev": true
     },
     "nightwatch": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-1.1.13.tgz",
-      "integrity": "sha512-p/EqaCnVqAvGB5uaKgBhPaXCT/gxspVjgDyFRp2NmQiNnmlpTpw2wun+O5eYjF/iYDtXra7FD7uUFFLBAESvNw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-1.2.4.tgz",
+      "integrity": "sha512-RoO2/leXXTWG/iAcdW1+sN3RV+bL2P4F9B/ty/wJQmsJw2PLduqvbi7cmkwdNGhh/yaIwIcBxyGHqdB0G754hg==",
       "dev": true,
       "requires": {
         "assertion-error": "1.1.0",
         "chai-nightwatch": "0.3.0",
         "dotenv": "7.0.0",
-        "ejs": "2.6.2",
+        "ejs": "2.7.1",
         "lodash.clone": "3.0.3",
         "lodash.defaultsdeep": "4.6.1",
         "lodash.merge": "4.6.2",
@@ -1168,9 +1192,9 @@
       "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
     },
     "p-map": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
-      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+      "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
       "dev": true
     },
     "pac-proxy-agent": {
@@ -1244,9 +1268,9 @@
       "dev": true
     },
     "pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
       "dev": true
     },
     "pinkie": {
@@ -1327,9 +1351,9 @@
       "dev": true
     },
     "psl": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
-      "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
+      "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
       "dev": true
     },
     "punycode": {
@@ -1402,13 +1426,13 @@
         "safe-buffer": "5.1.2",
         "tough-cookie": "2.4.3",
         "tunnel-agent": "0.6.0",
-        "uuid": "3.3.2"
+        "uuid": "3.3.3"
       }
     },
     "rimraf": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
       "dev": true,
       "requires": {
         "glob": "7.1.4"
@@ -1609,7 +1633,7 @@
       "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
       "dev": true,
       "requires": {
-        "psl": "1.2.0",
+        "psl": "1.4.0",
         "punycode": "1.4.1"
       },
       "dependencies": {
@@ -1684,9 +1708,9 @@
       "dev": true
     },
     "uuid": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
-      "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
       "dev": true
     },
     "verror": {

+ 3 - 3
package.json

@@ -16,10 +16,10 @@
     "socket.io-client": "^0.9.16"
   },
   "devDependencies": {
-    "chromedriver": "^2.46.0",
+    "chromedriver": "^77.0",
     "glob": "^7.1.4",
-    "nightwatch": "^1.1.13",
-    "selenium-server": "3.141.59"
+    "nightwatch": "^1.2.4",
+    "selenium-server": "^3.141.59"
   },
   "scripts": {
     "test": "./run_tests.sh"

+ 13 - 12
run_tests.sh

@@ -29,17 +29,17 @@ if ! kill -0 "$mtpid"; then
     exit $mt_status
 fi
 
-echo "Starting Selenium server."
-java -jar "./node_modules/selenium-server/lib/runner/selenium-server-standalone-3.141.59.jar" &
-seleniumpid=$!
-sleep 3
+#echo "Starting Selenium server."
+#java -jar "./node_modules/selenium-server/lib/runner/selenium-server-standalone-3.141.59.jar" &
+#seleniumpid=$!
+#sleep 3
 
-#check if model transformer is dead
-if ! kill -0 "$seleniumpid"; then
-    wait seleniumpid
-    se_status=$?
-    exit $se_status
-fi
+#check if selenium server is dead
+#if ! kill -0 "$seleniumpid"; then
+#    wait seleniumpid
+#    se_status=$?
+ #   exit $se_status
+#fi
 
 
 echo "Starting tests..."
@@ -48,8 +48,9 @@ nightwatch
 echo "Stopping server and mt script..."
 kill "$serverpid"
 kill "$mtpid"
-kill "$seleniumpid"
+#kill "$seleniumpid"
+
 
 
+echo "Finished!"
 
-echo "Finished!"

+ 9 - 0
tests/03_model_test.js

@@ -1,4 +1,5 @@
 let test_utils = require('./test_utils');
+let model_building_utils = require('./model_building_utils');
 let user = "./users/testuser/";
 
 module.exports = {
@@ -17,6 +18,14 @@ module.exports = {
         test_utils.load_model(client, [filename]);
     },
 
+    'Load and save model' : function (client) {
+
+        let filename = 'Formalisms/ClassicDEVS/ClassicDEVS.model';
+        let new_filename = 'ClassicDEVS2.model';
+        test_utils.load_model(client, [filename]);
+        model_building_utils.save_model(client, "Models", new_filename)
+    },
+
     'Load two models' : function (client) {
 
         let filenames = [

+ 33 - 0
tests/04_compile_test.js

@@ -0,0 +1,33 @@
+let test_utils = require('./test_utils');
+let model_building_utils = require('./model_building_utils');
+let user = "./users/testuser/";
+
+let folder_name = "Formalisms/__LanguageSyntax__/SimpleClassDiagram";
+
+module.exports = {
+
+    beforeEach : function (client) {
+        client.url('http://localhost:8124/atompm').pause(300);
+    },
+
+    'Login' : function (client) {
+        test_utils.login(client);
+    },
+
+    'Compile AS' : function (client) {
+        let filename = 'Formalisms/__LanguageSyntax__/SimpleClassDiagram/SimpleClassDiagramMM.model';
+        test_utils.load_model(client, [filename]);
+        model_building_utils.compile_model(client, "AS", folder_name, "classDiagram.metamodel");
+    },
+
+    'Compile CS' : function (client) {
+        let filename = 'Formalisms/__LanguageSyntax__/SimpleClassDiagram/SimpleClassDiagram.umlIcons.model';
+        test_utils.load_model(client, [filename]);
+        model_building_utils.compile_model(client, "CS", folder_name, "classDiagram.umlIcons.metamodel");
+    },
+
+    after : function (client) {
+        client.end();
+    },
+
+};

tests/04_toolbar_test.js → tests/05_toolbar_test.js


+ 24 - 24
tests/05_creating_dsl.js

@@ -173,7 +173,7 @@ module.exports = {
             .waitForElementNotPresent("#dialog_btn", 1000, "Editing menu closes")
             .moveToElement(canvas, 0, 100)
             .mouseButtonClick('left')
-            .pause(500)
+            .pause(100)
         ;
 
         let class_div3 = model_building_utils.get_class_div(0);
@@ -186,7 +186,7 @@ module.exports = {
             .waitForElementNotPresent("#dialog_btn", 1000, "Editing menu closes")
             .moveToElement(canvas, 0, 100)
             .mouseButtonClick('left')
-            .pause(500)
+            .pause(100)
         ;
 
 
@@ -204,7 +204,7 @@ module.exports = {
             .waitForElementNotPresent("#dialog_btn", 1000, "Editing menu closes")
             .moveToElement(canvas, 0, 100)
             .mouseButtonClick('left')
-            .pause(500)
+            .pause(100)
         ;
 
         //CREATE INHERITANCE
@@ -224,22 +224,22 @@ module.exports = {
                 .mouseButtonDown('right')
                 .moveToElement(sup, 50 + offset, 50 + offset)
                 .mouseButtonUp('right')
-                .pause(500)
+                .pause(100)
                 .click(inheri_relation)
                 .waitForElementPresent("#dialog_btn", 1000, "Inheri menu opens")
                 .click("#dialog_btn")
-                .pause(500)
+                .pause(100)
                 .waitForElementNotPresent("#dialog_btn", 1000, "Inheri menu closes")
                 .moveToElement(canvas, 0, 100)
                 .mouseButtonClick('left')
-                .pause(500)
+                .pause(100)
             ;
 
             num_elements++;
         }
 
         //SET ASSOCS
-        client.pause(300);
+        client.pause(100);
 
         let assoc_num = 0;
         for (let assoc of assocs) {
@@ -268,15 +268,15 @@ module.exports = {
                 .mouseButtonDown('right')
                 .moveToElement(to_ele, 20 + offset, 20 + offset)
                 .mouseButtonUp('right')
-                .pause(500)
+                .pause(100)
                 .click(assoc_relation)
                 .waitForElementPresent("#dialog_btn", 1000, "Assoc menu opens")
                 .click("#dialog_btn")
-                .pause(500)
+                .pause(100)
                 .waitForElementNotPresent("#dialog_btn", 1000, "Assoc menu closes")
                 .moveToElement(canvas, 0, 100)
                 .mouseButtonClick('left')
-                .pause(500)
+                .pause(100)
                 .waitForElementPresent(assoc_div, 1000, "Assoc name present: " + assoc_div);
 
             if (out_card) {
@@ -290,7 +290,7 @@ module.exports = {
                     .waitForElementNotPresent("#dialog_btn", 1000, "Out card menu closes")
                     .moveToElement(canvas, 0, 100)
                     .mouseButtonClick('left')
-                    .pause(500);
+                    .pause(100);
             }
 
             if (in_card) {
@@ -303,7 +303,7 @@ module.exports = {
                     .waitForElementNotPresent("#dialog_btn", 1000, "Out card menu closes")
                     .moveToElement(canvas, 0, 100)
                     .mouseButtonClick('left')
-                    .pause(500);
+                    .pause(100);
             }
             client.getElementSize(assoc_div, function (result) {
 
@@ -326,7 +326,7 @@ module.exports = {
                     .waitForElementNotPresent("#dialog_btn", 1000, "Editing assoc name closes")
                     .moveToElement(canvas, 0, 100)
                     .mouseButtonClick('left')
-                    .pause(500);
+                    .pause(100);
             });
         }
 
@@ -340,7 +340,7 @@ module.exports = {
         client
             .moveToElement(canvas, start_x + 3 * x_diff, start_y)
             .mouseButtonClick('right')
-            .pause(500)
+            .pause(100)
             .waitForElementPresent(constraint_div, 500, "Created class: " + constraint_div);
 
         let pre_create_opt = "#tr_event > td:nth-child(2) > select > option:nth-child(2)";
@@ -364,7 +364,7 @@ module.exports = {
             .waitForElementNotPresent("#dialog_btn", 1000, "Constraint menu closes")
             .moveToElement(canvas, 0, 100)
             .mouseButtonClick('left')
-            .pause(1000);
+            .pause(100);
 
 
         //SAVE MODEL
@@ -440,10 +440,10 @@ module.exports = {
             attrs[textContent_field] = text;
 
             client
-                .pause(300)
+                .pause(100)
                 .moveToElement(canvas, 20, 200)
                 .mouseButtonClick('right')
-                .pause(500)
+                .pause(100)
                 .waitForElementPresent(textDiv, 500, "Created text: " + textDiv);
 
             model_building_utils.set_attribs(client, num_elements, attrs, textType);
@@ -452,9 +452,9 @@ module.exports = {
 
             client.moveToElement(textDiv, 10, 10)
                 .mouseButtonClick('left')
-                .pause(300)
+                .pause(100)
                 .mouseButtonDown('left')
-                .pause(300);
+                .pause(100);
 
             model_building_utils.move_to_element_ratio(client, iconDiv, 35, 15);
             client.mouseButtonUp('left');
@@ -487,10 +487,10 @@ module.exports = {
 
 
             client
-                .pause(300)
+                .pause(100)
                 .moveToElement(canvas, 50, 200)
                 .mouseButtonClick('right')
-                .pause(1000)
+                .pause(100)
                 .waitForElementPresent(symbolDiv, 500, "Created symbol: " + symbolDiv);
 
             model_building_utils.click_off(client);
@@ -500,12 +500,12 @@ module.exports = {
             model_building_utils.move_to_element_ratio(client, symbolDiv, 50, 50);
             client
                 .mouseButtonClick('left')
-                .pause(300)
+                .pause(100)
                 .mouseButtonDown('left')
-                .pause(300);
+                .pause(100);
 
             model_building_utils.move_to_element_ratio(client, iconDiv, 50, 55);
-            client.pause(300).mouseButtonUp('left');
+            client.pause(100).mouseButtonUp('left');
 
             model_building_utils.click_off(client);
 

tests/06_transformation_test.js → tests/07_transformation_test.js


tests/07_pacman_transformation_test.js → tests/08_pacman_transformation_test.js


tests/08_missing_files.js → tests/09_missing_files.js


+ 57 - 0
tests/10_undo_test.js

@@ -0,0 +1,57 @@
+let test_utils = require('./test_utils');
+let model_building_utils = require('./model_building_utils');
+let user = "./users/testuser/";
+
+module.exports = {
+
+    beforeEach : function (client) {
+        client.url('http://localhost:8124/atompm').pause(300);
+    },
+
+    'Login' : function (client) {
+        test_utils.login(client);
+    },
+
+    'Check undo of deletion' : function (client) {
+        let filename = '/Formalisms/__LanguageSyntax__/SimpleClassDiagram/SimpleClassDiagram.umlIcons.metamodel';
+        test_utils.load_toolbar(client, [filename]);
+
+
+        let classIcon = "#\\/Formalisms\\/__LanguageSyntax__\\/SimpleClassDiagram\\/SimpleClassDiagram\\.umlIcons\\.metamodel\\/ClassIcon";
+        client.waitForElementPresent(classIcon, 2000, "Check for class icon...");
+        client.click(classIcon);
+
+        let canvas = "#div_canvas";
+        client.waitForElementPresent(canvas, 1000, "Checking for canvas...");
+
+        let num_elements = 0;
+
+        //BUILD CLASS
+        let class_div = model_building_utils.create_class(client, 50, 200, 0);
+
+        //DELETE CLASS
+        model_building_utils.delete_element(client, class_div);
+
+        //CHECK FOR PRESENCE
+        client.waitForElementNotPresent(class_div, 1000, "Class deleted");
+
+        //UNDO
+        let undoBtn = "#\\/Toolbars\\/MainMenu\\/MainMenu\\.buttons\\.model\\/undo";
+        client.waitForElementPresent(undoBtn, 2000, "Check for undo button...");
+        client.click(undoBtn);
+        client.pause(1000);
+        client.click(undoBtn);
+        client.waitForElementPresent(class_div, 1000, "Class restored");
+
+        //SECOND DELETE
+        model_building_utils.delete_element(client, class_div);
+
+        //SECOND CHECK FOR PRESENCE
+        client.waitForElementNotPresent(class_div, 1000, "Class deleted for second time")
+    },
+
+    after : function (client) {
+        client.end();
+    },
+
+};

+ 8 - 1
tests/model_building_utils.js

@@ -201,7 +201,7 @@ function load_model(client, folder_name, model_name) {
 }
 
 function save_model(client, folder_name, model_name) {
-    let save_button = "#\\2f Toolbars\\2f MainMenu\\2f MainMenu\\2e buttons\\2e model\\2f saveModel";
+    let save_button = "#\\2f Toolbars\\2f MainMenu\\2f MainMenu\\2e buttons\\2e model\\2f saveModelAs";
     let new_file_text = "#new_file";
 
     client.waitForElementPresent(save_button, 1000, "Looking for save button")
@@ -216,6 +216,7 @@ function save_model(client, folder_name, model_name) {
             if (result.status == -1) {
                 client.click(new_file_text)
                     .clearValue(new_file_text)
+                    .setValue(new_file_text, '\u0008') // Send a backspace
                     .setValue(new_file_text, model_name);
 
                 client.assert.ok(true, "Saving model with name: '" + model_name + "'");
@@ -269,11 +270,17 @@ function compile_model(client, compile_type, folder_name, model_name) {
                 }
 
                 client.click(new_file_text)
+                    .pause(200)
                     .clearValue(new_file_text)
+                    .pause(200)
+                    .setValue(new_file_text, '\u0008') // Send a backspace
+                    .setValue(new_file_text, '\u0008') // Send a backspace
                     .setValue(new_file_text, model_name)
+                    .pause(200)
                     .click("#dialog_btn");
             } else {
                 client.click(model_div)
+                    .pause(200)
                     .click("#dialog_btn");
             }