public void inject(VehicleMessage message) { if(callback != null) { callback.receive(message); if(delayAfterInject) { // If we don't pause here the background thread that processes // the injected measurement may not get to run before we make // our assertions try { Thread.sleep(1000); } catch(InterruptedException e) {} } } }
protected void connected() { if(mCallback != null) { mCallback.sourceConnected(this); } }
protected void disconnected() { if(mCallback != null) { mCallback.sourceDisconnected(this); } }
/** * Pass a new message to the callback, if set. * * @param message the new message object. */ protected void handleMessage(VehicleMessage message) { if(message != null) { message.timestamp(); if(mCallback != null) { mCallback.receive(message); } } }
@Test public void callbackDisconnected() { mSource.disconnected(); verify(mCallback).sourceDisconnected(mSource); }
@Test public void callbackConnected() { mSource.connected(); verify(mCallback).sourceConnected(mSource); }
@Test public void nullMessageNotSentToCallback() { mSource.inject(null); verify(mCallback, never()).receive(Matchers.any(VehicleMessage.class)); }
@Test public void connectedNoCallback() { mSource.setCallback(null); mSource.connected(); verify(mCallback, never()).sourceDisconnected(mSource); }
@Test public void receiveMessageSentToCallback() { mSource.inject(new VehicleMessage()); verify(mCallback).receive(Matchers.any(VehicleMessage.class)); }
@Test public void disconnectedNoCallback() { mSource.setCallback(null); mSource.disconnected(); verify(mCallback, never()).sourceDisconnected(mSource); }
@Test public void handleWithNoCallback() { mSource.setCallback(null); mSource.inject(new VehicleMessage()); verify(mCallback, never()).receive(Matchers.any(VehicleMessage.class)); }
@Test public void disconnectsOnStop() { mSource.stop(); mSource.disconnected(); verify(mCallback, times(1)).sourceDisconnected(mSource); }
@Test public void receivedMessagesAreTimestampped() { mSource.inject(new VehicleMessage()); ArgumentCaptor<VehicleMessage> argument = ArgumentCaptor.forClass( VehicleMessage.class); verify(mCallback).receive(argument.capture()); assertTrue(argument.getValue().isTimestamped()); }
@Test public void receiveInvalidDataNoCallback() { source.start(); source.connect(); source.inject(new byte[] {1,2,3,4}); TestUtils.pause(20); verify(callback, never()).receive(Matchers.any(VehicleMessage.class)); }
@Test public void readMultipleMessageAtOnceReceivesAll() { source.start(); source.connect(); List<SimpleVehicleMessage> messages = new ArrayList<>(); messages.add(new SimpleVehicleMessage("1", "foo")); messages.add(new SimpleVehicleMessage("2", "bar")); messages.add(new SimpleVehicleMessage("3", "baz")); for(SimpleVehicleMessage message : messages) { source.inject(new JsonStreamer().serializeForStream(message), false); } source.signal(); TestUtils.pause(100); ArgumentCaptor<VehicleMessage> argument = ArgumentCaptor.forClass( VehicleMessage.class); verify(callback, times(3)).receive(argument.capture()); List<VehicleMessage> capturedMessages = argument.getAllValues(); for(int i = 0; i < messages.size(); i++) { VehicleMessage received = capturedMessages.get(i); received.untimestamp(); assertEquals(received, messages.get(i)); } }
@Test public void receiveValidBinaryTriggersCallback() throws SerializationException { source.start(); source.connect(); SimpleVehicleMessage message = new SimpleVehicleMessage("foo", "bar"); source.inject(new BinaryStreamer().serializeForStream(message)); TestUtils.pause(100); ArgumentCaptor<VehicleMessage> argument = ArgumentCaptor.forClass( VehicleMessage.class); verify(callback).receive(argument.capture()); VehicleMessage received = argument.getValue(); received.untimestamp(); assertEquals(received, message); }
@Test public void receiveValidJsonTriggersCallback() { source.start(); source.connect(); SimpleVehicleMessage message = new SimpleVehicleMessage("foo", "bar"); source.inject(new JsonStreamer().serializeForStream(message)); TestUtils.pause(100); ArgumentCaptor<VehicleMessage> argument = ArgumentCaptor.forClass( VehicleMessage.class); verify(callback).receive(argument.capture()); VehicleMessage received = argument.getValue(); received.untimestamp(); assertEquals(received, message); }