Skip to content

Commit

Permalink
Merge pull request #28 from technoir42/fix_callback_npe
Browse files Browse the repository at this point in the history
Don't crash in stopWork if registerIdleTransitionCallback hasn't been called yet
  • Loading branch information
jrodbx authored May 19, 2020
2 parents 1b31ca5 + 62bd790 commit a3fed12
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.squareup.rx.idler;

import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
Expand All @@ -16,7 +17,7 @@ final class DelegatingIdlingResourceScheduler extends IdlingResourceScheduler {
private final Scheduler delegate;
private final String name;
private final AtomicInteger work = new AtomicInteger();
private ResourceCallback callback;
@Nullable private ResourceCallback callback;

DelegatingIdlingResourceScheduler(Scheduler delegate, String name) {
this.delegate = delegate;
Expand Down Expand Up @@ -96,7 +97,7 @@ void startWork() {
}

void stopWork() {
if (work.decrementAndGet() == 0) {
if (work.decrementAndGet() == 0 && callback != null) {
callback.onTransitionToIdle();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,13 @@ public final class DelegatingIdlingResourceSchedulerTest {
assertIdle(0);
}

@Test public void finishingWorkWithoutRegisteredCallbackDoesNotCrash() {
IdlingResourceScheduler scheduler = RxIdler.wrap(delegate, "Bob");
Scheduler.Worker worker = scheduler.createWorker();
worker.schedule(new CountingAction());
delegate.triggerActions();
}

private void assertBusy() {
assertFalse(scheduler.isIdleNow());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.squareup.rx2.idler;

import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import io.reactivex.Scheduler;
import io.reactivex.disposables.CompositeDisposable;
Expand All @@ -15,7 +16,7 @@ final class DelegatingIdlingResourceScheduler extends IdlingResourceScheduler {
private final Scheduler delegate;
private final String name;
private final AtomicInteger work = new AtomicInteger();
private ResourceCallback callback;
@Nullable private ResourceCallback callback;

DelegatingIdlingResourceScheduler(Scheduler delegate, String name) {
this.delegate = delegate;
Expand Down Expand Up @@ -92,7 +93,7 @@ void startWork() {
}

void stopWork() {
if (work.decrementAndGet() == 0) {
if (work.decrementAndGet() == 0 && callback != null) {
callback.onTransitionToIdle();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,13 @@ public final class DelegatingIdlingResourceSchedulerTest {
assertIdle(0);
}

@Test public void finishingWorkWithoutRegisteredCallbackDoesNotCrash() {
IdlingResourceScheduler scheduler = Rx2Idler.wrap(delegate, "Bob");
Scheduler.Worker worker = scheduler.createWorker();
worker.schedule(new CountingRunnable());
delegate.triggerActions();
}

private void assertBusy() {
assertFalse(scheduler.isIdleNow());
}
Expand Down

0 comments on commit a3fed12

Please sign in to comment.