Skip to content

Commit 70c14a3

Browse files
TestScheduler example
1 parent aae04c1 commit 70c14a3

File tree

1 file changed

+51
-22
lines changed

1 file changed

+51
-22
lines changed

language-adaptors/rxjava-scala/src/main/scala/rx/lang/scala/concurrency/TestScheduler.scala

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,40 @@ import org.scalatest.junit.JUnitSuite
66

77
/**
88
* Scheduler with artificial time, useful for testing.
9+
*
10+
* For example, you could test the `Observable.interval` operation using a `TestScheduler` as follows:
11+
*
12+
* {{{
13+
* @Test def testInterval() {
14+
* import org.mockito.Matchers._
15+
* import org.mockito.Mockito._
16+
*
17+
* val scheduler = TestScheduler()
18+
* val observer = mock(classOf[rx.Observer[Long]])
19+
*
20+
* val o = Observable.interval(1 second, scheduler)
21+
* val sub = o.subscribe(observer)
22+
*
23+
* verify(observer, never).onNext(0L)
24+
* verify(observer, never).onCompleted()
25+
* verify(observer, never).onError(any(classOf[Throwable]))
26+
*
27+
* scheduler.advanceTimeTo(2 seconds)
28+
*
29+
* val inOrdr = inOrder(observer);
30+
* inOrdr.verify(observer, times(1)).onNext(0L)
31+
* inOrdr.verify(observer, times(1)).onNext(1L)
32+
* inOrdr.verify(observer, never).onNext(2L)
33+
* verify(observer, never).onCompleted()
34+
* verify(observer, never).onError(any(classOf[Throwable]))
35+
*
36+
* sub.unsubscribe();
37+
* scheduler.advanceTimeTo(4 seconds)
38+
* verify(observer, never).onNext(2L)
39+
* verify(observer, times(1)).onCompleted()
40+
* verify(observer, never).onError(any(classOf[Throwable]))
41+
* }
42+
* }}}
943
*/
1044
class TestScheduler extends Scheduler {
1145
val asJava = new rx.concurrency.TestScheduler
@@ -33,44 +67,39 @@ object TestScheduler {
3367
}
3468

3569
private class UnitTest extends JUnitSuite {
36-
import org.mockito.Matchers._
37-
import org.mockito.Mockito._
38-
import org.junit.{Test, Before}
70+
import org.junit.Test
3971
import scala.concurrent.duration._
4072
import scala.language.postfixOps
4173
import rx.lang.scala.{Observable, Observer}
4274

43-
var scheduler: TestScheduler = null
44-
var observer: Observer[Long] = null
45-
var observer2: Observer[Long] = null
46-
47-
@Before def before() {
48-
scheduler = TestScheduler()
49-
observer = mock(classOf[rx.Observer[Long]])
50-
}
51-
5275
@Test def testInterval() {
53-
val w = Observable.interval(1 second, scheduler)
54-
val sub = w.subscribe(observer)
76+
import org.mockito.Matchers._
77+
import org.mockito.Mockito._
78+
79+
val scheduler = TestScheduler()
80+
val observer = mock(classOf[rx.Observer[Long]])
81+
82+
val o = Observable.interval(1 second, scheduler)
83+
val sub = o.subscribe(observer)
5584

56-
verify(observer, never()).onNext(0L)
57-
verify(observer, never()).onCompleted()
58-
verify(observer, never()).onError(any(classOf[Throwable]))
85+
verify(observer, never).onNext(0L)
86+
verify(observer, never).onCompleted()
87+
verify(observer, never).onError(any(classOf[Throwable]))
5988

6089
scheduler.advanceTimeTo(2 seconds)
6190

6291
val inOrdr = inOrder(observer);
6392
inOrdr.verify(observer, times(1)).onNext(0L)
6493
inOrdr.verify(observer, times(1)).onNext(1L)
65-
inOrdr.verify(observer, never()).onNext(2L)
66-
verify(observer, never()).onCompleted()
67-
verify(observer, never()).onError(any(classOf[Throwable]))
94+
inOrdr.verify(observer, never).onNext(2L)
95+
verify(observer, never).onCompleted()
96+
verify(observer, never).onError(any(classOf[Throwable]))
6897

6998
sub.unsubscribe();
7099
scheduler.advanceTimeTo(4 seconds)
71-
verify(observer, never()).onNext(2L)
100+
verify(observer, never).onNext(2L)
72101
verify(observer, times(1)).onCompleted()
73-
verify(observer, never()).onError(any(classOf[Throwable]))
102+
verify(observer, never).onError(any(classOf[Throwable]))
74103
}
75104
}
76105

0 commit comments

Comments
 (0)