package nl.tudelft.bw4t.server.model.robots; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Stack; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import nl.tudelft.bw4t.map.BlockColor; import nl.tudelft.bw4t.map.NewMap; import nl.tudelft.bw4t.map.Zone; import nl.tudelft.bw4t.map.view.ViewBlock; import nl.tudelft.bw4t.map.view.ViewEntity; import nl.tudelft.bw4t.server.model.BW4TServerMap; import nl.tudelft.bw4t.server.model.blocks.Block; import nl.tudelft.bw4t.server.model.doors.Door; import nl.tudelft.bw4t.server.model.robots.NavigatingRobot.State; import nl.tudelft.bw4t.server.model.robots.handicap.GripperHandicap; import nl.tudelft.bw4t.server.model.robots.handicap.Human; import nl.tudelft.bw4t.server.model.robots.handicap.IRobot; import nl.tudelft.bw4t.server.model.zone.Corridor; import nl.tudelft.bw4t.server.model.zone.Room; import repast.simphony.context.Context; import repast.simphony.space.continuous.ContinuousSpace; import repast.simphony.space.continuous.NdPoint; import repast.simphony.space.grid.Grid; @RunWith(MockitoJUnitRunner.class) public class NavigatingRobotTest { @Mock private ContinuousSpace<Object> space; @Mock private Grid<Object> grid; @Mock private Context<Object> context; private nl.tudelft.bw4t.server.model.zone.Zone mockedZone = Mockito .mock(nl.tudelft.bw4t.server.model.zone.Zone.class); private nl.tudelft.bw4t.server.model.zone.Zone mockedOtherZone = Mockito .mock(nl.tudelft.bw4t.server.model.zone.Zone.class); private Door mockedDoor = Mockito.mock(Door.class); private Room mockedRoom = Mockito.mock(Room.class); private Corridor mockedCorridor = Mockito.mock(Corridor.class); // private BW4TEnvironment mockedEnv = Mockito.mock(BW4TEnvironment.class); // private MoveType mockedMoveType = Mockito.mock(MoveType.class); private NavigatingRobot bot; private NavigatingRobot bot2; private NavigatingRobot bot3; private NavigatingRobot bot4; private NavigatingRobot bot5; private NavigatingRobot bot6; private Block b; @Mock private NewMap map; private BW4TServerMap smap; @Before public void setup() { smap = spy(new BW4TServerMap(map, context)); when(smap.getContinuousSpace()).thenReturn(space); when(smap.getGridSpace()).thenReturn(grid); int cap = 2; int cap2 = 1; bot = new NavigatingRobot("Bot1", smap, true, cap); bot2 = new NavigatingRobot("Bot2", smap, false, cap2); bot3 = new NavigatingRobot("Bot3", smap, true, cap2); bot4 = null; bot5 = new NavigatingRobot("Bot5", smap, true, cap2); bot6 = new NavigatingRobot("Bot5", smap, true, cap2); b = new Block(BlockColor.BLUE, smap); } @Test public void getStateCollidedTest() { bot.setCollided(true); assertEquals(bot.getState(), State.COLLIDED); } @Test public void getStateTravelingTest() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { double point = 0.5; NdPoint ppoint = new NdPoint(point); Field move = NavigatingRobot.class.getDeclaredField("currentMove"); move.setAccessible(true); move.set(bot, ppoint); assertEquals(bot.getState(), State.TRAVELING); } @Test public void getStateOtherTest() { assertEquals(bot.getState(), State.ARRIVED); } @Test public void getNameTest() { assertEquals(bot.getName(), "Bot1"); } @Test public void disconnectTest() { bot.disconnect(); assertEquals(bot.isConnected(), false); } @Test public void equalseTest() { Zone z = new Zone(); assertEquals(false, bot.equals(bot2)); assertEquals(false, bot.equals(bot3)); assertEquals(false, bot5.equals(bot)); assertEquals(false, bot.equals(bot4)); assertEquals(false, bot.equals(z)); assertEquals(true, bot.equals(bot)); assertEquals(true, bot5.equals(bot6)); } @Test public void hashCodeTest() { assertEquals(bot.hashCode(), 1); } @Test public void isHoldingTest() { List<Block> emptyList = new ArrayList<Block>(); ; assertEquals(bot.getHolding().isEmpty(), emptyList.isEmpty()); } @Test public void canPickUpTest() { assertEquals(bot.canPickUp(bot2), false); assertEquals(bot.canPickUp(b), true); } @Test public void pickUpTest() { assertEquals(b.isFree(), true); bot.pickUp(b); assertEquals(b.getHeldBy(), bot); } @Test public void checkZoneAccessTest() { MoveType type = bot.checkZoneAccess(mockedZone, mockedZone, mockedDoor); assertEquals(type, MoveType.SAME_AREA); type = bot.checkZoneAccess(mockedZone, mockedOtherZone, mockedDoor); assertEquals(type, MoveType.ENTERING_FREESPACE); type = bot.checkZoneAccess(mockedZone, mockedRoom, mockedDoor); assertEquals(type, MoveType.HIT_CLOSED_DOOR); type = bot.checkZoneAccess(mockedZone, mockedRoom, null); assertEquals(type, MoveType.HIT_WALL); when(mockedRoom.containsMeOrNothing(bot)).thenReturn(true); type = bot.checkZoneAccess(mockedZone, mockedRoom, mockedDoor); assertEquals(type, MoveType.ENTERING_ROOM); type = bot.checkZoneAccess(mockedZone, mockedCorridor, mockedDoor); assertEquals(type, MoveType.HIT_OCCUPIED_ZONE); when(mockedCorridor.containsMeOrNothing(bot)).thenReturn(true); type = bot.checkZoneAccess(mockedZone, mockedCorridor, mockedDoor); assertEquals(type, MoveType.ENTER_CORRIDOR); } @Test public void clearCollidedTest() { bot.setCollided(true); assertEquals(bot.isCollided(), true); bot.clearCollided(); assertEquals(bot.isCollided(), false); } @Test public void isOneBotPerZoneTest() { assertEquals(true, bot.isOneBotPerZone()); assertEquals(false, bot2.isOneBotPerZone()); } @Test public void getSizeTest() { bot.setSize(2); assertEquals(bot.getSize(), 2); } @Test public void getViewTest() { when(space.getLocation(bot)).thenReturn(new NdPoint(1, 1)); Stack<nl.tudelft.bw4t.map.view.ViewBlock> bs = new Stack<ViewBlock>(); bs.add(b.getView()); ViewEntity ent = new ViewEntity(bot.getId(), "Bot1", 1, 1, bs, bot.getSize()); bot.pickUp(b); assertEquals(bot.getView().getId(), ent.getId()); assertEquals(bot.getView().getName(), ent.getName()); assertEquals(bot.getView().getLocation(), ent.getLocation()); assertEquals(bot.getView().getHolding(), ent.getHolding()); assertEquals(bot.getView().getRobotSize(), ent.getRobotSize()); } @Test public void getAgentRecordTest() { AgentRecord record = new AgentRecord("Bot1"); assertEquals(bot.getAgentRecord().getName(), record.getName()); assertEquals(bot.getAgentRecord().getGoodDrops(), record.getGoodDrops()); assertEquals(bot.getAgentRecord().getNMessages(), record.getNMessages()); assertEquals(bot.getAgentRecord().getNRoomsEntered(), record.getNRoomsEntered()); assertEquals(bot.getAgentRecord().getTotalStandingStillMillis(), record.getTotalStandingStillMillis()); assertEquals(bot.getAgentRecord().getWrongDrops(), record.getWrongDrops()); } @Test public void getBatteryTest() { Battery testBattery = new Battery(100, 100, 0); bot.setBattery(testBattery); assertEquals(bot.getBattery(), testBattery); } @Test public void getParentTest() { assertNull(bot.getParent()); } @Test public void getHandicapsListTest() { assertEquals(bot.getHandicapsList().size(), 0); IRobot r = new GripperHandicap(bot); assertTrue(r.getHandicapsList().contains("Gripper")); assertEquals(bot.getHandicapsList().size(), 1); } @Test public void getGripperCapacityTest() { bot.setGripperCapacity(5); assertEquals(bot.getGripperCapacity(), 5); } @Test public void getSpeedModTest() { bot.setSpeedMod(0.821); assertEquals(0.821, bot.getSpeedMod(), 0.01); } @Test public void isHumanTest() { assertFalse(bot.isHuman()); IRobot r = new Human(bot); assertTrue(r.getHandicapsList().contains("Human")); assertTrue(bot.isHuman()); } @Test public void getEPartnerTest() { assertNull(bot.getEPartner()); } @Test public void isHoldingEPartnerTest() { assertFalse(bot.isHoldingEPartner()); } @Test public void distanceToTest() { assertEquals(0.0, bot.distanceTo(bot2), 0.01); } }