/** * Test registration of object. */ @Test public void testRegister() { assertTrue(model.contains(agent1)); boolean fail = false; try { model.register(agent1); } catch (final IllegalArgumentException e) { fail = true; } assertTrue(fail); }
/** * Set up a simple and reliable world. */ @Before public void setUp() { model = CommModel .builder() .withDefaultDeviceReliability(1.0) .build(fakeDependencies()); agent1 = new Agent(new Point(0, 0)); agent2 = new Agent(new Point(0, 10)); agent3 = new Agent(new Point(5, 10)); agent4 = new Agent(new Point(5, 5)); agent5 = new Agent(new Point(5, 0)); model.register(agent1); model.register(agent2); model.register(agent3); model.register(agent4); model.register(agent5); TestUtil.testEnum(CommModel.EventTypes.class); }
/** * Tests that comm users should create a device. */ @Test public void testIdleCommUser() { boolean fail = false; try { CommModel.builder().build(fakeDependencies()) .register(new IdleCommUser()); } catch (final IllegalStateException e) { fail = true; } assertTrue(fail); }
/** * Tests view on users and devices. */ @Test public void testGetUsersAndDevices() { final List<CommUser> users = model.getUsersAndDevices().keySet().asList(); assertSame(agent1, users.get(0)); assertSame(agent2, users.get(1)); assertSame(agent3, users.get(2)); assertSame(agent4, users.get(3)); assertSame(agent5, users.get(4)); assertSame(users, model.getUsersAndDevices().keySet().asList()); final CommUser agent6 = new RangedAgent(new Point(6, 6), 4); model.register(agent6); assertSame(agent6, model.getUsersAndDevices().keySet().asList().get(5)); }
/** * Test that a broadcast only ends up at agents within the range. */ @Test public void testBroadcastWithRange() { final Agent ranged = new RangedAgent(new Point(0, 5), 5); model.register(ranged); ranged.device().broadcast(Contents.YO); model.afterTick(TimeLapseFactory.create(0, 100)); assertFalse(agent1.device().getUnreadMessages().isEmpty()); assertFalse(agent2.device().getUnreadMessages().isEmpty()); assertTrue(agent3.device().getUnreadMessages().isEmpty()); assertFalse(agent4.device().getUnreadMessages().isEmpty()); assertTrue(agent5.device().getUnreadMessages().isEmpty()); }
/** * Tests that the same device is used again upon re-registering. */ @Test public void testRegisterUnregistered() { final ListenerEventHistory leh = new ListenerEventHistory(); model.getEventAPI().addListener(leh, EventTypes.ADD_COMM_USER, EventTypes.REMOVE_COMM_USER); final CommDevice originalDevice = agent1.device(); assertThat(model.contains(agent1)).isTrue(); model.unregister(agent1); assertThat(model.contains(agent1)).isFalse(); assertThat(leh.getEventTypeHistory()).containsExactly(REMOVE_COMM_USER) .inOrder(); model.register(agent1); assertThat(model.contains(agent1)).isTrue(); final CommDevice newDevice = agent1.device(); assertThat(originalDevice).isSameAs(newDevice); assertThat(leh.getEventTypeHistory()).containsExactly(REMOVE_COMM_USER, ADD_COMM_USER) .inOrder(); newDevice.broadcast(Contents.HELLO_WORLD); }
/** * Test for unreliable direct message. */ @Test public void testSendDirectMsgUnreliable() { final Agent unreliable = new Agent(new Point(5, 5), 0); model.register(unreliable); unreliable.device().send(Contents.YO, agent1); model.afterTick(TimeLapseFactory.create(0, 100)); assertTrue(agent1.device().getUnreadMessages().isEmpty()); agent1.device().send(Contents.YO, unreliable); model.afterTick(TimeLapseFactory.create(0, 100)); assertTrue(unreliable.device().getUnreadMessages().isEmpty()); }
/** * Tests broadcasting from and to unreliable agents. */ @Test public void testBroadcastUnreliable() { final Agent unreliable = new Agent(new Point(5, 5), 0); model.register(unreliable); unreliable.device().broadcast(Contents.YO); model.afterTick(TimeLapseFactory.create(0, 100)); assertTrue(agent1.device().getUnreadMessages().isEmpty()); assertTrue(agent2.device().getUnreadMessages().isEmpty()); agent1.device().broadcast(Contents.YO); model.afterTick(TimeLapseFactory.create(0, 100)); assertTrue(unreliable.device().getUnreadMessages().isEmpty()); assertEquals(1, agent2.device().getUnreadMessages().size()); }
/** * Test event dispatching. */ @Test public void testEvent() { final ListenerEventHistory history = new ListenerEventHistory(); model.getEventAPI().addListener(history, EventTypes.ADD_COMM_USER); final CommUser agent6 = new RangedAgent(new Point(6, 6), 4); model.register(agent6); assertEquals(1, history.getHistory().size()); assertTrue(history.getHistory().get(0) instanceof CommModelEvent); final CommModelEvent event = (CommModelEvent) history.getHistory().get(0); assertSame(agent6, event.getUser()); assertSame(model, event.getIssuer()); assertSame(agent6, model.getUsersAndDevices().inverse().get(event.getDevice())); }
/** * Test for send message with limited range. */ @Test public void testSendDirectMsgWithRange() { final Agent ranged = new RangedAgent(new Point(0, 5), 5); model.register(ranged); // is possible, is within range ranged.device().send(Contents.YO, agent1); // not possible, too far ranged.device().send(Contents.YO, agent3); // receiving messages from outside range is possible agent3.device().send(Contents.YO, ranged); model.afterTick(TimeLapseFactory.create(0, 100)); final Message m = agent1.device().getUnreadMessages().get(0); assertSame(ranged, m.getSender()); assertTrue(agent3.device().getUnreadMessages().isEmpty()); assertSame(agent3, ranged.device().getUnreadMessages().get(0) .getSender()); }
/** * Tests what happens if an agent no longer has a position. */ @Test public void testSenderIsRemovedDuringSend() { final Agent a = new Agent(new Point(0, 0)); final Agent b = new RangedAgent(new Point(0, 0), 5); model.register(a); model.register(b); // a is removed during the same tick as that it sends a message, this // doesn't matter since it has no range, therefore it sends anyway. a.device().broadcast(Contents.YO); a.setPosition(null); model.afterTick(TimeLapseFactory.create(0, 100)); assertEquals(1, agent1.device().getReceivedCount()); // b is removed during the same tick as that is sends a message, since it is // a ranged device the message is not sent and will stay in the outbox. b.device().broadcast(Contents.YO); b.setPosition(null); model.afterTick(TimeLapseFactory.create(0, 100)); assertEquals(1, agent1.device().getReceivedCount()); assertEquals(1, b.device().getOutbox().size()); }