package nl.tudelft.bw4t.server.model.robots.handicap; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; import nl.tudelft.bw4t.server.model.doors.Door; import nl.tudelft.bw4t.server.model.robots.AbstractRobot; import nl.tudelft.bw4t.server.model.robots.MoveType; import nl.tudelft.bw4t.server.model.zone.Corridor; import nl.tudelft.bw4t.server.model.zone.Zone; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; /** * Testing functionalities of the handicaps. */ public class SizeOverloadTest { /** * Mocked big robot object. */ @Mock private IRobot bigRobotMock; /** * Second mocked big robot object * to return the other abstract robot. */ @Mock private IRobot bigRobotMock2; /** * Mocked small robot object. */ @Mock private IRobot smallRobotMock; /** * Mocked abstract robot object (big). */ @Mock private AbstractRobot bigAbstractMock; /** * Second mocked big abstract robot * object, with different behaviour. */ @Mock private AbstractRobot bigAbstractMock2; /** * Mocked abstract robot object (small). */ @Mock private AbstractRobot smallAbstractMock; /** * Mock the start zone. */ @Mock private Zone start; /** * Mock the end zone. */ @Mock private Zone end; /** * Mock a corridor. */ @Mock private Corridor corridor; /** * Mock the door */ @Mock private Door door; /** * Set up mocks and behaviour. */ @Before public void setUp() { initMocks(this); when(bigRobotMock.getSuperParent()).thenReturn(bigAbstractMock); when(bigRobotMock2.getSuperParent()).thenReturn(bigAbstractMock2); when(bigAbstractMock.getSize()).thenReturn(5); when(bigAbstractMock2.getSize()).thenReturn(5); when(smallRobotMock.getSuperParent()).thenReturn(smallAbstractMock); when(smallAbstractMock.getSize()).thenReturn(3); when(bigAbstractMock.isOneBotPerZone()).thenReturn(false); when(bigAbstractMock2.isOneBotPerZone()).thenReturn(true); when(corridor.containsMeOrNothing(bigAbstractMock2)).thenReturn(false); } /** * Test for behaviour when a robot is too big. */ @Test public void sizeTooBigTest() { SizeOverloadHandicap soh = new SizeOverloadHandicap(bigRobotMock, 5); assertEquals(soh.checkZoneAccess(start, end, door), MoveType.ENTERING_FREESPACE); } /** * Test for getSize() */ @Test public void getSizeTest() { SizeOverloadHandicap soh = new SizeOverloadHandicap(bigRobotMock, 5); assertEquals(soh.getSize(), 5); } /** * Test for behaviour when a robot is too big, * and both zones are the same. */ @Test public void zonesTheSameTest() { SizeOverloadHandicap soh = new SizeOverloadHandicap(bigRobotMock, 5); assertEquals(soh.checkZoneAccess(null, null, door), MoveType.SAME_AREA); } /** * Test for behaviour when a robot is small (size < 4). */ @Test public void sizeTooSmaalTest() { SizeOverloadHandicap soh = new SizeOverloadHandicap(smallRobotMock, 3); soh.checkZoneAccess(start, end, door); verify(smallRobotMock).checkZoneAccess(start, end, door); } /** * Test with a corridor. */ @Test public void corridorTest() { SizeOverloadHandicap soh = new SizeOverloadHandicap(bigRobotMock, 5); assertEquals(soh.checkZoneAccess(start, corridor, door), MoveType.ENTER_CORRIDOR); } /** * Test with a corridor, and the robot return true if only one * bot per zone is allowed, and containsMeOrNothing() returns false. */ @Test public void corridorTest2() { SizeOverloadHandicap soh = new SizeOverloadHandicap(bigRobotMock2, 5); assertEquals(soh.checkZoneAccess(start, corridor, door), MoveType.HIT_OCCUPIED_ZONE); } }