Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -397,11 +397,12 @@ public void onChange(RealmResults<DynamicRealmObject> object) {
});
}

// Initialize a Dynamic Realm used by the *Async tests.
// Initialize a Dynamic Realm used by the *Async tests and keep it ref in the looperThread.
private DynamicRealm initializeDynamicRealm() {
RealmConfiguration defaultConfig = looperThread.realmConfiguration;
final DynamicRealm dynamicRealm = DynamicRealm.getInstance(defaultConfig);
populateTestRealm(dynamicRealm, 10);
looperThread.keepStrongReference.add(dynamicRealm);
return dynamicRealm;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1020,6 +1020,7 @@ public void realmResultsListenerAddedAfterCommit() {
realm.createObject(AllTypes.class);
realm.commitTransaction();

looperThread.keepStrongReference.add(results);
results.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -1227,6 +1228,7 @@ public void realmListener_localChangeShouldBeSendAtFrontOfTheQueueWithLoadedAsyn

assertEquals(1, results.size());

looperThread.keepStrongReference.add(asyncResults);
asyncResults.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> element) {
Expand Down Expand Up @@ -1325,6 +1327,7 @@ public void w(String message) {
realm.commitTransaction();

RealmResults<AllTypes> results = realm.where(AllTypes.class).findAllAsync();
looperThread.keepStrongReference.add(results);
results.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> element) {
Expand All @@ -1344,6 +1347,7 @@ public void accessingSyncRealmResultInsideAsyncResultListener() {
final RealmResults<AllTypes> syncResults = realm.where(AllTypes.class).findAll();

RealmResults<AllTypes> results = realm.where(AllTypes.class).findAllAsync();
looperThread.keepStrongReference.add(results);
results.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> results) {
Expand Down Expand Up @@ -1380,6 +1384,8 @@ public void accessingSyncRealmResultsInsideAnotherResultListener() {
final Realm realm = looperThread.realm;
final RealmResults<AllTypes> syncResults1 = realm.where(AllTypes.class).findAll();
final RealmResults<AllTypes> syncResults2 = realm.where(AllTypes.class).findAll();

looperThread.keepStrongReference.add(syncResults1);
syncResults1.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> element) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ public void findAllAsync() throws Throwable {
assertFalse(results.isLoaded());
assertEquals(0, results.size());

looperThread.keepStrongReference.add(results);
results.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -437,6 +438,7 @@ public void findAllAsync_forceLoad() throws Throwable {
.between("columnLong", 0, 4)
.findAllAsync();

looperThread.keepStrongReference.add(realmResults);
// notification should be called as well
realmResults.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
Expand Down Expand Up @@ -512,6 +514,7 @@ public boolean onInterceptInMessage(int what) {
assertEquals(0, realmResults.size());

// 6. Callback triggered after retry has completed
looperThread.keepStrongReference.add(realmResults);
realmResults.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -594,6 +597,9 @@ public void run() {
}
};

looperThread.keepStrongReference.add(realmResults1);
looperThread.keepStrongReference.add(realmResults2);

realmResults1.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -675,6 +681,8 @@ public boolean onInterceptInMessage(int what) {
assertFalse(realmResults.isLoaded());
assertEquals(0, realmResults.size());

looperThread.keepStrongReference.add(realmResults);

// Add change listener that should only be called once
realmResults.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
Expand Down Expand Up @@ -772,6 +780,9 @@ public void run() {
}
};

looperThread.keepStrongReference.add(realmResults1);
looperThread.keepStrongReference.add(realmResults2);

realmResults1.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -809,7 +820,7 @@ public void findFirstAsync() {
final AllTypes asyncObj = realm.where(AllTypes.class).findFirstAsync();
assertFalse(asyncObj.isValid());
assertFalse(asyncObj.isLoaded());

looperThread.keepStrongReference.add(asyncObj);
asyncObj.addChangeListener(new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand All @@ -825,6 +836,7 @@ public void onChange(AllTypes object) {
public void findFirstAsync_initalEmptyRow() throws Throwable {
Realm realm = looperThread.realm;
final AllTypes firstAsync = realm.where(AllTypes.class).findFirstAsync();
looperThread.keepStrongReference.add(firstAsync);
firstAsync.addChangeListener(new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand Down Expand Up @@ -859,6 +871,7 @@ public void findFirstAsync_updatedIfsyncRealmObjectIsUpdated() throws Throwable
assertEquals(0, firstAsync.getColumnLong());
assertEquals("test data 0", firstAsync.getColumnString());

looperThread.keepStrongReference.add(firstAsync);
firstAsync.addChangeListener(new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand All @@ -883,6 +896,7 @@ public void findFirstAsync_withNotification() throws Throwable {
.between("columnLong", 4, 9)
.findFirstAsync();

looperThread.keepStrongReference.add(realmResults);
realmResults.addChangeListener(new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand Down Expand Up @@ -976,6 +990,7 @@ public boolean onInterceptInMessage(int what) {
}

// Add change listener that should only be called once after the retry completed.
looperThread.keepStrongReference.add(realmResults);
realmResults.addChangeListener(new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand Down Expand Up @@ -1006,6 +1021,7 @@ public void findAllSortedAsync() throws Throwable {
assertFalse(results.isLoaded());
assertEquals(0, results.size());

looperThread.keepStrongReference.add(results);
results.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -1068,6 +1084,7 @@ public boolean onInterceptInMessage(int what) {
// 4. Intercepting the query completed event the first time will
// cause a commit that should cause the findAllSortedAsync to be re-run.
// This change listener should only be called with the final result.
looperThread.keepStrongReference.add(realmResults);
realmResults.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -1161,6 +1178,9 @@ public void run() {
}
};

looperThread.keepStrongReference.add(realmResults1);
looperThread.keepStrongReference.add(realmResults2);

realmResults1.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -1302,6 +1322,9 @@ public void run() {
}
};

looperThread.keepStrongReference.add(realmResults1);
looperThread.keepStrongReference.add(realmResults2);

realmResults1.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -1558,6 +1581,10 @@ public void run() {
}
};

looperThread.keepStrongReference.add(distinctBool);
looperThread.keepStrongReference.add(distinctLong);
looperThread.keepStrongReference.add(distinctDate);
looperThread.keepStrongReference.add(distinctString);
distinctBool.addChangeListener(new RealmChangeListener<RealmResults<AnnotationIndexTypes>>() {
@Override
public void onChange(RealmResults<AnnotationIndexTypes> object) {
Expand Down Expand Up @@ -1767,6 +1794,7 @@ public void queryingLinkHandover() throws Throwable {
final Realm realm = looperThread.realm;

final RealmResults<Dog> allAsync = realm.where(Dog.class).equalTo("owner.name", "kiba").findAllAsync();
looperThread.keepStrongReference.add(allAsync);
allAsync.addChangeListener(new RealmChangeListener<RealmResults<Dog>>() {
@Override
public void onChange(RealmResults<Dog> object) {
Expand Down Expand Up @@ -1826,6 +1854,7 @@ public void testFindFirstUsesCallerThreadVersion() throws Throwable {
Realm.asyncTaskExecutor.pause();

final AllTypes firstAsync = looperThread.realm.where(AllTypes.class).findFirstAsync();
looperThread.keepStrongReference.add(firstAsync);
firstAsync.addChangeListener(new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand Down Expand Up @@ -1959,6 +1988,7 @@ public void badVersion_syncTransaction() throws NoSuchFieldException, IllegalAcc

// 1. Make sure that async query is not started
final RealmResults<AllTypes> result = realm.where(AllTypes.class).findAllSortedAsync(AllTypes.FIELD_STRING);
looperThread.keepStrongReference.add(result);
result.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ public void onChange(DynamicRealm dynRealm) {
public void returnedRealmResultsIsNotNull() {
Realm realm = looperThread.realm;
RealmResults<Cat> cats = realm.where(Cat.class).findAll();
looperThread.keepStrongReference.add(cats);
cats.addChangeListener(new RealmChangeListener<RealmResults<Cat>>() {
@Override
public void onChange(RealmResults<Cat> result) {
Expand All @@ -116,6 +117,7 @@ public void onChange(RealmResults<Cat> result) {
public void returnedRealmResultsOfModelIsNotNull() {
Realm realm = looperThread.realm;
RealmResults<AllTypesRealmModel> alltypes = realm.where(AllTypesRealmModel.class).findAll();
looperThread.keepStrongReference.add(alltypes);
alltypes.addChangeListener(new RealmChangeListener<RealmResults<AllTypesRealmModel>>() {
@Override
public void onChange(RealmResults<AllTypesRealmModel> result) {
Expand All @@ -139,6 +141,7 @@ public void returnedRealmObjectIsNotNull() {
Cat cat = looperThread.realm.createObject(Cat.class);
realm.commitTransaction();

looperThread.keepStrongReference.add(cat);
cat.addChangeListener(new RealmChangeListener<Cat>() {
@Override
public void onChange(Cat object) {
Expand All @@ -160,6 +163,7 @@ public void returnedRealmModelIsNotNull() {
AllTypesRealmModel model = realm.createObject(AllTypesRealmModel.class);
realm.commitTransaction();

looperThread.keepStrongReference.add(model);
RealmObject.addChangeListener(model, new RealmChangeListener<AllTypesRealmModel>() {
@Override
public void onChange(AllTypesRealmModel object) {
Expand All @@ -184,6 +188,7 @@ public void returnedDynamicRealmObjectIsNotNull() {
DynamicRealmObject allTypes = dynamicRealm.createObject(AllTypes.CLASS_NAME);
dynamicRealm.commitTransaction();

looperThread.keepStrongReference.add(allTypes);
allTypes.addChangeListener(new RealmChangeListener<DynamicRealmObject>() {
@Override
public void onChange(DynamicRealmObject object) {
Expand All @@ -205,6 +210,7 @@ public void returnedDynamicRealmResultsIsNotNull() {

final DynamicRealm dynamicRealm = DynamicRealm.getInstance(looperThread.realmConfiguration);
RealmResults<DynamicRealmObject> all = dynamicRealm.where(AllTypes.CLASS_NAME).findAll();
looperThread.keepStrongReference.add(all);
all.addChangeListener(new RealmChangeListener<RealmResults<DynamicRealmObject>>() {
@Override
public void onChange(RealmResults<DynamicRealmObject> result) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ public void async_query() {
populateTestRealm(realm, TEST_DATA_SIZE);

final RealmResults<AllTypesRealmModel> allTypesRealmModels = realm.where(AllTypesRealmModel.class).distinctAsync(AllTypesRealmModel.FIELD_STRING);
looperThread.keepStrongReference.add(allTypesRealmModels);
allTypesRealmModels.addChangeListener(new RealmChangeListener<RealmResults<AllTypesRealmModel>>() {
@Override
public void onChange(RealmResults<AllTypesRealmModel> object) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1716,6 +1716,7 @@ public void addChangeListener_returnedObjectOfCopyToRealmOrUpdate() {
allTypesPrimaryKey = realm.copyToRealmOrUpdate(allTypesPrimaryKey);
realm.commitTransaction();

looperThread.keepStrongReference.add(allTypesPrimaryKey);
allTypesPrimaryKey.addChangeListener(new RealmChangeListener<AllTypesPrimaryKey>() {
@Override
public void onChange(AllTypesPrimaryKey element) {
Expand Down Expand Up @@ -1793,6 +1794,7 @@ public void addChangeListener_checkHandlerRealmObjectsWhenCallingOnAsyncObject()
realm.handlerController.realmObjects;

final AllTypesPrimaryKey allTypesPrimaryKey = realm.where(AllTypesPrimaryKey.class).findFirstAsync();
looperThread.keepStrongReference.add(allTypesPrimaryKey);
allTypesPrimaryKey.addChangeListener(new RealmChangeListener<AllTypesPrimaryKey>() {
@Override
public void onChange(AllTypesPrimaryKey element) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2311,6 +2311,10 @@ public void run() {
}
};

looperThread.keepStrongReference.add(distinctBool);
looperThread.keepStrongReference.add(distinctLong);
looperThread.keepStrongReference.add(distinctDate);
looperThread.keepStrongReference.add(distinctString);
distinctBool.addChangeListener(new RealmChangeListener<RealmResults<AnnotationIndexTypes>>() {
@Override
public void onChange(RealmResults<AnnotationIndexTypes> object) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ public void distinct_invalidTypesLinkedFields() {
@Test
@RunTestInLooperThread
public void changeListener_syncIfNeeded_updatedFromOtherThread() {
final Realm realm = Realm.getInstance(looperThread.createConfiguration("Foo"));
final Realm realm = looperThread.realm;
populateTestRealm(realm, 10);

final RealmResults<AllTypes> results = realm.where(AllTypes.class).lessThan(AllTypes.FIELD_LONG, 10).findAll();
Expand Down Expand Up @@ -450,6 +450,10 @@ public void run() {
}
};

looperThread.keepStrongReference.add(distinctBool);
looperThread.keepStrongReference.add(distinctLong);
looperThread.keepStrongReference.add(distinctDate);
looperThread.keepStrongReference.add(distinctString);
distinctBool.addChangeListener(new RealmChangeListener<RealmResults<AnnotationIndexTypes>>() {
@Override
public void onChange(RealmResults<AnnotationIndexTypes> object) {
Expand Down Expand Up @@ -512,6 +516,8 @@ public void run() {
}
};

looperThread.keepStrongReference.add(distinctDate);
looperThread.keepStrongReference.add(distinctString);
distinctDate.addChangeListener(new RealmChangeListener<RealmResults<AnnotationIndexTypes>>() {
@Override
public void onChange(RealmResults<AnnotationIndexTypes> object) {
Expand Down Expand Up @@ -856,6 +862,7 @@ public void addChangeListener() {
Realm realm = looperThread.realm;
RealmResults<AllTypes> collection = realm.where(AllTypes.class).findAll();

looperThread.keepStrongReference.add(collection);
collection.addChangeListener(new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down Expand Up @@ -900,6 +907,7 @@ public void run() {
});

// Adding it twice will be ignored, so removing it will not cause the listener to be triggered.
looperThread.keepStrongReference.add(collection);
collection.addChangeListener(listener);
collection.addChangeListener(listener);
collection.removeChangeListener(listener);
Expand Down Expand Up @@ -933,6 +941,7 @@ public void onChange(RealmResults<AllTypes> object) {
}
};

looperThread.keepStrongReference.add(collection);
collection.addChangeListener(listener);
collection.removeChangeListener(listener);

Expand Down Expand Up @@ -983,6 +992,7 @@ public void onChange(RealmResults<AllTypes> object) {
}
};

looperThread.keepStrongReference.add(collection);
collection.addChangeListener(listenerA);
collection.addChangeListener(listenerB);
collection.removeChangeListeners();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2799,7 +2799,7 @@ public void execute(Realm realm) {
@Test
@RunTestInLooperThread
public void closeRealmInChangeListenerWhenThereIsListenerOnEmptyObject() {
final Realm realm = Realm.getInstance(looperThread.createConfiguration());
final Realm realm = looperThread.realm;
final RealmChangeListener<AllTypes> dummyListener = new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand Down Expand Up @@ -2840,7 +2840,7 @@ public void execute(Realm realm) {
@Test
@RunTestInLooperThread
public void closeRealmInChangeListenerWhenThereIsListenerOnObject() {
final Realm realm = Realm.getInstance(looperThread.createConfiguration());
final Realm realm = looperThread.realm;
final RealmChangeListener<AllTypes> dummyListener = new RealmChangeListener<AllTypes>() {
@Override
public void onChange(AllTypes object) {
Expand Down Expand Up @@ -2885,7 +2885,7 @@ public void execute(Realm realm) {
@Test
@RunTestInLooperThread
public void closeRealmInChangeListenerWhenThereIsListenerOnResults() {
final Realm realm = Realm.getInstance(looperThread.createConfiguration());
final Realm realm = looperThread.realm;
final RealmChangeListener<RealmResults<AllTypes>> dummyListener = new RealmChangeListener<RealmResults<AllTypes>>() {
@Override
public void onChange(RealmResults<AllTypes> object) {
Expand Down
Loading