PraktikumHolonsTestCanvasController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package tests;
  2. import classes.AbstractCanvasObject;
  3. import classes.Edge;
  4. import classes.HolonObject;
  5. import classes.HolonSwitch;
  6. import classes.IdCounter;
  7. import classes.IdCounter.CounterType;
  8. import ui.controller.CanvasController;
  9. import ui.controller.CategoryController;
  10. import ui.controller.Control;
  11. import ui.controller.MultiPurposeController;
  12. import ui.model.Model;
  13. import org.junit.Test;
  14. import org.junit.Before;
  15. import static org.junit.Assert.assertTrue;
  16. import java.awt.Point;
  17. /**
  18. * Tests for the CanvasController.
  19. *
  20. * @author Gruppe14
  21. */
  22. public class PraktikumHolonsTestCanvasController {
  23. protected PraktikumHolonsAdapter adapter;
  24. protected Model model;
  25. protected MultiPurposeController mp;
  26. protected CategoryController cg;
  27. protected CanvasController controller;
  28. /**
  29. * Setup for the tests.
  30. */
  31. @Before
  32. public void setUp() {
  33. adapter = new PraktikumHolonsAdapter();
  34. model = new Model();
  35. mp = new MultiPurposeController(model);
  36. cg = new CategoryController(model, mp, new Control(model));
  37. controller = new CanvasController(model, mp);
  38. IdCounter.resetObjectCounter(CounterType.Object);
  39. }
  40. /**
  41. * Tests adding objects.
  42. */
  43. @Test
  44. public void testAddingObjects() {
  45. // just adding a few things
  46. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 0);
  47. HolonObject a = new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant"));
  48. a.setPosition(100, 100);
  49. controller.addNewObject(a);
  50. assertTrue("ID of the Object does not Match", mp.searchByID(1).getName().equals("Power Plant"));
  51. assertTrue("Type of the Object does not Match", mp.searchByID(1) instanceof HolonObject);
  52. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 1);
  53. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  54. /* trick drag&drop replace by moving a to 100 100 and then back to a, so
  55. * the rest of new objects won't know which one to replace
  56. */
  57. a.setPosition(0, 0);
  58. assertTrue("ID of the Object does not Match", mp.searchByID(2).getName().equals("Power Plant"));
  59. assertTrue("Type of the Object does not Match", mp.searchByID(2) instanceof HolonObject);
  60. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 2);
  61. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  62. assertTrue("ID of the Object does not Match", mp.searchByID(3).getName().equals("Power Plant"));
  63. assertTrue("Type of the Object does not Match", mp.searchByID(3) instanceof HolonObject);
  64. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 3);
  65. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  66. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 4);
  67. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  68. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 5);
  69. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Building"), "House")));
  70. assertTrue("ID of the Object does not Match", mp.searchByID(6).getName().equals("House"));
  71. assertTrue("Type of the Object does not Match", mp.searchByID(6) instanceof HolonObject);
  72. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 6);
  73. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Building"), "House")));
  74. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 7);
  75. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Building"), "House")));
  76. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 8);
  77. controller.addNewObject(new HolonSwitch((HolonObject)mp.searchCatObj(mp.searchCat("Component"), "Switch")));
  78. assertTrue("ID of the Object does not Match", mp.searchByID(9).getName().equals("Switch"));
  79. assertTrue("Type of the Object does not Match", mp.searchByID(9) instanceof HolonSwitch);
  80. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 9);
  81. controller.addNewObject(new HolonSwitch((HolonObject)mp.searchCatObj(mp.searchCat("Component"), "Switch")));
  82. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 10);
  83. }
  84. /**
  85. * Tests deleting Objects.
  86. */
  87. @Test(expected = NullPointerException.class)
  88. public void testDeletingObject() {
  89. // Adding Objects on Canvas.. without Coordinates
  90. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  91. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  92. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Building"), "House")));
  93. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  94. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  95. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Building"), "House")));
  96. controller.addNewObject(new HolonSwitch((HolonObject)mp.searchCatObj(mp.searchCat("Component"), "Switch")));
  97. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Energy"), "Power Plant")));
  98. controller.addNewObject(new HolonObject((HolonObject)mp.searchCatObj(mp.searchCat("Building"), "House")));
  99. controller.addNewObject(new HolonSwitch((HolonObject)mp.searchCatObj(mp.searchCat("Component"), "Switch")));
  100. controller.deleteObjectOnCanvas(mp.searchByID(4));
  101. assertTrue("Object:4 was not deleted", mp.searchByID(4) == null);
  102. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 9);
  103. controller.deleteObjectOnCanvas(mp.searchByID(5));
  104. assertTrue("Object:4 was not deleted", mp.searchByID(5) == null);
  105. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 8);
  106. controller.deleteObjectOnCanvas(mp.searchByID(6));
  107. assertTrue("Object:4 was not deleted", mp.searchByID(6) == null);
  108. assertTrue("Number of Objects does not Match", model.getObjectsOnCanvas().size() == 7);
  109. // deleting Non-Existant Object -> NullPointerexception
  110. controller.deleteObjectOnCanvas(mp.searchByID(4));
  111. }
  112. /**
  113. * Tests adding and deleting Edges.
  114. */
  115. @Test
  116. public void testAddingAndDeletingEdges() {
  117. HolonObject a = new HolonObject("A");
  118. controller.addNewObject(new HolonObject(a));
  119. int n = 0;
  120. // creates vertices A - Z
  121. for (int i = 2; i < 27; i++) {
  122. // adds Object on canvas
  123. HolonObject temp = new HolonObject(adapter.generate(i));
  124. HolonObject temp2 = new HolonObject(temp);
  125. temp2.setPosition(50+180 * (i-2)%5,50+ 180 * (i-2)/5);
  126. controller.addNewObject(temp2);
  127. // connect current vertice with all other vertices
  128. for (AbstractCanvasObject cps : model.getObjectsOnCanvas()) {
  129. if (!cps.equals(mp.searchByID(i)))
  130. controller.addEdgeOnCanvas(new Edge(mp.searchByID(i), cps));
  131. }
  132. // test how many connections current vertice got
  133. assertTrue("Number of Connections does not Match: " + mp.searchByID(i).getConnectedTo().size()+ " != " + (i - 1), mp.searchByID(i).getConnectedTo().size() == i - 1);
  134. // actually just means if its a
  135. // complete graph -> all vertices connected all other vertices
  136. n = model.getObjectsOnCanvas().size();
  137. assertTrue("Number of Edges does not Match: "+model.getEdgesOnCanvas().size()+ " != "+ (n * (n - 1)) / 2, model.getEdgesOnCanvas().size() == (n * (n - 1)) / 2);
  138. }
  139. // same as above
  140. n = model.getObjectsOnCanvas().size();
  141. assertTrue("Number of Edges does not Match: "+model.getEdgesOnCanvas().size()+ " != "+ (n * (n - 1)) / 2, model.getEdgesOnCanvas().size() == (n * (n - 1)) / 2);
  142. // here starts the deleting
  143. controller.removeEdgesOnCanvas(mp.searchEdge(13, 14));
  144. assertTrue("Number of Connection of Vertice M does not Match",
  145. mp.searchByID(13).getConnections().size() == model.getObjectsOnCanvas().size() - 2);
  146. assertTrue("Edge-M-N was not deleted", mp.searchEdge(13, 14) == null);
  147. controller.deleteObjectOnCanvas(mp.searchByID(13));
  148. assertTrue("Object:13 was not deleted", mp.searchByID(13) == null);
  149. assertTrue("Edge-A-M was not deleted", mp.searchEdge(1, 13) == null);
  150. assertTrue("Edge-B-M was not deleted", mp.searchEdge(2, 13) == null);
  151. assertTrue("Edge-C-M was not deleted", mp.searchEdge(3, 13) == null);
  152. assertTrue("Edge-D-M was not deleted", mp.searchEdge(4, 13) == null);
  153. assertTrue("Edge-E-M was not deleted", mp.searchEdge(5, 13) == null);
  154. assertTrue("Edge-F-M was not deleted", mp.searchEdge(6, 13) == null);
  155. assertTrue("Edge-M-O was not deleted", mp.searchEdge(13, 16) == null);
  156. assertTrue("Edge-M-P was not deleted", mp.searchEdge(13, 17) == null);
  157. assertTrue("Edge-M-Q was not deleted", mp.searchEdge(13, 18) == null);
  158. assertTrue("Edge-M-R was not deleted", mp.searchEdge(13, 19) == null);
  159. assertTrue("Edge-M-S was not deleted", mp.searchEdge(13, 20) == null);
  160. }
  161. /**
  162. * Test copying, cutting and pasting Objects.
  163. */
  164. @Test
  165. public void testCutCopyPasteObjects() {
  166. HolonObject a = new HolonObject("A");
  167. HolonObject b = new HolonObject("B");
  168. HolonObject c = new HolonObject("C");
  169. a = new HolonObject(a);
  170. a.setPosition(1, 1);
  171. b = new HolonObject(b);
  172. b.setPosition(2, 2);
  173. c = new HolonObject(c);
  174. c.setPosition(3, 3);
  175. Edge edge1 = new Edge(a, b);
  176. Edge edge2 = new Edge(b, c);
  177. Edge edge3 = new Edge(c, a);
  178. controller.addNewObject(a);
  179. controller.addEdgeOnCanvas(edge1);
  180. controller.addEdgeOnCanvas(edge2);
  181. controller.addEdgeOnCanvas(edge3);
  182. assertTrue("Clipboard not empty", model.getClipboradObjects().isEmpty());
  183. model.getSelectedCpsObjects().add(a);
  184. model.getSelectedCpsObjects().add(b);
  185. model.getSelectedCpsObjects().add(c);
  186. //controller.copyObjects();
  187. //assertTrue("Clipboard empty", !model.getClipboradObjects().isEmpty());
  188. //assertTrue("Clipboard empty", !model.getClipboradObjects().isEmpty());
  189. controller.pasteObjects(new Point(1, 1));
  190. controller.addNewObject(a);
  191. controller.addNewObject(b);
  192. controller.addNewObject(c);
  193. controller.cutObjects();
  194. }
  195. }