model_building_utils.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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(500)
  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. //"#\\2f Formalisms\\2f __LanguageSyntax__\\2f ConcreteSyntax\\2f ConcreteSyntax\\2e defaultIcons\\2f TextIcon\\2f 1\\2e instance"
  45. client
  46. .waitForElementPresent(element_div, 1000, "Find element for attrib set: " + element_div)
  47. .moveToElement(element_div, 10, 10)
  48. .mouseButtonClick('middle')
  49. .waitForElementPresent("#dialog_btn", 1000, "Editing menu opens");
  50. for (const [key, value] of Object.entries(attrs)) {
  51. client
  52. .clearValue(key)
  53. .setValue(key, value);
  54. }
  55. client
  56. .click("#dialog_btn")
  57. .waitForElementNotPresent("#dialog_btn", 1000, "Editing menu closes")
  58. .moveToElement(canvas, 0, 100)
  59. .mouseButtonClick('left')
  60. .pause(500)
  61. ;
  62. }
  63. function move_to_element_ratio(client, element, x_ratio, y_ratio){
  64. client.getElementSize(element, function (result) {
  65. let x_pos = Math.trunc(x_ratio/100 * result.value.width);
  66. let y_pos = Math.trunc(y_ratio/100 * result.value.height);
  67. //console.log("X: " + x_pos + " Y: " + y_pos);
  68. client.moveToElement(element, x_pos, y_pos);
  69. });
  70. }
  71. function click_off(client){
  72. client
  73. .moveToElement(canvas, 0, 100)
  74. .mouseButtonClick('left');
  75. }
  76. function save_model(client, folder_name, model_name){
  77. let save_button = "#\\2f Toolbars\\2f MainMenu\\2f MainMenu\\2e buttons\\2e model\\2f saveModel";
  78. let new_file_text = "#new_file";
  79. client.waitForElementPresent(save_button, 1000, "Looking for save button")
  80. .click(save_button)
  81. .waitForElementPresent("#dialog_btn", 1000, "Save menu opens");
  82. let root_button = "#navbar_\\2f";
  83. client.waitForElementPresent(root_button, 1000, "Find root button")
  84. .click(root_button);
  85. let folder_name_div = "#" + folder_name;
  86. client.element('css selector', folder_name_div, function (result) {
  87. if (result.status == -1) {
  88. let new_folder_btn = "#new_folder";
  89. client.click(new_folder_btn)
  90. .setAlertText(folder_name)
  91. .acceptAlert();
  92. }
  93. client.click(folder_name_div);
  94. client.element('css selector', "#" + model_name, function (result) {
  95. if (result.status == -1) {
  96. client.click(new_file_text)
  97. .clearValue(new_file_text)
  98. .setValue(new_file_text, model_name)
  99. .pause(200)
  100. .click("#dialog_btn");
  101. } else {
  102. client.click("#" + model_name)
  103. .pause(200)
  104. .click("#dialog_btn");
  105. }
  106. client.waitForElementNotPresent("#dialog_btn", 1000, "Save menu closes");
  107. }
  108. );
  109. }
  110. );
  111. }
  112. function compile_model(client, compile_type, folder_name, model_name){
  113. let button = "";
  114. let button_name = compile_type;
  115. if (button_name == "AS"){
  116. button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToASMM";
  117. }else if (button_name == "CS"){
  118. button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToCSMM";
  119. }
  120. client.waitForElementPresent(button, 1000, "Looking for " + button_name + " button")
  121. .click(button)
  122. .waitForElementPresent("#dialog_btn", 2000, button_name + " menu opens");
  123. let root_button = "#navbar_\\2f";
  124. client.waitForElementPresent(root_button, 1000, "Find root button")
  125. .click(root_button);
  126. let folder_div = "#" + folder_name;
  127. client.element('css selector', folder_div, function (result) {
  128. if (result.status != -1) {
  129. client.click(folder_div);
  130. }
  131. });
  132. let new_file_text = "#new_file";
  133. client.element('css selector', "#" + model_name, function (result) {
  134. if (result.status == -1) {
  135. client.click(new_file_text)
  136. .clearValue(new_file_text)
  137. .setValue(new_file_text, model_name)
  138. .click("#dialog_btn");
  139. } else {
  140. client.click("#" + model_name)
  141. .click("#dialog_btn");
  142. }
  143. client.waitForElementNotPresent("#dialog_btn", 2000, button_name + " menu closes");
  144. }
  145. );
  146. }
  147. function delete_element(client, element){
  148. client.moveToElement(element, 10, 10);
  149. client.mouseButtonClick('left');
  150. client.keys(client.Keys.DELETE);
  151. this.click_off(client);
  152. }
  153. function scroll_geometry_element(client, element, scrollAmount, scrollTimes){
  154. client.waitForElementPresent(element, 2000, element + " present");
  155. this.move_to_element_ratio(client, element, 50, 50);
  156. client.execute(function(btn_div, scrollAmount, scrollTimes){
  157. let element = $(btn_div);
  158. for (let i=0; i < scrollTimes; i++){
  159. element.get(0).onwheel(scrollAmount);
  160. }
  161. }, [element, scrollAmount, scrollTimes], null);
  162. client.pause(1000);
  163. }
  164. module.exports = {
  165. '@disabled': true,
  166. get_element_div,
  167. get_assoc_div,
  168. get_class_div,
  169. build_div,
  170. create_class,
  171. create_classes,
  172. delete_element,
  173. set_attribs,
  174. move_to_element_ratio,
  175. click_off,
  176. save_model,
  177. compile_model,
  178. scroll_geometry_element
  179. };