Skip to content

Commit 9e40a2a

Browse files
committed
Replicate removeObserver NPE of GCed WeakReference
Add test that reproduces a NullPointerException bug with the current implementation of OSObservable.removeObserver. We will address the bug in the following commit to get the test to pass.
1 parent 7b87a81 commit 9e40a2a

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
import org.robolectric.shadows.ShadowConnectivityManager;
114114
import org.robolectric.shadows.ShadowLog;
115115

116+
import java.lang.ref.WeakReference;
116117
import java.lang.reflect.Field;
117118
import java.util.ArrayList;
118119
import java.util.Arrays;
@@ -136,6 +137,7 @@
136137
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_setTime;
137138
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_setTrackerFactory;
138139
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_taskQueueWaitingForInit;
140+
import static com.onesignal.OneSignalPackagePrivateHelper.OSObservable;
139141
import static com.onesignal.ShadowOneSignalRestClient.EMAIL_USER_ID;
140142
import static com.onesignal.ShadowOneSignalRestClient.PUSH_USER_ID;
141143
import static com.onesignal.ShadowOneSignalRestClient.REST_METHOD;
@@ -3455,6 +3457,15 @@ public void shouldNotFireSMSSubscriptionObserverOnAppRestart() throws Exception
34553457
assertNull(lastSMSSubscriptionStateChanges);
34563458
}
34573459

3460+
@Test
3461+
public void shouldNotThrowWhenRemovingWeakReferenceObservableThatHasBeenGarbageCollected() {
3462+
OSObservable<Object, Object> observer = new OSObservable<>("", false);
3463+
WeakReference<Object> weakObject = new WeakReference<>(new Object());
3464+
observer.addObserver(weakObject.get());
3465+
Runtime.getRuntime().gc(); // Force cleaning up WeakReference above
3466+
observer.removeObserver(weakObject.get());
3467+
}
3468+
34583469
@Test
34593470
public void shouldGetCorrectCurrentEmailSubscriptionState() throws Exception {
34603471
OneSignalInit();

0 commit comments

Comments
 (0)