diff options
author | Koushik Dutta <koushd@gmail.com> | 2013-05-20 22:41:12 -0700 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2013-05-20 22:41:12 -0700 |
commit | 358a1ba71fdee8668c25b697cd263407496339c5 (patch) | |
tree | 5970335313a8194edce2739975c489f045071817 | |
parent | b5533915b107ef669c782ff7b485fdf70fec75c6 (diff) | |
download | AndroidAsync-358a1ba71fdee8668c25b697cd263407496339c5.tar.gz AndroidAsync-358a1ba71fdee8668c25b697cd263407496339c5.tar.bz2 AndroidAsync-358a1ba71fdee8668c25b697cd263407496339c5.zip |
Add support and tests for completion callback events on Futures.
4 files changed, 41 insertions, 20 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/future/Future.java b/AndroidAsync/src/com/koushikdutta/async/future/Future.java index a3afdb2..f1108ea 100644 --- a/AndroidAsync/src/com/koushikdutta/async/future/Future.java +++ b/AndroidAsync/src/com/koushikdutta/async/future/Future.java @@ -4,6 +4,6 @@ package com.koushikdutta.async.future; import com.koushikdutta.async.callback.ResultCallback; public interface Future<T> extends Cancellable, java.util.concurrent.Future<T> { - public ResultCallback<T> getResultCallback(); - public void setResultCallback(ResultCallback<T> callback); + public FutureCallback<T> getResultCallback(); + public void setResultCallback(FutureCallback<T> callback); } diff --git a/AndroidAsync/src/com/koushikdutta/async/future/FutureCallback.java b/AndroidAsync/src/com/koushikdutta/async/future/FutureCallback.java new file mode 100644 index 0000000..b1fe530 --- /dev/null +++ b/AndroidAsync/src/com/koushikdutta/async/future/FutureCallback.java @@ -0,0 +1,8 @@ +package com.koushikdutta.async.future; + +/** + * Created by koush on 5/20/13. + */ +public interface FutureCallback<T> { + public void onCompleted(Exception e, T result); +} diff --git a/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java b/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java index 14e5a62..a315fe0 100644 --- a/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java +++ b/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java @@ -72,7 +72,7 @@ public class SimpleFuture<T> extends SimpleCancelable implements DependentFuture Exception exception; public boolean setComplete(Exception e) { - ResultCallback<T> callback; + FutureCallback<T> callback; synchronized (this) { if (!super.setComplete()) return false; @@ -88,7 +88,7 @@ public class SimpleFuture<T> extends SimpleCancelable implements DependentFuture T result; public boolean setComplete(T value) { - ResultCallback<T> callback; + FutureCallback<T> callback; synchronized (this) { if (!super.setComplete()) return false; @@ -107,14 +107,14 @@ public class SimpleFuture<T> extends SimpleCancelable implements DependentFuture return true; } - ResultCallback<T> callback; + FutureCallback<T> callback; @Override - public ResultCallback<T> getResultCallback() { + public FutureCallback<T> getResultCallback() { return callback; } @Override - public void setResultCallback(ResultCallback<T> callback) { + public void setResultCallback(FutureCallback<T> callback) { // callback can only be changed or read/used inside a sync block boolean runCallback; synchronized (this) { diff --git a/AndroidAsyncTest/src/com/koushikdutta/async/test/FutureTests.java b/AndroidAsyncTest/src/com/koushikdutta/async/test/FutureTests.java index 4c886d6..70783f1 100644 --- a/AndroidAsyncTest/src/com/koushikdutta/async/test/FutureTests.java +++ b/AndroidAsyncTest/src/com/koushikdutta/async/test/FutureTests.java @@ -1,22 +1,17 @@ package com.koushikdutta.async.test; -import java.util.ArrayList; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -import com.koushikdutta.async.callback.ResultCallback; -import junit.framework.TestCase; import android.os.Handler; import android.os.Looper; - import com.koushikdutta.async.AsyncServer; import com.koushikdutta.async.callback.CompletedCallback; import com.koushikdutta.async.callback.ContinuationCallback; import com.koushikdutta.async.future.Continuation; +import com.koushikdutta.async.future.FutureCallback; import com.koushikdutta.async.future.SimpleFuture; +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.concurrent.*; public class FutureTests extends TestCase { private static class IntegerFuture extends SimpleFuture<Integer> { @@ -44,17 +39,35 @@ public class FutureTests extends TestCase { public void testFutureCallback() throws Exception { final Semaphore semaphore = new Semaphore(0); - final IntegerFuture future = IntegerFuture.create(20, 2000); - future.setResultCallback(new ResultCallback<Integer>() { + final IntegerFuture future = IntegerFuture.create(20, 1000); + final Thread mainThread = Thread.currentThread(); + future.setResultCallback(new FutureCallback<Integer>() { @Override public void onCompleted(Exception e, Integer result) { + assertNotSame(Thread.currentThread(), mainThread); semaphore.release(); } }); assertTrue(semaphore.tryAcquire(3000, TimeUnit.MILLISECONDS)); } - + + public void testFutureFinishedCallback() throws Exception { + final Semaphore semaphore = new Semaphore(0); + final IntegerFuture future = IntegerFuture.create(20, 1); + Thread.sleep(1000); + final Thread mainThread = Thread.currentThread(); + future.setResultCallback(new FutureCallback<Integer>() { + @Override + public void onCompleted(Exception e, Integer result) { + assertEquals(Thread.currentThread(), mainThread); + semaphore.release(); + } + }); + + assertTrue(semaphore.tryAcquire(3000, TimeUnit.MILLISECONDS)); + } + public void testFutureCancel() throws Exception { // test a future being cancelled while waiting final IntegerFuture future = IntegerFuture.create(20, 2000); |