Loading tests/utils/testutils/java/android/os/test/TestLooper.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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(); Loading tests/utils/testutils/java/android/os/test/TestLooperTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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(); Loading @@ -59,6 +63,7 @@ public class TestLooperTest { mTestLooper = new TestLooper(); mHandler = new Handler(mTestLooper.getLooper()); mHandlerSpy = spy(mHandler); mExecutor = mTestLooper.getNewExecutor(); } /** Loading Loading @@ -92,6 +97,32 @@ public class TestLooperTest { inOrder.verify(mHandlerSpy, never()).handleMessage(any(Message.class)); } /** * 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> Loading Loading
tests/utils/testutils/java/android/os/test/TestLooper.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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(); Loading
tests/utils/testutils/java/android/os/test/TestLooperTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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(); Loading @@ -59,6 +63,7 @@ public class TestLooperTest { mTestLooper = new TestLooper(); mHandler = new Handler(mTestLooper.getLooper()); mHandlerSpy = spy(mHandler); mExecutor = mTestLooper.getNewExecutor(); } /** Loading Loading @@ -92,6 +97,32 @@ public class TestLooperTest { inOrder.verify(mHandlerSpy, never()).handleMessage(any(Message.class)); } /** * 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> Loading