package net.rdrei.android.scdl2.test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import net.rdrei.android.mediator.DelayedMessageQueue;
import net.rdrei.android.mediator.DelayedMessageQueue.Handler;
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 DelayedMessageQueueTest {
@Inject
private DelayedMessageQueue mQueue;
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 testAsyncReceival() {
final Counter counter = new Counter();
mQueue.send(KEY_ZERO, Message.obtain(null, 1));
mQueue.send(KEY_ZERO, Message.obtain(null, 2));
mQueue.setHandler(KEY_ZERO, new Handler() {
public void handleMessage(Message msg) {
counter.inc();
assertThat(msg.what, is(counter.getCount()));
}
});
assertThat(counter.getCount(), is(2));
}
@Test
public void testSyncReceival() {
final Counter counter = new Counter();
mQueue.setHandler(KEY_ZERO, new Handler() {
public void handleMessage(Message msg) {
counter.inc();
assertThat(msg.what, is(counter.getCount()));
}
});
mQueue.send(KEY_ZERO, Message.obtain(null, 1));
mQueue.send(KEY_ZERO, Message.obtain(null, 2));
assertThat(counter.getCount(), is(2));
}
@Test
public void testMixedReceival() {
final Counter counter = new Counter();
mQueue.send(KEY_ZERO, Message.obtain(null, 1));
mQueue.setHandler(KEY_ZERO, new Handler() {
public void handleMessage(Message msg) {
counter.inc();
assertThat(msg.what, is(counter.getCount()));
}
});
mQueue.send(KEY_ZERO, Message.obtain(null, 2));
assertThat(counter.getCount(), is(2));
}
public void testDispatch() {
final Counter counter = new Counter();
mQueue.send(KEY_ONE, Message.obtain(null, 2));
mQueue.send(KEY_ZERO, Message.obtain(null, 1));
mQueue.send(KEY_ZERO, Message.obtain(null, 3));
mQueue.setHandler(KEY_ZERO, new Handler() {
public void handleMessage(Message msg) {
counter.inc();
}
});
mQueue.setHandler(KEY_ONE, new Handler() {
public void handleMessage(Message msg) {
counter.inc();
assertThat(msg.what, is(2));
}
});
assertThat(counter.getCount(), is(3));
}
private final static class Counter {
private int mCount = 0;
public int getCount() {
return mCount;
}
public void inc() {
mCount += 1;
}
}
}