model_building_utils.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. let canvas = "#div_canvas";
  2. function build_div(element_type, num) {
  3. return element_type + (num) + "\\2e instance";
  4. }
  5. function get_element_div(type, num) {
  6. return "#\\2f Formalisms\\2f __LanguageSyntax__\\2f SimpleClassDiagram\\2f SimpleClassDiagram\\2e umlIcons\\2f " + (type) + "\\2f " + (num) + "\\2e instance";
  7. }
  8. function get_class_div(num) {
  9. return get_element_div("ClassIcon", num);
  10. }
  11. function get_assoc_div(num) {
  12. return get_element_div("AssociationLink", num) + " > text:nth-child(1)";
  13. }
  14. function create_class(client, x, y, i, element_type) {
  15. let class_div = "";
  16. if (element_type != undefined) {
  17. class_div = this.build_div(element_type, i);
  18. } else {
  19. class_div = this.get_class_div(i);
  20. }
  21. client
  22. .moveToElement(canvas, x, y)
  23. .mouseButtonClick('right')
  24. .pause(300)
  25. .waitForElementPresent(class_div, 500, "Created class: " + class_div);
  26. return class_div;
  27. }
  28. function create_classes(client, x_coords, y_coords, curr_num_elements, element_type) {
  29. for (let x of x_coords) {
  30. for (let y of y_coords) {
  31. this.create_class(client, x, y, curr_num_elements, element_type);
  32. curr_num_elements++;
  33. }
  34. }
  35. return curr_num_elements;
  36. }
  37. function set_attribs(client, num, attrs, element_type) {
  38. let element_div = "";
  39. if (element_type != undefined) {
  40. element_div = this.build_div(element_type, num);
  41. } else {
  42. element_div = this.get_class_div(num);
  43. }
  44. client
  45. .waitForElementPresent(element_div, 1000, "Find element for attrib set: " + element_div)
  46. .moveToElement(element_div, 10, 10)
  47. .mouseButtonClick('middle')
  48. .waitForElementPresent("#dialog_btn", 1000, "Editing menu opens");
  49. for (const [key, value] of Object.entries(attrs)) {
  50. client.element('css selector', key, function (result) {
  51. //if not found, assume checkbox
  52. if (result.status == -1) {
  53. let attrib_name = key.split(" ")[0];
  54. let checkbox_div = attrib_name + " > td:nth-child(2) > input:nth-child(1)";
  55. client.click(checkbox_div);
  56. } else {
  57. client
  58. .clearValue(key)
  59. .setValue(key, value);
  60. }
  61. });
  62. }
  63. client
  64. .click("#dialog_btn")
  65. .waitForElementNotPresent("#dialog_btn", 1000, "Editing menu closes")
  66. .moveToElement(canvas, 0, 100)
  67. .mouseButtonClick('left')
  68. .pause(300)
  69. ;
  70. }
  71. function move_to_element_ratio(client, element, x_ratio, y_ratio) {
  72. client.getElementSize(element, function (result) {
  73. let x_pos = Math.trunc(x_ratio / 100 * result.value.width);
  74. let y_pos = Math.trunc(y_ratio / 100 * result.value.height);
  75. //console.log("X: " + x_pos + " Y: " + y_pos);
  76. client.moveToElement(element, x_pos, y_pos);
  77. });
  78. }
  79. function click_off(client) {
  80. client
  81. .moveToElement(canvas, 0, 100)
  82. .mouseButtonClick('left');
  83. }
  84. function save_model(client, folder_name, model_name) {
  85. let save_button = "#\\2f Toolbars\\2f MainMenu\\2f MainMenu\\2e buttons\\2e model\\2f saveModel";
  86. let new_file_text = "#new_file";
  87. client.waitForElementPresent(save_button, 1000, "Looking for save button")
  88. .click(save_button)
  89. .waitForElementPresent("#dialog_btn", 1000, "Save menu opens");
  90. let root_button = "#navbar_\\2f";
  91. client.waitForElementPresent(root_button, 1000, "Find root button")
  92. .click(root_button);
  93. let folder_name_div = "#" + folder_name;
  94. client.element('css selector', folder_name_div, function (result) {
  95. if (result.status == -1) {
  96. let new_folder_btn = "#new_folder";
  97. client.click(new_folder_btn)
  98. .setAlertText(folder_name)
  99. .acceptAlert();
  100. }
  101. client.click(folder_name_div);
  102. client.element('css selector', "#" + model_name, function (result) {
  103. if (result.status == -1) {
  104. client.click(new_file_text)
  105. .clearValue(new_file_text)
  106. .setValue(new_file_text, model_name)
  107. .pause(200)
  108. .click("#dialog_btn");
  109. } else {
  110. client.click("#" + model_name)
  111. .pause(200)
  112. .click("#dialog_btn");
  113. }
  114. client.waitForElementNotPresent("#dialog_btn", 1000, "Save menu closes");
  115. }
  116. );
  117. }
  118. );
  119. }
  120. function compile_model(client, compile_type, folder_name, model_name) {
  121. let button = "";
  122. let button_name = compile_type;
  123. if (button_name == "AS") {
  124. button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToASMM";
  125. } else if (button_name == "CS") {
  126. button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToCSMM";
  127. }
  128. client.waitForElementPresent(button, 1000, "Looking for " + button_name + " button")
  129. .click(button)
  130. .waitForElementPresent("#dialog_btn", 2000, button_name + " menu opens");
  131. let root_button = "#navbar_\\2f";
  132. client.waitForElementPresent(root_button, 1000, "Find root button")
  133. .click(root_button);
  134. let folder_div = "#" + folder_name;
  135. client.element('css selector', folder_div, function (result) {
  136. if (result.status != -1) {
  137. client.click(folder_div);
  138. }
  139. });
  140. let new_file_text = "#new_file";
  141. client.element('css selector', "#" + model_name, function (result) {
  142. if (result.status == -1) {
  143. client.click(new_file_text)
  144. .clearValue(new_file_text)
  145. .setValue(new_file_text, model_name)
  146. .click("#dialog_btn");
  147. } else {
  148. client.click("#" + model_name)
  149. .click("#dialog_btn");
  150. }
  151. client.waitForElementNotPresent("#dialog_btn", 2000, button_name + " menu closes");
  152. }
  153. );
  154. }
  155. function delete_element(client, element) {
  156. client.moveToElement(element, 10, 10);
  157. client.mouseButtonClick('left');
  158. client.keys(client.Keys.DELETE);
  159. this.click_off(client);
  160. }
  161. function scroll_geometry_element(client, element, scrollAmount, scrollTimes) {
  162. client.waitForElementPresent(element, 2000, element + " present");
  163. this.move_to_element_ratio(client, element, 50, 50);
  164. client.execute(function (btn_div, scrollAmount, scrollTimes) {
  165. let element = $(btn_div);
  166. for (let i = 0; i < scrollTimes; i++) {
  167. element.get(0).onwheel(scrollAmount);
  168. }
  169. }, [element, scrollAmount, scrollTimes], null);
  170. client.pause(1000);
  171. }
  172. module.exports = {
  173. '@disabled': true,
  174. get_element_div,
  175. get_assoc_div,
  176. get_class_div,
  177. build_div,
  178. create_class,
  179. create_classes,
  180. delete_element,
  181. set_attribs,
  182. move_to_element_ratio,
  183. click_off,
  184. save_model,
  185. compile_model,
  186. scroll_geometry_element
  187. };