summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/utils/testutils/java/android/os/test/TestLooper.java7
-rw-r--r--tests/utils/testutils/java/android/os/test/TestLooperTest.java31
2 files changed, 38 insertions, 0 deletions
diff --git a/tests/utils/testutils/java/android/os/test/TestLooper.java b/tests/utils/testutils/java/android/os/test/TestLooper.java
index e8ceb4a9b02d..a49eda3d86d0 100644
--- a/tests/utils/testutils/java/android/os/test/TestLooper.java
+++ b/tests/utils/testutils/java/android/os/test/TestLooper.java
@@ -18,6 +18,8 @@ package android.os.test;
import static org.junit.Assert.assertTrue;
+import android.os.Handler;
+import android.os.HandlerExecutor;
import android.os.Looper;
import android.os.Message;
import android.os.MessageQueue;
@@ -28,6 +30,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.concurrent.Executor;
/**
* Creates a looper whose message queue can be manipulated
@@ -83,6 +86,10 @@ public class TestLooper {
return mLooper;
}
+ public Executor getNewExecutor() {
+ return new HandlerExecutor(new Handler(getLooper()));
+ }
+
private Message getMessageLinkedList() {
try {
MessageQueue queue = mLooper.getQueue();
diff --git a/tests/utils/testutils/java/android/os/test/TestLooperTest.java b/tests/utils/testutils/java/android/os/test/TestLooperTest.java
index 40d83b5b9171..c72e20ccc5ba 100644
--- a/tests/utils/testutils/java/android/os/test/TestLooperTest.java
+++ b/tests/utils/testutils/java/android/os/test/TestLooperTest.java
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -37,6 +38,8 @@ import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.MockitoAnnotations;
+import java.util.concurrent.Executor;
+
/**
* Test TestLooperAbstractTime which provides control over "time". Note that
* real-time is being used as well. Therefore small time increments are NOT
@@ -48,6 +51,7 @@ public class TestLooperTest {
private TestLooper mTestLooper;
private Handler mHandler;
private Handler mHandlerSpy;
+ private Executor mExecutor;
@Rule
public ErrorCollector collector = new ErrorCollector();
@@ -59,6 +63,7 @@ public class TestLooperTest {
mTestLooper = new TestLooper();
mHandler = new Handler(mTestLooper.getLooper());
mHandlerSpy = spy(mHandler);
+ mExecutor = mTestLooper.getNewExecutor();
}
/**
@@ -93,6 +98,32 @@ public class TestLooperTest {
}
/**
+ * Basic test of the Executor with no time stamps: dispatch 4 executables, check that all 4
+ * executed in correct order.
+ */
+ @Test
+ public void testNoTimeMovementExecutor() {
+ final Runnable runnableA = mock(Runnable.class);
+ final Runnable runnableB = mock(Runnable.class);
+ final Runnable runnableC = mock(Runnable.class);
+
+ InOrder inOrder = inOrder(runnableA, runnableB, runnableC);
+
+ mExecutor.execute(runnableA);
+ mExecutor.execute(runnableB);
+ mExecutor.execute(runnableA);
+ mExecutor.execute(runnableC);
+ mTestLooper.dispatchAll();
+
+ inOrder.verify(runnableA).run();
+ inOrder.verify(runnableB).run();
+ inOrder.verify(runnableA).run();
+ inOrder.verify(runnableC).run();
+
+ inOrder.verifyNoMoreInteractions();
+ }
+
+ /**
* Test message sequence: A, B, C@5K, A@10K. Don't move time.
* <p>
* Expected: only get A, B