Skip to content

Commit 0959aa5

Browse files
committed
Add unit tests for HandlerThreadScheduler
1 parent d34372a commit 0959aa5

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

rxjava-contrib/rxjava-android/src/main/java/rx/concurrency/HandlerThreadScheduler.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
package rx.concurrency;
22

33
import android.os.Handler;
4+
import org.junit.Test;
5+
import org.junit.runner.RunWith;
6+
import org.mockito.ArgumentCaptor;
47
import rx.Scheduler;
58
import rx.Subscription;
9+
import rx.android.testsupport.AndroidTestRunner;
610
import rx.operators.AtomicObservableSubscription;
711
import rx.util.functions.Func2;
812

913
import java.util.concurrent.TimeUnit;
1014

15+
import static org.mockito.Matchers.any;
16+
import static org.mockito.Matchers.anyLong;
17+
import static org.mockito.Matchers.eq;
18+
import static org.mockito.Mockito.mock;
19+
import static org.mockito.Mockito.never;
20+
import static org.mockito.Mockito.verify;
21+
1122
/**
1223
* Schedules actions to run on an Android Handler thread.
1324
*/
@@ -49,6 +60,61 @@ public void run() {
4960
return subscription;
5061
}
5162
}
63+
64+
@RunWith(AndroidTestRunner.class)
65+
public static final class UnitTest {
66+
67+
@Test
68+
public void shouldScheduleActionOnHandlerThread() {
69+
final Handler handler = mock(Handler.class);
70+
final Object state = new Object();
71+
final Func2<Scheduler, Object, Subscription> action = mock(Func2.class);
72+
73+
Scheduler scheduler = new HandlerThreadScheduler(handler);
74+
scheduler.schedule(state, action);
75+
76+
// verify that we post to the given Handler
77+
ArgumentCaptor<Runnable> runnable = ArgumentCaptor.forClass(Runnable.class);
78+
verify(handler).post(runnable.capture());
79+
80+
// verify that the given handler delegates to our action
81+
runnable.getValue().run();
82+
verify(action).call(scheduler, state);
83+
}
84+
85+
@Test
86+
public void shouldScheduleDelayedActionOnHandlerThread() {
87+
final Handler handler = mock(Handler.class);
88+
final Object state = new Object();
89+
final Func2<Scheduler, Object, Subscription> action = mock(Func2.class);
90+
91+
Scheduler scheduler = new HandlerThreadScheduler(handler);
92+
scheduler.schedule(state, action, 1L, TimeUnit.SECONDS);
93+
94+
// verify that we post to the given Handler
95+
ArgumentCaptor<Runnable> runnable = ArgumentCaptor.forClass(Runnable.class);
96+
verify(handler).postDelayed(runnable.capture(), eq(1000L));
97+
98+
// verify that the given handler delegates to our action
99+
runnable.getValue().run();
100+
verify(action).call(scheduler, state);
101+
}
102+
103+
@Test
104+
public void scheduleDelayedActionShouldForwardToNormalPostIfDelayIsZero() {
105+
final Handler handler = mock(Handler.class);
106+
final Object state = new Object();
107+
final Func2<Scheduler, Object, Subscription> action = mock(Func2.class);
108+
109+
Scheduler scheduler = new HandlerThreadScheduler(handler);
110+
scheduler.schedule(state, action, 0L, TimeUnit.SECONDS);
111+
112+
// verify that we post to the given Handler
113+
verify(handler).post(any(Runnable.class));
114+
verify(handler, never()).postDelayed(any(Runnable.class), anyLong());
115+
}
116+
117+
}
52118
}
53119

54120

0 commit comments

Comments
 (0)