Skip to content
This repository was archived by the owner on Mar 10, 2022. It is now read-only.

Commit a9ebbae

Browse files
author
Hideki Itakura
authored
Merge pull request #1148 from couchbase/feature/2.0-obs
Fixed #1108 - 2.0 Event Notification
2 parents 956afa5 + 2615cfe commit a9ebbae

File tree

7 files changed

+475
-45
lines changed

7 files changed

+475
-45
lines changed
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package com.couchbase.lite;
2+
3+
import org.junit.After;
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
7+
import java.util.Locale;
8+
import java.util.concurrent.CountDownLatch;
9+
import java.util.concurrent.TimeUnit;
10+
11+
import static android.content.ContentValues.TAG;
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertFalse;
14+
import static org.junit.Assert.assertNotNull;
15+
import static org.junit.Assert.assertTrue;
16+
17+
public class NotificationTest extends BaseTest {
18+
@Before
19+
public void setUp() {
20+
super.setUp();
21+
}
22+
23+
@After
24+
public void tearDown() {
25+
super.tearDown();
26+
}
27+
28+
@Test
29+
public void testDatabaseNotification() throws InterruptedException {
30+
final CountDownLatch latch = new CountDownLatch(1);
31+
db.addChangeListener(new DatabaseChangeListener() {
32+
@Override
33+
public void changed(DatabaseChange change) {
34+
Log.e(TAG, "DatabaseChangeListener.changed() change -> " + change);
35+
assertNotNull(change);
36+
assertNotNull(change.getDocIDs());
37+
assertTrue(change.getLastSequence() > 0);
38+
assertFalse(change.isExternal());
39+
latch.countDown();
40+
}
41+
});
42+
db.inBatch(new Runnable() {
43+
@Override
44+
public void run() {
45+
for(int i = 0; i < 10; i++){
46+
Document doc = db.getDocument(String.format(Locale.ENGLISH, "doc-%d", i));
47+
doc.set("type", "demo");
48+
doc.save();
49+
}
50+
}
51+
});
52+
assertTrue(latch.await(5, TimeUnit.SECONDS));
53+
}
54+
55+
@Test
56+
public void testDocumentNotification() throws InterruptedException {
57+
Document docA = db.getDocument("A");
58+
Document docB = db.getDocument("B");
59+
60+
final CountDownLatch latch1 = new CountDownLatch(1);
61+
DocumentChangeListener listener1 = new DocumentChangeListener() {
62+
@Override
63+
public void changed(DocumentChange change) {
64+
assertNotNull(change);
65+
assertEquals("A", change.getDocID());
66+
assertTrue(change.getSequence() > 0);
67+
assertEquals(1, latch1.getCount());
68+
latch1.countDown();
69+
}
70+
};
71+
db.addChangeListener("A", listener1);
72+
docB.set("thewronganswer", 18);
73+
docB.save();
74+
docA.set("theanswer", 18);
75+
docA.save();
76+
assertTrue(latch1.await(5, TimeUnit.SECONDS));
77+
db.removeChangeListener("A", listener1);
78+
79+
final CountDownLatch latch2 = new CountDownLatch(1);
80+
DocumentChangeListener listener2 = new DocumentChangeListener() {
81+
@Override
82+
public void changed(DocumentChange change) {
83+
assertNotNull(change);
84+
assertEquals("A", change.getDocID());
85+
assertTrue(change.getSequence() > 0);
86+
assertEquals(1, latch2.getCount());
87+
latch2.countDown();
88+
}
89+
};
90+
db.addChangeListener("A", listener2);
91+
docA.set("thewronganswer", 18);
92+
docA.save();
93+
assertTrue(latch2.await(5, TimeUnit.SECONDS));
94+
db.removeChangeListener("A", listener1);
95+
}
96+
97+
@Test
98+
public void testExternalChanges() throws InterruptedException {
99+
final Database db2 = db.copy();
100+
assertNotNull(db2);
101+
try {
102+
103+
final CountDownLatch latchDB = new CountDownLatch(1);
104+
db2.addChangeListener(new DatabaseChangeListener() {
105+
@Override
106+
public void changed(DatabaseChange change) {
107+
assertNotNull(change);
108+
assertEquals(10, change.docIDs.size());
109+
assertTrue(change.getLastSequence() > 0);
110+
assertTrue(change.isExternal());
111+
assertEquals(1, latchDB.getCount());
112+
latchDB.countDown();
113+
}
114+
});
115+
116+
final CountDownLatch latchDoc = new CountDownLatch(1);
117+
db2.addChangeListener("doc-6", new DocumentChangeListener() {
118+
@Override
119+
public void changed(DocumentChange change) {
120+
assertNotNull(change);
121+
assertEquals("doc-6", change.getDocID());
122+
assertTrue(change.getSequence() > 0);
123+
Document doc = db2.getDocument(change.getDocID());
124+
assertEquals("demo", doc.get("type"));
125+
assertEquals(1, latchDoc.getCount());
126+
latchDoc.countDown();
127+
}
128+
});
129+
130+
db.inBatch(new Runnable() {
131+
@Override
132+
public void run() {
133+
for (int i = 0; i < 10; i++) {
134+
Document doc = db.getDocument(String.format(Locale.ENGLISH, "doc-%d", i));
135+
doc.set("type", "demo");
136+
doc.save();
137+
}
138+
}
139+
});
140+
141+
assertTrue(latchDB.await(5, TimeUnit.SECONDS));
142+
assertTrue(latchDoc.await(5, TimeUnit.SECONDS));
143+
} finally {
144+
db2.close();
145+
}
146+
}
147+
}

libs/couchbase-lite-core

Submodule couchbase-lite-core updated 103 files

0 commit comments

Comments
 (0)