final HomeController controller =
new HomeController(home, preferences, new SwingViewFactory());
JComponent homeView = (JComponent)controller.getView();
PlanComponent planComponent = (PlanComponent)TestUtilities.findComponent(
homeView, PlanComponent.class);
HomeComponent3D component3D = (HomeComponent3D)TestUtilities.findComponent(
homeView, HomeComponent3D.class);
// 1. Create a frame that displays a home view
JFrame frame = new JFrame("Home Camera Test");
frame.add(homeView);
frame.pack();
// Show home plan frame
showWindow(frame);
JComponentTester tester = new JComponentTester();
tester.waitForIdle();
// Transfer focus to plan view
planComponent.requestFocusInWindow();
tester.waitForIdle();
// Check plan view has focus
assertTrue("Plan component doesn't have the focus", planComponent.isFocusOwner());
// Check default camera is the top camera
assertSame("Default camera isn't top camera",
home.getTopCamera(), home.getCamera());
// Check default camera location and angles
assertCoordinatesAndAnglesEqualCameraLocationAndAngles(500, 1500, 1000,
(float)Math.PI, (float)Math.PI / 4, home.getCamera());
// 2. Create one wall between points (50, 50) and (150, 50) at a bigger scale
runAction(controller, HomePane.ActionType.CREATE_WALLS, tester);
runAction(controller, HomePane.ActionType.ZOOM_IN, tester);
tester.actionKeyPress(KeyEvent.VK_SHIFT);
tester.actionClick(planComponent, 50, 50);
tester.actionClick(planComponent, 150, 50, InputEvent.BUTTON1_MASK, 2);
tester.actionKeyRelease(KeyEvent.VK_SHIFT);
// Check wall length is 100 * plan scale
Wall wall = home.getWalls().iterator().next();
assertTrue("Incorrect wall length " + 100 / planComponent.getScale()
+ " " + (wall.getXEnd() - wall.getXStart()),
Math.abs(wall.getXEnd() - wall.getXStart() - 100 / planComponent.getScale()) < 1E-3);
float xWallMiddle = (wall.getXEnd() + wall.getXStart()) / 2;
float yWallMiddle = (wall.getYEnd() + wall.getYStart()) / 2;
// Check camera location and angles
assertCoordinatesAndAnglesEqualCameraLocationAndAngles(xWallMiddle, yWallMiddle + 1000, 1000,
(float)Math.PI, (float)Math.PI / 4, home.getCamera());
// 3. Transfer focus to 3D view with TAB key
tester.actionKeyStroke(KeyEvent.VK_TAB);
// Check 3D view has focus
assertTrue("3D component doesn't have the focus", component3D.isFocusOwner());
// Add 1� to camera pitch
tester.actionKeyStroke(KeyEvent.VK_PAGE_UP);
// Check camera location and angles
assertCoordinatesAndAnglesEqualCameraLocationAndAngles(xWallMiddle, 1000.1468f, 1025.8342f,
(float)Math.PI, (float)Math.PI / 4 + (float)Math.PI / 120, home.getCamera());