public void testTwoObjectClassesChanged_catchAllObserver(boolean weak) { DataSubscription subscription = subscribe(weak, null); store.runInTx(new Runnable() { @Override public void run() { // Dummy TX, still will be committed getTestEntityBox().count(); } }); assertEquals(0, classesWithChanges.size()); runTxAndWaitForObservers(2); assertEquals(2, classesWithChanges.size()); assertTrue(classesWithChanges.contains(TestEntity.class)); assertTrue(classesWithChanges.contains(TestEntityMinimal.class)); classesWithChanges.clear(); subscription.cancel(); store.runInTx(txRunnable); assertNoStaleObservers(); }
public void testTwoObjectClassesChanged_oneClassObserver(boolean weak) throws InterruptedException { DataSubscription subscription = subscribe(weak, TestEntityMinimal.class); runTxAndWaitForObservers(1); assertEquals(1, classesWithChanges.size()); assertEquals(classesWithChanges.get(0), TestEntityMinimal.class); classesWithChanges.clear(); putTestEntities(1); assertEquals(0, classesWithChanges.size()); // Adding twice should not trigger notification twice DataSubscription subscription2 = subscribe(weak, TestEntityMinimal.class); Box<TestEntityMinimal> boxMini = store.boxFor(TestEntityMinimal.class); observerLatch = new CountDownLatch(1); boxMini.put(new TestEntityMinimal(), new TestEntityMinimal()); assertLatchCountedDown(observerLatch, 5); Thread.sleep(20); assertEquals(1, classesWithChanges.size()); classesWithChanges.clear(); subscription.cancel(); store.runInTx(txRunnable); assertNoStaleObservers(); }
@Test public void testScheduler() throws InterruptedException { TestScheduler scheduler = new TestScheduler(); store.subscribe().onlyChanges().on(scheduler).observer(objectClassObserver); runTxAndWaitForObservers(2); assertEquals(2, scheduler.counter()); assertEquals(2, classesWithChanges.size()); }