Browse Source

Add initial building of CS model.

Bentley James Oakes 7 years ago
parent
commit
c877c52f45
2 changed files with 107 additions and 8 deletions
  1. 77 3
      tests/05_creating_dsl.js
  2. 30 5
      tests/model_building_utils.js

+ 77 - 3
tests/05_creating_dsl.js

@@ -289,9 +289,9 @@ module.exports = {
                     .pause(500);
             }
             client.getElementSize(assoc_div, function (result) {
-                client
-                    .moveToElement(assoc_div, result.value.width / 2, result.value.height / 2)
-                    .mouseButtonClick('middle')
+
+                model_building_utils.move_to_element_ratio(client, assoc_div, 50, 50)
+                client.mouseButtonClick('middle')
                     .waitForElementPresent("#dialog_btn", 1000, "Editing assoc name opens")
                     .clearValue(name_field)
                     .setValue(name_field, name);
@@ -422,8 +422,82 @@ module.exports = {
 
     'Create CS model': function (client) {
 
+        let filename = '/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax.defaultIcons.metamodel';
+        test_utils.load_toolbar(client, [filename]);
+
+        let classIcon = "#\\/Formalisms\\/__LanguageSyntax__\\/ConcreteSyntax\\/ConcreteSyntax\\.defaultIcons\\.metamodel\\/IconIcon";
+        client.waitForElementPresent(classIcon, 2000, "Check for class icon...");
+        client.click(classIcon);
+
+        let canvas = "#div_canvas";
+        client.waitForElementPresent(canvas, 1000, "Checking for canvas...");
+
+        let test_folder = "autotest";
+        let name_field = "#tr_typename > td:nth-child(2) > textarea";
+        let num_elements = 0;
+
+        //BUILD CLASSES
+        let icon_type = "#\\/Formalisms\\/__LanguageSyntax__\\/ConcreteSyntax\\/ConcreteSyntax\\.defaultIcons\\/IconIcon\\/";
+
+        let start_x = 50;
+        let x_diff = 350;
+        let x_coords = [start_x];//, start_x + x_diff];//, start_x + 2 * x_diff];
+
+        let start_y = 200;
+        let y_diff = 200;
+        let y_coords = [start_y];//, start_y + y_diff];//, start_y + 2 * y_diff];
+
+        let num_classes = x_coords.length * y_coords.length;
+
+        num_elements = model_building_utils.create_classes(client, x_coords, y_coords, num_elements, icon_type);
 
+        // SET NAMES FOR CLASSES
+        for (let i = 0; i < num_classes; i++) {
+            let class_name = "Class" + String.fromCharCode(65 + i) + "Icon";
+            let attrs = {};
+            attrs[name_field] = class_name;
+            model_building_utils.set_attribs(client, i, attrs, icon_type);
+        }
+
+        // BUILD TEXT FOR ICONS
+        let textIcon = "#\\/Formalisms\\/__LanguageSyntax__\\/ConcreteSyntax\\/ConcreteSyntax\\.defaultIcons\\.metamodel\\/TextIcon";
+        let textType = "#\\/Formalisms\\/__LanguageSyntax__\\/ConcreteSyntax\\/ConcreteSyntax\\.defaultIcons\\/TextIcon\\/";
+        let textContent_field = "#tr_textContent > td:nth-child(2) > textarea";
 
+        client.waitForElementPresent(textIcon, 2000, "Check for text icon...");
+        client.click(textIcon);
+
+        for (let i = 0; i < num_classes; i++) {
+
+            let text = "Class" + String.fromCharCode(65 + i);
+
+            let textDiv = model_building_utils.build_div(textType, num_elements);
+            let iconDiv = model_building_utils.build_div(icon_type, i);
+
+            let attrs = {};
+            attrs[textContent_field] = text;
+
+            client
+                .pause(300)
+                .moveToElement(canvas, 20, 200)
+                .mouseButtonClick('right')
+                .pause(500)
+                .waitForElementPresent(textDiv, 500, "Created text: " + textDiv);
+
+            model_building_utils.set_attribs(client, num_elements, attrs, textType);
+
+            client.moveToElement(textDiv, 10, 10)
+                .mouseButtonClick('left')
+                .pause(300)
+                .mouseButtonDown('left');
+
+            model_building_utils.move_to_element_ratio(client, iconDiv, 50, 10);
+            client.mouseButtonUp('left');
+
+            num_elements++;
+
+            client.pause(2000);
+        }
     },
 
     after: function (client) {

+ 30 - 5
tests/model_building_utils.js

@@ -1,5 +1,9 @@
 let canvas = "#div_canvas";
 
+function build_div(element_type, num){
+    return element_type + (num) + "\\2e instance";
+}
+
 function get_element_div(type, num) {
     return "#\\2f Formalisms\\2f __LanguageSyntax__\\2f SimpleClassDiagram\\2f SimpleClassDiagram\\2e umlIcons\\2f " + (type) + "\\2f " + (num) + "\\2e instance";
 }
@@ -13,11 +17,16 @@ function get_assoc_div(num) {
     return get_element_div("AssociationLink", num) + " > text:nth-child(1)";
 }
 
-function create_classes(client, x_coords, y_coords, curr_num_elements) {
+function create_classes(client, x_coords, y_coords, curr_num_elements, element_type) {
     for (let x of x_coords) {
         for (let y of y_coords) {
 
-            let class_div = this.get_class_div(curr_num_elements);
+            let class_div = "";
+            if (element_type != undefined){
+                class_div = element_type + (curr_num_elements) + "\\2e instance";
+            } else {
+                class_div = this.get_class_div(curr_num_elements);
+            }
 
             client
                 .moveToElement(canvas, x, y)
@@ -32,9 +41,14 @@ function create_classes(client, x_coords, y_coords, curr_num_elements) {
     return curr_num_elements;
 }
 
-function set_attribs(client, num, attrs) {
-    let class_div = this.get_class_div(num);
+function set_attribs(client, num, attrs, element_type) {
 
+    let class_div = "";
+    if (element_type != undefined){
+        class_div = element_type + (num) + "\\2e instance";
+    } else {
+        class_div = this.get_class_div(num);
+    }
     client.moveToElement(class_div, 10, 10)
         .mouseButtonClick('middle')
         .waitForElementPresent("#dialog_btn", 1000, "Editing menu opens");
@@ -53,11 +67,22 @@ function set_attribs(client, num, attrs) {
     ;
 }
 
+function move_to_element_ratio(client, element, x_ratio, y_ratio){
+
+    client.getElementSize(element, function (result) {
+        let x_pos = x_ratio/100 * result.value.width;
+        let y_pos = y_ratio/100 * result.value.height;
+        client.moveToElement(element, x_pos, y_pos);
+    });
+}
+
 module.exports = {
     '@disabled': true,
     get_element_div,
     get_assoc_div,
     get_class_div,
+    build_div,
     create_classes,
-    set_attribs
+    set_attribs,
+    move_to_element_ratio
 };