package nl.tudelft.bw4t.server.model.zone; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; 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.Rectangle; import nl.tudelft.bw4t.server.model.BW4TServerMap; import nl.tudelft.bw4t.server.model.blocks.Block; import nl.tudelft.bw4t.server.model.robots.AbstractRobot; import nl.tudelft.bw4t.server.model.robots.AgentRecord; import repast.simphony.context.Context; import repast.simphony.space.continuous.ContinuousSpace; import repast.simphony.space.grid.Grid; @RunWith(MockitoJUnitRunner.class) @SuppressWarnings("unchecked") public class DropZoneTest { private nl.tudelft.bw4t.map.Zone zone = Mockito.mock(nl.tudelft.bw4t.map.Zone.class); private Context<Object> context = Mockito.mock(Context.class); private ContinuousSpace<Object> space = Mockito.mock(ContinuousSpace.class); private Grid<Object> grid = Mockito.mock(Grid.class); private List<BlockColor> colors = new ArrayList<BlockColor>(); private AbstractRobot robot = Mockito.mock(AbstractRobot.class); private DropZone dropzone; @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); when(zone.getBoundingbox()).thenReturn(new Rectangle(1.0, 1.0, 1.0, 1.0)); dropzone = new DropZone(zone, new ArrayList<BlockColor>(), smap); } @Test public void setSequenceTest() { colors.add(BlockColor.BLUE); dropzone.setSequence(colors); } @Test public void getSequenceTest() { assertEquals(new LinkedList<BlockColor>(), dropzone.getSequence()); colors.add(BlockColor.BLUE); dropzone.setSequence(colors); assertEquals(colors, dropzone.getSequence()); } @Test public void getSequenceIndexTest() { assertEquals(0, dropzone.getSequenceIndex()); } @Test public void droppedTest() { when(robot.getBoundingBox()).thenReturn(new Rectangle2D.Double()); assertFalse(dropzone.dropped(new Block(BlockColor.BLUE, smap), robot)); when(robot.getBoundingBox()).thenReturn(new Rectangle2D.Double(0.5, 0.5, 1.0, 1.0)); assertTrue(dropzone.dropped(new Block(BlockColor.BLUE, smap), robot)); //colors.add(BlockColor.BLUE); colors.add(BlockColor.DARK_GRAY); dropzone.setSequence(colors); when(robot.getAgentRecord()).thenReturn(new AgentRecord("SomethingToTest")); assertTrue(dropzone.dropped(new Block(BlockColor.BLUE, smap), robot)); Mockito.verify(robot).getAgentRecord(); colors.clear(); colors.add(BlockColor.BLUE); colors.add(BlockColor.DARK_GRAY); assertTrue(dropzone.dropped(new Block(BlockColor.BLUE, smap), robot)); colors.remove(1); assertTrue(dropzone.dropped(new Block(BlockColor.BLUE, smap), robot)); } @Test public void sequenceCompleteTest() { assertTrue(dropzone.sequenceComplete()); colors.add(BlockColor.DARK_GRAY); dropzone.setSequence(colors); assertFalse(dropzone.sequenceComplete()); } }