diff options
| -rw-r--r-- | tests/utils/testutils/java/android/os/test/TestLooper.java | 7 | ||||
| -rw-r--r-- | tests/utils/testutils/java/android/os/test/TestLooperTest.java | 31 |
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 |