@Override public boolean register(CommUser commUser) { checkArgument(!contains(commUser), "%s is already registered.", commUser); if (unregisteredUsersDevices.containsKey(commUser)) { // re-register, reuse already created device final CommDevice dev = unregisteredUsersDevices.remove(commUser); dev.register(); addDevice(dev, commUser); } else { final CommDeviceBuilder builder = CommDevice.builder(this, commUser) .setReliability(defaultReliability); commUser.setCommDevice(builder); checkState( builder.isUsed(), "%s is not implemented correctly, a CommDevice must be constructed in" + " setCommDevice()", commUser); } return true; }
CommRenderer(Builder b, CommModel m) { model = m; viewOptions = b.viewOptions(); reliableColor = b.reliableColor(); unreliableColor = b.unreliableColor(); helper = new RenderHelper(); uiObjects = Collections .synchronizedMap(new LinkedHashMap<CommUser, DeviceUI>()); for (final Entry<CommUser, CommDevice> entry : model.getUsersAndDevices() .entrySet()) { addUIObject(entry.getKey(), entry.getValue()); } model.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { verify(e instanceof CommModelEvent); final CommModelEvent event = (CommModelEvent) e; if (e.getEventType() == CommModel.EventTypes.ADD_COMM_USER) { addUIObject(event.getUser(), event.getDevice()); } else { removeUIObject(event.getUser()); } } }, CommModel.EventTypes.ADD_COMM_USER, CommModel.EventTypes.REMOVE_COMM_USER); }
/** * Creates a new default builder. */ @Before public void setUp() { builder = new CommDeviceBuilder(CommModel.builder() .build(CommModelTest.fakeDependencies()), mock(CommUser.class)); }
/** * 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 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 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()); }
assertThat(agent2.device().getOutbox()).hasSize(1); assertThat(model.contains(agent2)).isTrue(); model.unregister(agent2); assertThat(model.contains(agent2)).isFalse(); model.unregister(agent2); } catch (final IllegalArgumentException e) { assertThat(e.getMessage()).contains("CommModel does not contain"); model.afterTick(TimeLapseFactory.create(0, 100));
/** * 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)); }
@Override public boolean register(CommUser element) { uiObjects .put(element, new DeviceUI(element, model.getUsersAndDevices().get(element))); return true; }
"Can not send message to self %s.", recipient); checkArgument(model.contains(recipient), "%s can not send message to unknown recipient: %s.", user, recipient);
/** * Tests the correct sending and receiving of a direct message. */ @Test public void testSendDirectMsg() { agent1.device().send(Contents.YO, agent2); assertTrue(agent2.device().getUnreadMessages().isEmpty()); // send messages model.afterTick(TimeLapseFactory.create(0, 100)); assertTrue(agent1.device().getUnreadMessages().isEmpty()); final List<Message> msgs = agent2.device().getUnreadMessages(); assertEquals(1, msgs.size()); assertFalse(msgs.get(0).toString().isEmpty()); assertSame(Contents.YO, msgs.get(0).getContents()); assertSame(agent1, msgs.get(0).getSender()); assertTrue(agent2.device().getUnreadMessages().isEmpty()); }
CommDevice(CommDeviceBuilder builder) { model = builder.model; user = builder.user; reliability = builder.deviceReliability; maxRange = builder.deviceMaxRange; if (maxRange.isPresent()) { rangePredicate = new RangePredicate(user, maxRange.get()); } else { rangePredicate = Predicates.alwaysTrue(); } unreadMessages = new ArrayList<>(); outbox = new ArrayList<>(); receivedCount = 0; model.addDevice(this, user); registered = true; }
@Override public CommModel build(DependencyProvider dependencyProvider) { return new CommModel( dependencyProvider.get(RandomProvider.class).newInstance(), this); } }
@Before public void setUp() { builders = new CommDeviceBuilder[COMMUSERS.length]; final CommModel commModel = CommModel .builder() .build(CommModelTest.fakeDependencies()); for (int i = 0; i < COMMUSERS.length; i++) { builders[i] = new CommDeviceBuilder(commModel, COMMUSERS[i]); } }
/** * 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 immutable view. */ @Test public void testImmutableGetUsersAndDevices() { final List<CommUser> users = model.getUsersAndDevices().keySet().asList(); thrown.expect(UnsupportedOperationException.class); users.clear(); }
@Override public boolean unregister(CommUser commUser) { checkArgument(contains(commUser), "CommModel does not contain %s.", commUser); final CommDevice unregDevice = usersDevices.remove(commUser); unregDevice.unregister(); unregisteredUsersDevices.put(commUser, unregDevice); usersHasChanged = true; if (eventDispatcher.hasListenerFor(EventTypes.REMOVE_COMM_USER)) { eventDispatcher.dispatchEvent(new CommModelEvent( EventTypes.REMOVE_COMM_USER, this, unregDevice, commUser)); } return true; }
assertTrue(agent5.device().getUnreadMessages().isEmpty()); model.afterTick(TimeLapseFactory.create(0, 100)); assertTrue(agent1.device().getUnreadMessages().isEmpty()); final List<Message> msgs2 = agent2.device().getUnreadMessages();