|
20 | 20 | import static org.mockito.Matchers.any;
|
21 | 21 | import static org.mockito.Matchers.anyInt;
|
22 | 22 | import static org.mockito.Matchers.anyString;
|
23 |
| -import static org.mockito.Mockito.mock; |
24 |
| -import static org.mockito.Mockito.never; |
25 |
| -import static org.mockito.Mockito.times; |
26 |
| -import static org.mockito.Mockito.verify; |
| 23 | +import static org.mockito.Mockito.*; |
27 | 24 |
|
28 | 25 | import java.util.ArrayList;
|
29 | 26 | import java.util.Arrays;
|
30 | 27 | import java.util.List;
|
| 28 | +import java.util.concurrent.atomic.AtomicBoolean; |
31 | 29 | import java.util.concurrent.atomic.AtomicInteger;
|
| 30 | +import java.util.concurrent.atomic.AtomicReference; |
32 | 31 |
|
33 | 32 | import org.junit.Before;
|
34 | 33 | import org.junit.Test;
|
35 | 34 | import org.mockito.MockitoAnnotations;
|
36 | 35 |
|
37 | 36 | import rx.Observable;
|
38 | 37 | import rx.Observer;
|
| 38 | +import rx.Producer; |
39 | 39 | import rx.Subscriber;
|
40 | 40 | import rx.functions.Action2;
|
41 | 41 | import rx.functions.Func0;
|
@@ -312,4 +312,52 @@ public Integer call(Integer t1, Integer t2) {
|
312 | 312 | subscriber.assertTerminalEvent();
|
313 | 313 | subscriber.assertNoErrors();
|
314 | 314 | }
|
| 315 | + |
| 316 | + @Test |
| 317 | + public void testScanShouldNotRequestZero() { |
| 318 | + final AtomicReference<Producer> producer = new AtomicReference<Producer>(); |
| 319 | + Observable<Integer> o = Observable.create(new Observable.OnSubscribe<Integer>() { |
| 320 | + @Override |
| 321 | + public void call(final Subscriber subscriber) { |
| 322 | + Producer p = spy(new Producer() { |
| 323 | + |
| 324 | + private AtomicBoolean requested = new AtomicBoolean(false); |
| 325 | + |
| 326 | + @Override |
| 327 | + public void request(long n) { |
| 328 | + if (requested.compareAndSet(false, true)) { |
| 329 | + subscriber.onNext(1); |
| 330 | + } else { |
| 331 | + subscriber.onCompleted(); |
| 332 | + } |
| 333 | + } |
| 334 | + }); |
| 335 | + producer.set(p); |
| 336 | + subscriber.setProducer(p); |
| 337 | + } |
| 338 | + }).scan(100, new Func2<Integer, Integer, Integer>() { |
| 339 | + |
| 340 | + @Override |
| 341 | + public Integer call(Integer t1, Integer t2) { |
| 342 | + return t1 + t2; |
| 343 | + } |
| 344 | + |
| 345 | + }); |
| 346 | + |
| 347 | + o.subscribe(new TestSubscriber<Integer>() { |
| 348 | + |
| 349 | + @Override |
| 350 | + public void onStart() { |
| 351 | + request(1); |
| 352 | + } |
| 353 | + |
| 354 | + @Override |
| 355 | + public void onNext(Integer integer) { |
| 356 | + request(1); |
| 357 | + } |
| 358 | + }); |
| 359 | + |
| 360 | + verify(producer.get(), never()).request(0); |
| 361 | + verify(producer.get(), times(2)).request(1); |
| 362 | + } |
315 | 363 | }
|
0 commit comments