package nl.tudelft.bw4t.environmentstore.editor; import static org.junit.Assert.assertFalse; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import nl.tudelft.bw4t.environmentstore.editor.controller.MapPanelController; import nl.tudelft.bw4t.environmentstore.editor.controller.UpdateableEditorInterface; import nl.tudelft.bw4t.environmentstore.editor.controller.ZoneController; import nl.tudelft.bw4t.environmentstore.editor.controller.ZoneMenuController; import nl.tudelft.bw4t.environmentstore.editor.model.ZoneModel; import nl.tudelft.bw4t.environmentstore.editor.view.RoomMenu; import nl.tudelft.bw4t.environmentstore.editor.view.ZoneMenu; import nl.tudelft.bw4t.map.Zone.Type; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; public class ZoneMenuControllerTest { private ZoneMenu zoneMenu; private RoomMenu roomMenu; private ZoneMenuController menuController; @Mock private ZoneController zoneController; private MapPanelController mapController; private UpdateableEditorInterface uei = new UpdateableEditorInterface() { @Override public void update() { // For testing purposes only. } }; @Before public void setUp() { zoneController = mock(ZoneController.class); mapController = spy(new MapPanelController(5,5)); when(mapController.getSelected()).thenReturn(new ZoneController(mapController, new ZoneModel())); when(mapController.getSelected()).thenReturn(zoneController); when(mapController.getSelected().getUpdateableEditorInterface()).thenReturn(uei); zoneMenu = new ZoneMenu(mapController); roomMenu = new RoomMenu(mapController) { @Override public void update() { // For testing purposes only. } }; menuController = new ZoneMenuController(); menuController.attachListenersToZoneMenu(zoneMenu,mapController); } @Test public void attachZoneListenersTest() { menuController.attachListenersToZoneMenu(zoneMenu, mapController); assertFalse(zoneMenu.getMenuItemZoneBlockade().getActionListeners()[0].equals(null)); assertFalse(zoneMenu.getMenuItemZoneChargingZone().getActionListeners()[0].equals(null)); assertFalse(zoneMenu.getMenuItemZoneCorridor().getActionListeners()[0].equals(null)); assertFalse(zoneMenu.getMenuItemZoneDropZone().getActionListeners()[0].equals(null)); assertFalse(zoneMenu.getMenuItemZoneStartZone().getActionListeners()[0].equals(null)); assertFalse(zoneMenu.getMenuItemZoneRoom().getActionListeners()[0].equals(null)); } @Test public void attachZoneListenersActionTest() { menuController.attachListenersToZoneMenu(zoneMenu, mapController); /* Click the create blockade option button */ zoneMenu.getMenuItemZoneBlockade().doClick(); /* Verify if createZone is called */ verify(mapController, atLeastOnce()).createZone(Type.BLOCKADE, false, false); } @Test public void attachRoomListenersTest() { menuController.attachListenersToRoomMenu(roomMenu, mapController); /* Check whether the Zone listeners have been set (one is enough to check all, see attachZoneListenersTest). */ assertFalse(zoneMenu.getMenuItemZoneBlockade().getActionListeners()[0].equals(null)); assertFalse(roomMenu.getMenuItemDoorSideNorth().getActionListeners()[0].equals(null)); assertFalse(roomMenu.getMenuItemDoorSideEast().getActionListeners()[0].equals(null)); assertFalse(roomMenu.getMenuItemDoorSideSouth().getActionListeners()[0].equals(null)); assertFalse(roomMenu.getMenuItemDoorSideWest().getActionListeners()[0].equals(null)); } @Test public void attachRoomListenersActionTest() { menuController.attachListenersToRoomMenu(roomMenu, mapController); /* Click the exit button */ roomMenu.getMenuItemDoorSideSouth().doClick(); /* Verify if closeScenarioEditor is called */ verify(mapController.getSelected(), atLeastOnce()).setDoor(2, true); } }