30
30
import org .mockito .Mockito ;
31
31
32
32
import rx .Scheduler ;
33
+ import rx .Subscription ;
33
34
import rx .functions .Action0 ;
34
35
import rx .functions .Func1 ;
35
36
@@ -77,6 +78,48 @@ public void call() {
77
78
inOrder .verify (calledOp , never ()).call (anyLong ());
78
79
}
79
80
81
+ @ SuppressWarnings ("unchecked" )
82
+ // mocking is unchecked, unfortunately
83
+ @ Test
84
+ public final void testPeriodicSchedulingUnsubscription () {
85
+ final Func1 <Long , Void > calledOp = mock (Func1 .class );
86
+
87
+ final TestScheduler scheduler = new TestScheduler ();
88
+ final Scheduler .Worker inner = scheduler .createWorker ();
89
+
90
+ final Subscription subscription = inner .schedulePeriodically (new Action0 () {
91
+ @ Override
92
+ public void call () {
93
+ System .out .println (scheduler .now ());
94
+ calledOp .call (scheduler .now ());
95
+ }
96
+ }, 1 , 2 , TimeUnit .SECONDS );
97
+
98
+ verify (calledOp , never ()).call (anyLong ());
99
+
100
+ InOrder inOrder = Mockito .inOrder (calledOp );
101
+
102
+ scheduler .advanceTimeBy (999L , TimeUnit .MILLISECONDS );
103
+ inOrder .verify (calledOp , never ()).call (anyLong ());
104
+
105
+ scheduler .advanceTimeBy (1L , TimeUnit .MILLISECONDS );
106
+ inOrder .verify (calledOp , times (1 )).call (1000L );
107
+
108
+ scheduler .advanceTimeBy (1999L , TimeUnit .MILLISECONDS );
109
+ inOrder .verify (calledOp , never ()).call (3000L );
110
+
111
+ scheduler .advanceTimeBy (1L , TimeUnit .MILLISECONDS );
112
+ inOrder .verify (calledOp , times (1 )).call (3000L );
113
+
114
+ scheduler .advanceTimeBy (5L , TimeUnit .SECONDS );
115
+ inOrder .verify (calledOp , times (1 )).call (5000L );
116
+ inOrder .verify (calledOp , times (1 )).call (7000L );
117
+
118
+ subscription .unsubscribe ();
119
+ scheduler .advanceTimeBy (11L , TimeUnit .SECONDS );
120
+ inOrder .verify (calledOp , never ()).call (anyLong ());
121
+ }
122
+
80
123
@ Test
81
124
public final void testImmediateUnsubscribes () {
82
125
TestScheduler s = new TestScheduler ();
@@ -97,4 +140,24 @@ public void call() {
97
140
assertEquals (0 , counter .get ());
98
141
}
99
142
143
+ @ Test
144
+ public final void testImmediateUnsubscribes2 () {
145
+ TestScheduler s = new TestScheduler ();
146
+ final Scheduler .Worker inner = s .createWorker ();
147
+ final AtomicInteger counter = new AtomicInteger (0 );
148
+
149
+ final Subscription subscription = inner .schedule (new Action0 () {
150
+
151
+ @ Override
152
+ public void call () {
153
+ counter .incrementAndGet ();
154
+ System .out .println ("counter: " + counter .get ());
155
+ inner .schedule (this );
156
+ }
157
+
158
+ });
159
+ subscription .unsubscribe ();
160
+ assertEquals (0 , counter .get ());
161
+ }
162
+
100
163
}
0 commit comments