tester.actionClick(planComponent, 30, 30);
tester.actionClick(planComponent, 270, 31);
tester.actionClick(planComponent, 269, 170);
tester.actionClick(planComponent, 30, 171, InputEvent.BUTTON1_MASK, 2);
// Check 3 walls were created at (20, 20), (500, 20), (500, 300) and (20, 300) coordinates
Wall wall1 = orderedWalls.get(0);
assertCoordinatesEqualWallPoints(20, 20, 500, 20, wall1);
Wall wall2 = orderedWalls.get(1);
assertCoordinatesEqualWallPoints(500, 20, 500, 300, wall2);
Wall wall3 = orderedWalls.get(2);
assertCoordinatesEqualWallPoints(500, 300, 20, 300, wall3);
// Check the thickness and the height of first wall
assertEquals("Wrong wall tickness", frame.preferences.getNewWallThickness(), wall1.getThickness());
assertEquals("Wrong wall height", frame.preferences.getNewWallHeight(), wall1.getHeight());
assertEquals("Wrong wall height at end", null, wall1.getHeightAtEnd());
// Check they are joined to each other end point
assertWallsAreJoined(null, wall1, wall2);
assertWallsAreJoined(wall1, wall2, wall3);
assertWallsAreJoined(wall2, wall3, null);
// Check they are selected
assertSelectionContains(frame.home, wall1, wall2, wall3);
// 3. Click at (30, 170), then double click at (50, 50) with Shift key depressed
tester.actionClick(planComponent, 30, 170);
tester.actionKeyPress(KeyEvent.VK_SHIFT);
tester.actionClick(planComponent, 50, 50, InputEvent.BUTTON1_MASK, 2);
tester.actionKeyRelease(KeyEvent.VK_SHIFT);
// Check a forth wall was created at (20, 300), (60, 60) coordinates
Wall wall4 = orderedWalls.get(orderedWalls.size() - 1);
assertCoordinatesEqualWallPoints(20, 300, 60, 60, wall4);
assertSelectionContains(frame.home, wall4);
assertWallsAreJoined(wall3, wall4, null);
// 4. Use SELECTION mode
tester.click(frame.modeButton);
// Check current mode is SELECTION
assertEquals("Current mode isn't " + PlanController.Mode.SELECTION,
PlanController.Mode.SELECTION, frame.planController.getMode());
// Give focus to plan component
tester.actionFocus(planComponent);
// Press the delete key
tester.actionKeyStroke(KeyEvent.VK_DELETE);
// Check plan contains only the first three walls
assertHomeContains(frame.home, wall1, wall2, wall3);
// 5. Use WALL_CREATION mode
tester.click(frame.modeButton);
// Click at (31, 29), then double click at (30, 170)
tester.actionClick(planComponent, 31, 29);
tester.actionClick(planComponent, 30, 170, InputEvent.BUTTON1_MASK, 2);
// Check a new forth wall was created at (20, 20), (20, 300) coordinates
wall4 = orderedWalls.get(orderedWalls.size() - 1);
assertCoordinatesEqualWallPoints(20, 20, 20, 300, wall4);
// Check its end points are joined to the first and third wall
assertWallsAreJoined(wall1, wall4, wall3);
// 6. Use SELECTION mode
tester.click(frame.modeButton);
// Drag and drop cursor from (200, 100) to (300, 180)
tester.actionMousePress(planComponent,
new ComponentLocation(new Point(200, 100)));
tester.actionMouseMove(planComponent,
new ComponentLocation(new Point(300, 180)));
tester.actionMouseRelease();
// Check the selected walls are the second and third ones
assertSelectionContains(frame.home, wall2, wall3);
// 7. Press twice right arrow key
tester.actionKeyStroke(KeyEvent.VK_RIGHT);
tester.actionKeyStroke(KeyEvent.VK_RIGHT);
// Check the 4 walls coordinates are (20, 20), (504, 20), (504, 300), (24, 300)
assertCoordinatesEqualWallPoints(20, 20, 504, 20, wall1);
assertCoordinatesEqualWallPoints(504, 20, 504, 300, wall2);
assertCoordinatesEqualWallPoints(504, 300, 24, 300, wall3);
assertCoordinatesEqualWallPoints(20, 20, 24, 300, wall4);
// 8. Click at (272, 40) with Shift key depressed
tester.actionKeyPress(KeyEvent.VK_SHIFT);
tester.actionClick(planComponent, 272, 40);
tester.actionKeyRelease(KeyEvent.VK_SHIFT);
// Check the second wall was removed from selection
assertSelectionContains(frame.home, wall3);
// 9. Drag cursor from (50, 30) to (50, 50)
tester.actionMousePress(planComponent,
new ComponentLocation(new Point(50, 30)));
tester.actionMouseMove(planComponent,
new ComponentLocation(new Point(50, 50)));
// Check first wall is selected and that it moved
assertSelectionContains(frame.home, wall1);
assertCoordinatesEqualWallPoints(20, 60, 504, 60, wall1);
// Lose focus
tester.actionKeyStroke(KeyEvent.VK_TAB);
// Check the wall didn't move at end
assertCoordinatesEqualWallPoints(20, 20, 504, 20, wall1);
// 10. Click 6 times on undo button
for (int i = 0; i < 6; i++) {
tester.invokeAndWait(new Runnable() {
public void run() {
frame.undoButton.doClick();
}
});
}
// Check home doesn't contain any wall
assertHomeContains(frame.home);
// 11. Click 6 times on redo button
for (int i = 0; i < 6; i++) {
tester.invokeAndWait(new Runnable() {
public void run() {
frame.redoButton.doClick();
}
});
}
// Check plan contains the four wall
assertHomeContains(frame.home, wall1, wall2, wall3, wall4);
// Check they are joined to each other end point
assertWallsAreJoined(wall4, wall1, wall2);
assertWallsAreJoined(wall1, wall2, wall3);
assertWallsAreJoined(wall2, wall3, wall4);
assertWallsAreJoined(wall1, wall4, wall3);
// Check the second and the third wall are selected
assertSelectionContains(frame.home, wall2, wall3);
// 12. Reverse directions of selected walls
float xStartWall2 = wall2.getXStart();
float yStartWall2 = wall2.getYStart();
float xStartWall3 = wall3.getXStart();
float yStartWall3 = wall3.getYStart();
float xEndWall3 = wall3.getXEnd();
float yEndWall3 = wall3.getYEnd();
tester.invokeAndWait(new Runnable() {
public void run() {
frame.reverseDirectionButton.doClick();
}
});
// Check the second and the third wall are still selected
assertSelectionContains(frame.home, wall2, wall3);
// Check wall2 and wall3 were reserved
assertCoordinatesEqualWallPoints(xStartWall3, yStartWall3, xStartWall2, yStartWall2, wall2);
assertCoordinatesEqualWallPoints(xEndWall3, yEndWall3, xStartWall3, yStartWall3, wall3);
assertWallsAreJoined(wall3, wall2, wall1);
assertWallsAreJoined(wall4, wall3, wall2);
// 13. Select first wall
tester.actionClick(planComponent, 100, 100); // Give focus first
tester.actionClick(planComponent, 40, 30);
// Drag cursor from (30, 30) to (50, 50) with shift key pressed
tester.actionMousePress(planComponent,
new ComponentLocation(new Point(30, 30)));
tester.actionMouseMove(planComponent,
new ComponentLocation(new Point(50, 50)));
tester.actionKeyPress(KeyEvent.VK_SHIFT);
tester.waitForIdle();
tester.actionMouseRelease();
tester.actionKeyRelease(KeyEvent.VK_SHIFT);
// Check wall start point moved to (60, 60)
assertCoordinatesEqualWallPoints(60, 60, 504, 20, wall1);
assertCoordinatesEqualWallPoints(60, 60, 24, 300, wall4);
// 14. Select first wall
tester.actionClick(planComponent, 60, 50);
assertSelectionContains(frame.home, wall1);
// Split first wall in two walls
tester.click(frame.splitButton);
Wall wall5 = orderedWalls.get(orderedWalls.size() - 2);
Wall wall6 = orderedWalls.get(orderedWalls.size() - 1);
assertSelectionContains(frame.home, wall5);
assertCoordinatesEqualWallPoints(60, 60, 282, 40, wall5);
assertCoordinatesEqualWallPoints(282, 40, 504, 20, wall6);
assertWallsAreJoined(wall4, wall5, wall6);
assertWallsAreJoined(wall5, wall6, wall2);