|
28 | 28 |
|
29 | 29 | import static org.hamcrest.CoreMatchers.instanceOf;
|
30 | 30 | import static org.junit.Assert.assertEquals;
|
| 31 | +import static org.junit.Assert.assertFalse; |
31 | 32 | import static org.junit.Assert.assertNotSame;
|
32 | 33 | import static org.junit.Assert.assertNull;
|
33 | 34 | import static org.junit.Assert.assertSame;
|
@@ -105,73 +106,56 @@ public void testSetUser() throws ParseException {
|
105 | 106 | }
|
106 | 107 |
|
107 | 108 | @Test
|
108 |
| - public void testQueriesOnlyRunOneNetworkConnection() throws ParseException { |
109 |
| - TestQueryController controller = new TestQueryController(); |
110 |
| - ParseCorePlugins.getInstance().registerQueryController(controller); |
| 109 | + public void testMultipleQueries() throws ParseException { |
| 110 | + TestQueryController controller1 = new TestQueryController(); |
| 111 | + TestQueryController controller2 = new TestQueryController(); |
111 | 112 |
|
112 |
| - TaskCompletionSource<Void> tcs = new TaskCompletionSource(); |
113 |
| - controller.await(tcs.getTask()); |
| 113 | + TaskCompletionSource<Void> tcs1 = new TaskCompletionSource<>(); |
| 114 | + TaskCompletionSource<Void> tcs2 = new TaskCompletionSource<>(); |
| 115 | + controller1.await(tcs1.getTask()); |
| 116 | + controller2.await(tcs2.getTask()); |
114 | 117 |
|
115 | 118 | ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject");
|
116 | 119 | query.setUser(new ParseUser());
|
117 |
| - Task<Void> task = query.findInBackground().makeVoid(); |
118 | 120 |
|
119 |
| - try { |
120 |
| - query.find(); |
121 |
| - fail("Should've thrown an exception."); |
122 |
| - } catch (RuntimeException e) { |
123 |
| - // do nothing |
124 |
| - } |
| 121 | + ParseCorePlugins.getInstance().registerQueryController(controller1); |
| 122 | + query.findInBackground(); |
| 123 | + assertTrue(query.isRunning()); |
125 | 124 |
|
126 |
| - try { |
127 |
| - query.findInBackground(new FindCallback<ParseObject>() { |
128 |
| - @Override |
129 |
| - public void done(List<ParseObject> objects, ParseException e) { |
130 |
| - } |
131 |
| - }); |
132 |
| - fail("Should've thrown an exception."); |
133 |
| - } catch (RuntimeException e) { |
134 |
| - // do nothing |
135 |
| - } |
| 125 | + ParseCorePlugins.getInstance().reset(); |
| 126 | + ParseCorePlugins.getInstance().registerQueryController(controller2); |
| 127 | + query.countInBackground(); |
| 128 | + assertTrue(query.isRunning()); |
136 | 129 |
|
137 |
| - try { |
138 |
| - query.count(); |
139 |
| - fail("Should've thrown an exception."); |
140 |
| - } catch (RuntimeException e) { |
141 |
| - // do nothing |
142 |
| - } |
| 130 | + // Stop the first operation. |
| 131 | + tcs1.setResult(null); |
| 132 | + assertTrue(query.isRunning()); |
143 | 133 |
|
144 |
| - try { |
145 |
| - query.countInBackground(new CountCallback() { |
146 |
| - @Override |
147 |
| - public void done(int count, ParseException e) { |
148 |
| - } |
149 |
| - }); |
150 |
| - fail("Should've thrown an exception."); |
151 |
| - } catch (RuntimeException e) { |
152 |
| - // do nothing |
153 |
| - } |
| 134 | + // Stop the second. |
| 135 | + tcs2.setResult(null); |
| 136 | + assertFalse(query.isRunning()); |
| 137 | + } |
154 | 138 |
|
155 |
| - try { |
156 |
| - query.get("abc"); |
157 |
| - fail("Should've thrown an exception."); |
158 |
| - } catch (RuntimeException e) { |
159 |
| - // do nothing |
160 |
| - } |
| 139 | + @Test |
| 140 | + public void testMultipleQueriesWithInflightChanges() throws ParseException { |
| 141 | + Parse.enableLocalDatastore(null); |
| 142 | + TestQueryController controller = new TestQueryController(); |
| 143 | + TaskCompletionSource<Void> tcs = new TaskCompletionSource<>(); |
| 144 | + controller.await(tcs.getTask()); |
161 | 145 |
|
162 |
| - try { |
163 |
| - query.getInBackground("abc", new GetCallback<ParseObject>() { |
164 |
| - @Override |
165 |
| - public void done(ParseObject object, ParseException e) { |
166 |
| - } |
167 |
| - }); |
168 |
| - fail("Should've thrown an exception."); |
169 |
| - } catch (RuntimeException e) { |
170 |
| - // do nothing |
171 |
| - } |
| 146 | + ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject"); |
| 147 | + query.setUser(new ParseUser()); |
172 | 148 |
|
173 |
| - tcs.setResult(null); |
174 |
| - ParseTaskUtils.wait(task); |
| 149 | + ParseCorePlugins.getInstance().registerQueryController(controller); |
| 150 | + List<Task<Void>> tasks = Arrays.asList( |
| 151 | + query.fromNetwork().findInBackground().makeVoid(), |
| 152 | + query.fromLocalDatastore().findInBackground().makeVoid(), |
| 153 | + query.setLimit(10).findInBackground().makeVoid(), |
| 154 | + query.whereEqualTo("key", "value").countInBackground().makeVoid()); |
| 155 | + assertTrue(query.isRunning()); |
| 156 | + tcs.trySetResult(null); |
| 157 | + ParseTaskUtils.wait(Task.whenAll(tasks)); |
| 158 | + assertFalse(query.isRunning()); |
175 | 159 | }
|
176 | 160 |
|
177 | 161 | @Test
|
@@ -240,6 +224,29 @@ public void testCountWithCallbackLimit() throws ParseException {
|
240 | 224 | assertEquals(0, state.getValue().limit());
|
241 | 225 | }
|
242 | 226 |
|
| 227 | + @Test |
| 228 | + public void testIsRunning() throws ParseException { |
| 229 | + TestQueryController controller = new TestQueryController(); |
| 230 | + ParseCorePlugins.getInstance().registerQueryController(controller); |
| 231 | + TaskCompletionSource<Void> tcs = new TaskCompletionSource<>(); |
| 232 | + controller.await(tcs.getTask()); |
| 233 | + |
| 234 | + ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject"); |
| 235 | + query.setUser(new ParseUser()); |
| 236 | + assertFalse(query.isRunning()); |
| 237 | + query.findInBackground(); |
| 238 | + assertTrue(query.isRunning()); |
| 239 | + tcs.setResult(null); |
| 240 | + assertFalse(query.isRunning()); |
| 241 | + // Run another |
| 242 | + tcs = new TaskCompletionSource<>(); |
| 243 | + controller.await(tcs.getTask()); |
| 244 | + query.findInBackground(); |
| 245 | + assertTrue(query.isRunning()); |
| 246 | + query.cancel(); |
| 247 | + assertFalse(query.isRunning()); |
| 248 | + } |
| 249 | + |
243 | 250 | @Test
|
244 | 251 | public void testQueryCancellation() throws ParseException {
|
245 | 252 | TestQueryController controller = new TestQueryController();
|
|
0 commit comments