use of io.reactivex.Scheduler.Worker in project RxJava by ReactiveX.
the class AbstractSchedulerConcurrencyTests method testUnsubscribeRecursiveScheduleFromOutside.
@Test
public void testUnsubscribeRecursiveScheduleFromOutside() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(1);
final CountDownLatch unsubscribeLatch = new CountDownLatch(1);
final AtomicInteger counter = new AtomicInteger();
final Worker inner = getScheduler().createWorker();
try {
inner.schedule(new Runnable() {
@Override
public void run() {
inner.schedule(new Runnable() {
int i;
@Override
public void run() {
System.out.println("Run: " + i++);
if (i == 10) {
latch.countDown();
try {
// wait for unsubscribe to finish so we are not racing it
unsubscribeLatch.await();
} catch (InterruptedException e) {
// we expect the countDown if unsubscribe is not working
// or to be interrupted if unsubscribe is successful since
// the unsubscribe will interrupt it as it is calling Future.cancel(true)
// so we will ignore the stacktrace
}
}
counter.incrementAndGet();
inner.schedule(this);
}
});
}
});
latch.await();
inner.dispose();
unsubscribeLatch.countDown();
// let time pass to see if the scheduler is still doing work
Thread.sleep(200);
assertEquals(10, counter.get());
} finally {
inner.dispose();
}
}
use of io.reactivex.Scheduler.Worker in project RxJava by ReactiveX.
the class CachedThreadSchedulerTest method testCancelledTaskRetention.
@Test(timeout = 60000)
public void testCancelledTaskRetention() throws InterruptedException {
Worker w = Schedulers.io().createWorker();
try {
ExecutorSchedulerTest.testCancelledRetention(w, false);
} finally {
w.dispose();
}
w = Schedulers.io().createWorker();
try {
ExecutorSchedulerTest.testCancelledRetention(w, true);
} finally {
w.dispose();
}
}
use of io.reactivex.Scheduler.Worker in project RxJava by ReactiveX.
the class CachedThreadSchedulerTest method workerDisposed.
@Test
public void workerDisposed() {
Worker w = Schedulers.io().createWorker();
assertFalse(((Disposable) w).isDisposed());
w.dispose();
assertTrue(((Disposable) w).isDisposed());
}
use of io.reactivex.Scheduler.Worker in project RxJava by ReactiveX.
the class ComputationSchedulerTests method shutdownRejects.
@Test
public void shutdownRejects() {
final int[] calls = { 0 };
Runnable r = new Runnable() {
@Override
public void run() {
calls[0]++;
}
};
Scheduler s = new ComputationScheduler();
s.shutdown();
s.shutdown();
assertEquals(Disposables.disposed(), s.scheduleDirect(r));
assertEquals(Disposables.disposed(), s.scheduleDirect(r, 1, TimeUnit.SECONDS));
assertEquals(Disposables.disposed(), s.schedulePeriodicallyDirect(r, 1, 1, TimeUnit.SECONDS));
Worker w = s.createWorker();
w.dispose();
assertTrue(w.isDisposed());
assertEquals(Disposables.disposed(), w.schedule(r));
assertEquals(Disposables.disposed(), w.schedule(r, 1, TimeUnit.SECONDS));
assertEquals(Disposables.disposed(), w.schedulePeriodically(r, 1, 1, TimeUnit.SECONDS));
assertEquals(0, calls[0]);
}
use of io.reactivex.Scheduler.Worker in project RxJava by ReactiveX.
the class TestSchedulerTest method workerDisposed.
@Test
public void workerDisposed() {
TestScheduler scheduler = new TestScheduler();
Worker w = scheduler.createWorker();
w.dispose();
assertTrue(w.isDisposed());
}
Aggregations