package net.rdrei.android.scdl2.test; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import net.rdrei.android.mediator.MessageMediator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import android.os.Message; import com.google.inject.Inject; @RunWith(RobolectricTestRunner.class) public class MessageMediatorTest { @Inject private MessageMediator mMediator; @Inject private MessageMediator.Receiver mReceiver0; @Inject private MessageMediator.Receiver mReceiver1; private static final String KEY_ZERO = "ZERO"; private static final String KEY_ONE = "ONE"; @Before public void inject() { TestHelper.getInjector().injectMembers(this); } @Test public void testReceivesQueuedMessages() { final Counter counter = new Counter(); final Message message0 = Message.obtain(); message0.arg1 = 23; final Message message1 = Message.obtain(); message1.arg1 = 42; mMediator.register(KEY_ZERO, mReceiver0); mMediator.send(KEY_ZERO, message0); mMediator.send(KEY_ZERO, message1); mReceiver0.setHandler(new MessageMediator.Handler() { public void handleMessage(final Message msg) { counter.inc(); if (counter.getCount() == 1) { assertThat(msg.arg1, is(23)); } else if (counter.getCount() == 2) { assertThat(msg.arg1, is(42)); } } }); mReceiver0.accept(); assertThat(counter.getCount(), is(2)); } @Test public void testReceivesLiveMessages() { final Counter counter = new Counter(); final Message message0 = Message.obtain(); message0.arg1 = 23; final Message message1 = Message.obtain(); message1.arg1 = 42; mMediator.register(KEY_ZERO, mReceiver0); mReceiver0.setHandler(new MessageMediator.Handler() { public void handleMessage(final Message msg) { counter.inc(); if (counter.getCount() == 1) { assertThat(msg.arg1, is(23)); } else if (counter.getCount() == 2) { assertThat(msg.arg1, is(42)); } msg.recycle(); } }); mMediator.send(KEY_ZERO, message0); mReceiver0.accept(); assertThat(counter.getCount(), is(1)); mMediator.send(KEY_ZERO, message1); assertThat(counter.getCount(), is(2)); } @Test public void testReceivesMessageDispatching() { final Counter counter = new Counter(); final Message message0 = Message.obtain(); message0.arg1 = 23; final Message message1 = Message.obtain(); message1.arg1 = 42; mMediator.register(KEY_ZERO, mReceiver0); mMediator.register(KEY_ONE, mReceiver1); mReceiver0.setHandler(new MessageMediator.Handler() { public void handleMessage(final Message msg) { assertThat(msg.arg1, is(23)); counter.inc(); } }); mReceiver1.setHandler(new MessageMediator.Handler() { public void handleMessage(final Message msg) { assertThat(msg.arg1, is(42)); counter.inc(); } }); mMediator.send(KEY_ZERO, message0); mReceiver0.accept(); mMediator.send(KEY_ONE, message1); mReceiver1.accept(); assertThat(counter.getCount(), is(2)); } private final static class Counter { private int mCount = 0; public int getCount() { return mCount; } public void inc() { mCount += 1; } } }