@Override public Void then(Task<Void> task) { // This will signal that the UUID does represent a row in the database. tcs.setResult(newUUID); return null; } });
@Override public Void then(Task<Void> task) { readyToStart.setResult(null); return null; } });
@Override public Task<Void> then(Task<Void> task) { try { db.close(); } finally { tcs.setResult(null); } return tcs.getTask(); } }, dbExecutor);
/** * Resumes the {@link TaskQueue} by resolving the first {@link Task}. */ public void dequeue() { synchronized (lock) { TaskCompletionSource<Void> tcs = pendingTasks.remove(0); tcs.setResult(null); } } }
tcs.setResult(success); } else if (result.has("error")) { JSONObject error = result.getJSONObject("error");
@Override public Task<JSONObject> then(Task<JSONObject> task) { String localId = command.getLocalId(); Exception error = task.getError(); if (error != null) { if (error instanceof ParseException && ((ParseException) error).getCode() == ParseException.CONNECTION_FAILED) { // do nothing } else { if (tcs != null) { tcs.setError(error); } } return task; } JSONObject json = task.getResult(); if (tcs != null) { tcs.setResult(json); } else if (localId != null) { // If this command created a new objectId, add it to the map. String objectId = json.optString("objectId", null); if (objectId != null) { ParseCorePlugins.getInstance() .getLocalIdManager().setObjectId(localId, objectId); } } return task; } });
commandTask = Task.forResult(null); if (tcs != null) { tcs.setResult(null);
@Test public void testGetAsyncWithNoInstallationRaceCondition() throws ParseException { // Mock installationId InstallationId installationId = mock(InstallationId.class); when(installationId.get()).thenReturn("testInstallationId"); //noinspection unchecked ParseObjectStore<ParseInstallation> store = mock(ParseObjectStore.class); TaskCompletionSource<ParseInstallation> tcs = new TaskCompletionSource(); when(store.getAsync()).thenReturn(tcs.getTask()); // Create test controller CachedCurrentInstallationController controller = new CachedCurrentInstallationController(store, installationId); Task<ParseInstallation> taskA = controller.getAsync(); Task<ParseInstallation> taskB = controller.getAsync(); tcs.setResult(null); ParseInstallation installationA = ParseTaskUtils.wait(taskA); ParseInstallation installationB = ParseTaskUtils.wait(taskB); verify(store, times(1)).getAsync(); assertSame(controller.currentInstallation, installationA); assertSame(controller.currentInstallation, installationB); // Make sure device info is updated assertEquals("testInstallationId", installationA.getInstallationId()); assertEquals("android", installationA.get(KEY_DEVICE_TYPE)); }
private void completeDownloadTask() { rollbackTimestamps.clear(); TaskCompletionSource<Void> taskSource = downloadTask.getAndSet(null); if (taskSource != null) { taskSource.setResult(null); } else { mwPrivate.logWarn("Log download finished but no Task object to complete"); } }
@Test public void testParcelWhileDeletingWithLDSEnabled() throws Exception { mockCurrentUserController(); TaskCompletionSource<Void> tcs = mockObjectControllerForDelete(); ParseObject object = new ParseObject("TestObject"); object.setObjectId("id"); OfflineStore lds = mock(OfflineStore.class); when(lds.getObject("TestObject", "id")).thenReturn(object); Parse.setLocalDatastore(lds); Task<Void> deleteTask = object.deleteInBackground(); assertTrue(object.isDeleting); Parcel parcel = Parcel.obtain(); object.writeToParcel(parcel, 0); parcel.setDataPosition(0); ParseObject other = ParseObject.CREATOR.createFromParcel(parcel); assertSame(object, other); assertTrue(other.isDeleting); // Still deleting tcs.setResult(null); deleteTask.waitForCompletion(); // complete deletion on original object. assertFalse(other.isDeleting); assertTrue(other.isDeleted); Parse.setLocalDatastore(null); }
@Test public void testQueryCancellation() throws ParseException { TestQueryController controller = new TestQueryController(); ParseCorePlugins.getInstance().registerQueryController(controller); TaskCompletionSource<Void> tcs = new TaskCompletionSource(); controller.await(tcs.getTask()); ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject"); query.setUser(new ParseUser()); Task<Void> task = query.findInBackground().makeVoid(); query.cancel(); tcs.setResult(null); try { ParseTaskUtils.wait(task); } catch (RuntimeException e) { assertThat(e.getCause(), instanceOf(CancellationException.class)); } // Should succeed task = query.findInBackground().makeVoid(); ParseTaskUtils.wait(task); }
tcs.setResult(state); ParseTaskUtils.wait(Task.whenAll(tasks));
tcs.setResult(state); ParseTaskUtils.wait(Task.whenAll(tasks));
@Test public void testParcelWhileSavingWithLDSEnabled() throws Exception { mockCurrentUserController(); TaskCompletionSource<ParseObject.State> tcs = mockObjectControllerForSave(); ParseObject object = new ParseObject("TestObject"); object.setObjectId("id"); OfflineStore lds = mock(OfflineStore.class); when(lds.getObject("TestObject", "id")).thenReturn(object); Parse.setLocalDatastore(lds); object.put("key", "value"); object.increment("number", 3); Task<Void> saveTask = object.saveInBackground(); assertTrue(object.hasOutstandingOperations()); // Saving assertFalse(object.isDirty()); // Not dirty because it's saving Parcel parcel = Parcel.obtain(); object.writeToParcel(parcel, 0); parcel.setDataPosition(0); ParseObject other = ParseObject.CREATOR.createFromParcel(parcel); assertSame(object, other); assertTrue(other.hasOutstandingOperations()); // Still saving assertFalse(other.isDirty()); // Still not dirty assertEquals(other.getNumber("number"), 3); tcs.setResult(null); saveTask.waitForCompletion(); Parse.setLocalDatastore(null); }
tcs.setResult(null); ParseTaskUtils.wait(Task.whenAll(tasks));
@Test public void testMultipleQueries() { TestQueryController controller1 = new TestQueryController(); TestQueryController controller2 = new TestQueryController(); TaskCompletionSource<Void> tcs1 = new TaskCompletionSource<>(); TaskCompletionSource<Void> tcs2 = new TaskCompletionSource<>(); controller1.await(tcs1.getTask()); controller2.await(tcs2.getTask()); ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject"); query.setUser(new ParseUser()); ParseCorePlugins.getInstance().registerQueryController(controller1); query.findInBackground(); assertTrue(query.isRunning()); ParseCorePlugins.getInstance().reset(); ParseCorePlugins.getInstance().registerQueryController(controller2); query.countInBackground(); assertTrue(query.isRunning()); // Stop the first operation. tcs1.setResult(null); assertTrue(query.isRunning()); // Stop the second. tcs2.setResult(null); assertFalse(query.isRunning()); }
@Test public void testParcelWhileDeleting() throws Exception { mockCurrentUserController(); TaskCompletionSource<Void> tcs = mockObjectControllerForDelete(); ParseObject object = new ParseObject("TestObject"); object.setObjectId("id"); Task<Void> deleteTask = object.deleteInBackground(); // ensure Log.w is called.. assertTrue(object.isDeleting); Parcel parcel = Parcel.obtain(); object.writeToParcel(parcel, 0); parcel.setDataPosition(0); ParseObject other = ParseObject.CREATOR.createFromParcel(parcel); // By design, when LDS is off, we assume that old operations failed even if // they are still running on the old instance. assertFalse(other.isDeleting); assertTrue(object.isDeleting); tcs.setResult(null); deleteTask.waitForCompletion(); assertFalse(object.isDeleting); assertTrue(object.isDeleted); }
void disconnected(int status) { closeGatt(); if (!connectTask.isCompleted() && status != 0) { connectTask.setError(new IllegalStateException(String.format(Locale.US, "Non-zero onConnectionStateChange status (%s)", status))); } else { if (disconnectTaskSrc == null || disconnectTaskSrc.getTask().isCompleted()) { dcHandler.onUnexpectedDisconnect(status); } else { dcHandler.onDisconnect(); disconnectTaskSrc.setResult(null); } } }
@Test public void testIsRunning() { TestQueryController controller = new TestQueryController(); ParseCorePlugins.getInstance().registerQueryController(controller); TaskCompletionSource<Void> tcs = new TaskCompletionSource<>(); controller.await(tcs.getTask()); ParseQuery<ParseObject> query = ParseQuery.getQuery("TestObject"); query.setUser(new ParseUser()); assertFalse(query.isRunning()); query.findInBackground(); assertTrue(query.isRunning()); tcs.setResult(null); assertFalse(query.isRunning()); // Run another tcs = new TaskCompletionSource<>(); controller.await(tcs.getTask()); query.findInBackground(); assertTrue(query.isRunning()); query.cancel(); assertFalse(query.isRunning()); }
@Override protected Task<Route> setupLogDataRoute() { try { junitPlatform.boardStateSuffix = "log_acc"; mwBoard.deserialize(); TaskCompletionSource<Route> deserializeTask= new TaskCompletionSource<>(); deserializeTask.setResult(mwBoard.lookupRoute((byte) 0)); return deserializeTask.getTask(); } catch (IOException | ClassNotFoundException e) { return Task.forError(e); } }