Loading tests/testables/src/android/testing/TestableInstrumentation.java +1 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ public class TestableInstrumentation extends AndroidJUnitRunner { private TestLooperManager mManager; public MainLooperManager() { mMainHandler = new Handler(Looper.getMainLooper()); mMainHandler = Handler.createAsync(Looper.getMainLooper()); startManaging(); } Loading tests/testables/src/android/testing/TestableLooper.java +7 −7 Original line number Diff line number Diff line Loading @@ -51,12 +51,12 @@ public class TestableLooper { this(acquireLooperManager(l), l); } private TestableLooper(TestLooperManager wrapper, Looper l) throws Exception { private TestableLooper(TestLooperManager wrapper, Looper l) { mQueueWrapper = wrapper; setupQueue(l); } private TestableLooper(Looper looper, boolean b) throws Exception { private TestableLooper(Looper looper, boolean b) { setupQueue(looper); } Loading @@ -64,7 +64,7 @@ public class TestableLooper { return mLooper; } private void setupQueue(Looper l) throws Exception { private void setupQueue(Looper l) { mLooper = l; mQueue = mLooper.getQueue(); mHandler = new Handler(mLooper); Loading @@ -75,7 +75,7 @@ public class TestableLooper { * the looper will not be available for any subsequent tests. This is * automatically handled for tests using {@link RunWithLooper}. */ public void destroy() throws NoSuchFieldException, IllegalAccessException { public void destroy() { mQueueWrapper.release(); if (mLooper == Looper.getMainLooper()) { TestableInstrumentation.releaseMain(); Loading Loading @@ -133,7 +133,7 @@ public class TestableLooper { if (mMessageHandler != null) { if (mMessageHandler.onMessageHandled(result)) { result.getTarget().dispatchMessage(result); mQueueWrapper.execute(result); mQueueWrapper.recycle(result); } else { mQueueWrapper.recycle(result); Loading @@ -141,7 +141,7 @@ public class TestableLooper { return false; } } else { result.getTarget().dispatchMessage(result); mQueueWrapper.execute(result); mQueueWrapper.recycle(result); } } else { Loading Loading @@ -238,7 +238,7 @@ public class TestableLooper { super(base.getMethod()); mLooper = other.mLooper; mTestableLooper = other; mHandler = new Handler(mLooper); mHandler = Handler.createAsync(mLooper); } public static FrameworkMethod get(FrameworkMethod base, boolean setAsMain, Object test) { Loading tests/testables/tests/src/android/testing/TestableLooperTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.testing; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; Loading Loading @@ -158,4 +159,22 @@ public class TestableLooperTest { public void testMainLooperAnnotation() { assertEquals(Looper.myLooper(), Looper.getMainLooper()); } @Test public void testCorrectLooperExecution() throws Exception { boolean[] hasRun = new boolean[] { false }; Runnable r = () -> { assertEquals("Should run on main looper", Looper.getMainLooper(), Looper.myLooper()); hasRun[0] = true; }; TestableLooper testableLooper = new TestableLooper(Looper.getMainLooper()); try { new Handler(Looper.getMainLooper()).post(r); testableLooper.processAllMessages(); assertTrue(hasRun[0]); } finally { testableLooper.destroy(); } } } Loading
tests/testables/src/android/testing/TestableInstrumentation.java +1 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ public class TestableInstrumentation extends AndroidJUnitRunner { private TestLooperManager mManager; public MainLooperManager() { mMainHandler = new Handler(Looper.getMainLooper()); mMainHandler = Handler.createAsync(Looper.getMainLooper()); startManaging(); } Loading
tests/testables/src/android/testing/TestableLooper.java +7 −7 Original line number Diff line number Diff line Loading @@ -51,12 +51,12 @@ public class TestableLooper { this(acquireLooperManager(l), l); } private TestableLooper(TestLooperManager wrapper, Looper l) throws Exception { private TestableLooper(TestLooperManager wrapper, Looper l) { mQueueWrapper = wrapper; setupQueue(l); } private TestableLooper(Looper looper, boolean b) throws Exception { private TestableLooper(Looper looper, boolean b) { setupQueue(looper); } Loading @@ -64,7 +64,7 @@ public class TestableLooper { return mLooper; } private void setupQueue(Looper l) throws Exception { private void setupQueue(Looper l) { mLooper = l; mQueue = mLooper.getQueue(); mHandler = new Handler(mLooper); Loading @@ -75,7 +75,7 @@ public class TestableLooper { * the looper will not be available for any subsequent tests. This is * automatically handled for tests using {@link RunWithLooper}. */ public void destroy() throws NoSuchFieldException, IllegalAccessException { public void destroy() { mQueueWrapper.release(); if (mLooper == Looper.getMainLooper()) { TestableInstrumentation.releaseMain(); Loading Loading @@ -133,7 +133,7 @@ public class TestableLooper { if (mMessageHandler != null) { if (mMessageHandler.onMessageHandled(result)) { result.getTarget().dispatchMessage(result); mQueueWrapper.execute(result); mQueueWrapper.recycle(result); } else { mQueueWrapper.recycle(result); Loading @@ -141,7 +141,7 @@ public class TestableLooper { return false; } } else { result.getTarget().dispatchMessage(result); mQueueWrapper.execute(result); mQueueWrapper.recycle(result); } } else { Loading Loading @@ -238,7 +238,7 @@ public class TestableLooper { super(base.getMethod()); mLooper = other.mLooper; mTestableLooper = other; mHandler = new Handler(mLooper); mHandler = Handler.createAsync(mLooper); } public static FrameworkMethod get(FrameworkMethod base, boolean setAsMain, Object test) { Loading
tests/testables/tests/src/android/testing/TestableLooperTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.testing; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; Loading Loading @@ -158,4 +159,22 @@ public class TestableLooperTest { public void testMainLooperAnnotation() { assertEquals(Looper.myLooper(), Looper.getMainLooper()); } @Test public void testCorrectLooperExecution() throws Exception { boolean[] hasRun = new boolean[] { false }; Runnable r = () -> { assertEquals("Should run on main looper", Looper.getMainLooper(), Looper.myLooper()); hasRun[0] = true; }; TestableLooper testableLooper = new TestableLooper(Looper.getMainLooper()); try { new Handler(Looper.getMainLooper()).post(r); testableLooper.processAllMessages(); assertTrue(hasRun[0]); } finally { testableLooper.destroy(); } } }