model_building_utils.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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_classes(client, x_coords, y_coords, curr_num_elements, element_type) {
  15. for (let x of x_coords) {
  16. for (let y of y_coords) {
  17. let class_div = "";
  18. if (element_type != undefined){
  19. class_div = this.build_div(element_type, curr_num_elements);
  20. } else {
  21. class_div = this.get_class_div(curr_num_elements);
  22. }
  23. client
  24. .moveToElement(canvas, x, y)
  25. .mouseButtonClick('right')
  26. .pause(500)
  27. .waitForElementPresent(class_div, 500, "Created class: " + class_div);
  28. curr_num_elements++;
  29. }
  30. }
  31. return curr_num_elements;
  32. }
  33. function set_attribs(client, num, attrs, element_type) {
  34. let element_div = "";
  35. if (element_type != undefined){
  36. element_div = this.build_div(element_type, num);
  37. } else {
  38. element_div = this.get_class_div(num);
  39. }
  40. //"#\\2f Formalisms\\2f __LanguageSyntax__\\2f ConcreteSyntax\\2f ConcreteSyntax\\2e defaultIcons\\2f TextIcon\\2f 1\\2e instance"
  41. client
  42. .waitForElementPresent(element_div, 1000, "Find element for attrib set: " + element_div)
  43. .moveToElement(element_div, 10, 10)
  44. .mouseButtonClick('middle')
  45. .waitForElementPresent("#dialog_btn", 1000, "Editing menu opens");
  46. for (const [key, value] of Object.entries(attrs)) {
  47. client
  48. .clearValue(key)
  49. .setValue(key, value);
  50. }
  51. client
  52. .click("#dialog_btn")
  53. .waitForElementNotPresent("#dialog_btn", 1000, "Editing menu closes")
  54. .moveToElement(canvas, 0, 100)
  55. .mouseButtonClick('left')
  56. .pause(500)
  57. ;
  58. }
  59. function move_to_element_ratio(client, element, x_ratio, y_ratio){
  60. client.getElementSize(element, function (result) {
  61. let x_pos = Math.trunc(x_ratio/100 * result.value.width);
  62. let y_pos = Math.trunc(y_ratio/100 * result.value.height);
  63. client.moveToElement(element, x_pos, y_pos);
  64. });
  65. }
  66. function click_off(client){
  67. client
  68. .moveToElement(canvas, 0, 100)
  69. .mouseButtonClick('left');
  70. }
  71. function save_model(client, folder_name, model_name){
  72. let save_button = "#\\2f Toolbars\\2f MainMenu\\2f MainMenu\\2e buttons\\2e model\\2f saveModel";
  73. let new_file_text = "#new_file";
  74. client.waitForElementPresent(save_button, 1000, "Looking for save button")
  75. .click(save_button)
  76. .waitForElementPresent("#dialog_btn", 1000, "Save menu opens");
  77. let root_button = "#navbar_\\2f";
  78. client.waitForElementPresent(root_button, 1000, "Find root button")
  79. .click(root_button);
  80. let folder_name_div = "#" + folder_name;
  81. client.element('css selector', folder_name_div, function (result) {
  82. if (result.status == -1) {
  83. let new_folder_btn = "#new_folder";
  84. client.click(new_folder_btn)
  85. .setAlertText(folder_name)
  86. .acceptAlert();
  87. }
  88. client.click(folder_name_div);
  89. client.element('css selector', "#" + model_name, function (result) {
  90. if (result.status == -1) {
  91. client.click(new_file_text)
  92. .clearValue(new_file_text)
  93. .setValue(new_file_text, model_name)
  94. .pause(200)
  95. .click("#dialog_btn");
  96. } else {
  97. client.click("#" + model_name)
  98. .pause(200)
  99. .click("#dialog_btn");
  100. }
  101. client.waitForElementNotPresent("#dialog_btn", 1000, "Save menu closes");
  102. }
  103. );
  104. }
  105. );
  106. }
  107. function compile_model(client, compile_type, folder_name, model_name){
  108. let button = "";
  109. let button_name = compile_type;
  110. if (button_name == "AS"){
  111. button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToASMM";
  112. }else if (button_name == "CS"){
  113. button = "#\\2f Toolbars\\2f CompileMenu\\2f CompileMenu\\2e buttons\\2e model\\2f compileToCSMM";
  114. }
  115. client.waitForElementPresent(button, 1000, "Looking for " + button_name + " button")
  116. .click(button)
  117. .waitForElementPresent("#dialog_btn", 2000, button_name + " menu opens");
  118. let root_button = "#navbar_\\2f";
  119. client.waitForElementPresent(root_button, 1000, "Find root button")
  120. .click(root_button);
  121. let folder_div = "#" + folder_name;
  122. client.element('css selector', folder_div, function (result) {
  123. if (result.status != -1) {
  124. client.click(folder_div);
  125. }
  126. });
  127. let new_file_text = "#new_file";
  128. client.element('css selector', "#" + model_name, function (result) {
  129. if (result.status == -1) {
  130. client.click(new_file_text)
  131. .clearValue(new_file_text)
  132. .setValue(new_file_text, model_name)
  133. .click("#dialog_btn");
  134. } else {
  135. client.click("#" + model_name)
  136. .click("#dialog_btn");
  137. }
  138. client.waitForElementNotPresent("#dialog_btn", 2000, button_name + " menu closes");
  139. }
  140. );
  141. }
  142. function delete_element(client, element){
  143. client.moveToElement(element, 10, 10);
  144. client.mouseButtonClick('left');
  145. client.keys(client.Keys.DELETE);
  146. this.click_off(client);
  147. }
  148. module.exports = {
  149. '@disabled': true,
  150. get_element_div,
  151. get_assoc_div,
  152. get_class_div,
  153. build_div,
  154. create_classes,
  155. delete_element,
  156. set_attribs,
  157. move_to_element_ratio,
  158. click_off,
  159. save_model,
  160. compile_model
  161. };