summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/testables/src/android/testing/TestableInstrumentation.java2
-rw-r--r--tests/testables/src/android/testing/TestableLooper.java14
-rw-r--r--tests/testables/tests/src/android/testing/TestableLooperTest.java19
3 files changed, 27 insertions, 8 deletions
diff --git a/tests/testables/src/android/testing/TestableInstrumentation.java b/tests/testables/src/android/testing/TestableInstrumentation.java
index 93fed859cf39..3207b486b329 100644
--- a/tests/testables/src/android/testing/TestableInstrumentation.java
+++ b/tests/testables/src/android/testing/TestableInstrumentation.java
@@ -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();
}
diff --git a/tests/testables/src/android/testing/TestableLooper.java b/tests/testables/src/android/testing/TestableLooper.java
index f1a70921a469..f8d223ab91b6 100644
--- a/tests/testables/src/android/testing/TestableLooper.java
+++ b/tests/testables/src/android/testing/TestableLooper.java
@@ -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);
}
@@ -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);
@@ -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();
@@ -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);
@@ -141,7 +141,7 @@ public class TestableLooper {
return false;
}
} else {
- result.getTarget().dispatchMessage(result);
+ mQueueWrapper.execute(result);
mQueueWrapper.recycle(result);
}
} else {
@@ -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) {
diff --git a/tests/testables/tests/src/android/testing/TestableLooperTest.java b/tests/testables/tests/src/android/testing/TestableLooperTest.java
index 13e72bad1dc3..25f6a48871d3 100644
--- a/tests/testables/tests/src/android/testing/TestableLooperTest.java
+++ b/tests/testables/tests/src/android/testing/TestableLooperTest.java
@@ -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;
@@ -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();
+ }
+ }
}