Browse Source

Compile pattern model, and build transformation.

Bentley James Oakes 7 years ago
parent
commit
392c49d0e9
2 changed files with 174 additions and 8 deletions
  1. 112 0
      tests/06_transformation_test.js
  2. 62 8
      tests/model_building_utils.js

+ 112 - 0
tests/06_transformation_test.js

@@ -0,0 +1,112 @@
+//NOTE: REQUIRES DSL FROM PREVIOUS TEST
+
+let test_utils = require('./test_utils');
+let model_building_utils = require('./model_building_utils');
+let user = "./users/testuser/";
+
+module.exports = {
+
+    beforeEach: function (client, done) {
+        client.url('http://localhost:8124/atompm').pause(300).maximizeWindow(done);
+    },
+
+    'Login': function (client) {
+
+        test_utils.login(client);
+    },
+
+    'Compile Pattern MM' : function (client) {
+
+        let folder_name = "autotest";
+        let model_name = "autotest.metamodel";
+        model_building_utils.compile_model(client, "pattern", folder_name, model_name);
+    },
+
+    'Create Transformation': function (client) {
+
+        let trans_formalism = "/Formalisms/__Transformations__/Transformation/MoTif.defaultIcons.metamodel";
+
+        test_utils.load_toolbar(client, [trans_formalism]);
+
+
+        //BUILD ELEMENTS
+
+        let x_coord = 300;
+        let y_coords = [200, 320, 440, 560, 680];
+
+        let btn_prefix = "#\\2f Formalisms\\2f __Transformations__\\2f Transformation\\2f MoTif\\2e defaultIcons\\2e metamodel\\2f ";
+        let type_prefix = "#\\2f Formalisms\\2f __Transformations__\\2f Transformation\\2f MoTif\\2e defaultIcons\\2f ";
+
+        let to_create = ["StartIcon", "FRuleIcon", "ARuleIcon", "EndSuccessIcon", "EndFailIcon"];
+
+        let ele_map = {};
+        let num_elements = 0;
+        for (let ele of to_create) {
+            client.waitForElementPresent(btn_prefix + ele, 2000, "Button present: " + btn_prefix + ele);
+            client.click(btn_prefix + ele);
+
+            let built_div = model_building_utils.create_class(client,
+                x_coord, y_coords[num_elements], num_elements, type_prefix + ele + "\\2f ");
+
+            ele_map[ele] = built_div;
+
+            if (ele.includes("Rule")) {
+                let rule_name = num_elements + "_" + ele.replace("Icon", "");
+                let name_field = "#tr_name > td:nth-child(2) > textarea:nth-child(1)";
+                let rule_field = "#tr_rule > td:nth-child(2) > textarea:nth-child(1)";
+                let rule_prefix = "/autotest/R_";
+
+
+                let attribs = {};
+                attribs[name_field] = rule_name;
+                attribs[rule_field] = rule_prefix + rule_name + ".model";
+                model_building_utils.set_attribs(client, num_elements, attribs, type_prefix + ele + "\\2f ");
+            }
+            num_elements++;
+        }
+
+        let assocs = [
+            [0, 1, ""],
+            [1, 2, "success"],
+            [2, 3, "success"],
+            [1, 4, "fail"],
+            [2, 4, "fail"]
+        ];
+
+
+        for (let assoc of assocs) {
+
+            let start_ele = to_create[assoc[0]];
+            let end_ele = to_create[assoc[1]];
+
+            let start = ele_map[start_ele];
+            let end = ele_map[end_ele];
+
+            //TODO: Have path come from check/x mark
+
+            let relation_div = "";
+            if (assoc[2] == "success") {
+                relation_div = "#choice_\\2f Formalisms\\2f __Transformations__\\2f Transformation\\2f MoTif\\2e defaultIcons\\2f success";
+                //start += " > path:nth-child(3)";
+            } else if (assoc[2] == "fail") {
+                relation_div = "#choice_\\2f Formalisms\\2f __Transformations__\\2f Transformation\\2f MoTif\\2e defaultIcons\\2f fail";
+                //start += " > path:nth-child(5)";
+            }
+
+            let offset = 5 * (assoc[0] + assoc[1]);
+            model_building_utils.create_assoc(client, start, end, relation_div, offset);
+        }
+
+
+        model_building_utils.save_model(client, "autotest", "T_autotest.model");
+
+    },
+
+
+    after: function (client) {
+        client.end();
+    },
+
+
+};
+

+ 62 - 8
tests/model_building_utils.js

@@ -49,6 +49,27 @@ function create_classes(client, x_coords, y_coords, curr_num_elements, element_t
     return curr_num_elements;
 }
 
+function create_assoc(client, start_div, end_div, relation_div, offset) {
+
+    this.move_to_element_ratio(client, start_div, 50 + offset, 50 + offset);
+    client.mouseButtonDown('right');
+    this.move_to_element_ratio(client, end_div, 50 + offset, 50 + offset);
+    client.mouseButtonUp('right').pause(300);
+
+    if (relation_div.length > 0) {
+        client.waitForElementPresent(relation_div, 1000, "Relation option present: " + relation_div);
+        client.click(relation_div);
+        client.waitForElementPresent("#dialog_btn", 1000, "Assoc menu opens")
+            .click("#dialog_btn")
+            .pause(300)
+            .waitForElementNotPresent("#dialog_btn", 1000, "Assoc menu closes");
+    }
+
+    this.click_off(client);
+    client.pause(300);
+
+}
+
 function set_attribs(client, num, attrs, element_type) {
 
     let element_div = "";
@@ -58,10 +79,11 @@ function set_attribs(client, num, attrs, element_type) {
         element_div = this.get_class_div(num);
     }
 
-    client
-        .waitForElementPresent(element_div, 1000, "Find element for attrib set: " + element_div)
-        .moveToElement(element_div, 10, 10)
-        .mouseButtonClick('middle')
+    this.click_off(client);
+
+    client.waitForElementPresent(element_div, 1000, "Find element for attrib set: " + element_div);
+    this.move_to_element_ratio(client, element_div, 50, 50);
+    client.mouseButtonClick('middle')
         .waitForElementPresent("#dialog_btn", 1000, "Editing menu opens");
 
     for (const [key, value] of Object.entries(attrs)) {
@@ -105,6 +127,29 @@ function click_off(client) {
         .mouseButtonClick('left');
 }
 
+function load_model(client, folder_name, model_name) {
+
+    let load_button = "#\\2f Toolbars\\2f MainMenu\\2f MainMenu\\2e buttons\\2e model\\2f loadModel";
+
+    client.waitForElementPresent(load_button, 1000, "Looking for load button")
+        .click(load_button)
+        .waitForElementPresent("#dialog_btn", 1000, "Load menu opens");
+
+    let root_button = "#navbar_\\2f";
+    client.waitForElementPresent(root_button, 1000, "Find root button")
+        .click(root_button);
+
+    let folder_name_div = "#" + folder_name;
+    client.click(folder_name_div);
+
+    client.click("#" + model_name)
+        .pause(200)
+        .click("#dialog_btn");
+
+    client.waitForElementNotPresent("#dialog_btn", 1000, "Save menu closes");
+
+}
+
 function save_model(client, folder_name, model_name) {
     let save_button = "#\\2f Toolbars\\2f MainMenu\\2f MainMenu\\2e buttons\\2e model\\2f saveModel";
     let new_file_text = "#new_file";
@@ -149,7 +194,6 @@ function save_model(client, folder_name, model_name) {
 
 function compile_model(client, compile_type, folder_name, model_name) {
 
-
     let button = "";
     let button_name = compile_type;
 
@@ -157,9 +201,10 @@ function compile_model(client, compile_type, folder_name, model_name) {
         button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToASMM";
     } else if (button_name == "CS") {
         button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToCSMM";
+    } else if (button_name == "pattern") {
+        button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToPatternMM";
     }
 
-
     client.waitForElementPresent(button, 1000, "Looking for " + button_name + " button")
         .click(button)
         .waitForElementPresent("#dialog_btn", 2000, button_name + " menu opens");
@@ -176,14 +221,21 @@ function compile_model(client, compile_type, folder_name, model_name) {
     });
 
     let new_file_text = "#new_file";
-    client.element('css selector', "#" + model_name, function (result) {
+    let model_div = "#" + model_name.replace(".", "\\.");
+    client.element('css selector', model_div, function (result) {
+
             if (result.status == -1) {
+                //don't create new file with pattern compilation
+                if (button_name == "pattern") {
+                    client.assert.ok(false, "File found: " + model_name);
+                }
+
                 client.click(new_file_text)
                     .clearValue(new_file_text)
                     .setValue(new_file_text, model_name)
                     .click("#dialog_btn");
             } else {
-                client.click("#" + model_name)
+                client.click(model_div)
                     .click("#dialog_btn");
             }
 
@@ -221,11 +273,13 @@ module.exports = {
     build_div,
     create_class,
     create_classes,
+    create_assoc,
     delete_element,
     set_attribs,
     move_to_element_ratio,
     click_off,
     save_model,
+    load_model,
     compile_model,
     scroll_geometry_element
 };