diff --git a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java similarity index 100% rename from tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java rename to tests/robotests/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java diff --git a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java b/tests/robotests/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java similarity index 81% rename from tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java rename to tests/robotests/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java index 9dd2db11eb4..f011f859054 100644 --- a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java @@ -26,9 +26,12 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; +import static org.robolectric.Shadows.shadowOf; import android.content.Context; import android.content.res.Resources; +import android.os.Handler; +import android.os.Message; import android.os.RemoteException; import android.view.Display.Mode; @@ -36,7 +39,6 @@ import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; -import com.android.server.testutils.TestHandler; import com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DisplayListener; import com.android.settings.flags.FakeFeatureFlagsImpl; @@ -44,6 +46,7 @@ import org.junit.Before; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.ArrayDeque; import java.util.List; public class ExternalDisplayTestBase { @@ -57,11 +60,43 @@ public class ExternalDisplayTestBase { FakeFeatureFlagsImpl mFlags = new FakeFeatureFlagsImpl(); Context mContext; DisplayListener mListener; - TestHandler mHandler = new TestHandler(null); + TestHandler mHandler; PreferenceManager mPreferenceManager; PreferenceScreen mPreferenceScreen; List mDisplays; + static class TestHandler extends Handler { + private final ArrayDeque mPending = new ArrayDeque<>(); + private final Handler mSubhandler; + + TestHandler(Handler subhandler) { + mSubhandler = subhandler; + } + + ArrayDeque getPendingMessages() { + return mPending; + } + + /** + * Schedules to send the message upon next invocation of {@link #flush()}. This ignores the + * time argument since our code doesn't meaningfully use it, but this is the most convenient + * way to intercept both Message and Callback objects synchronously. + */ + @Override + public boolean sendMessageAtTime(Message msg, long uptimeMillis) { + mPending.add(msg); + return true; + } + + void flush() { + for (var msg : mPending) { + mSubhandler.sendMessage(msg); + } + mPending.clear(); + shadowOf(mSubhandler.getLooper()).idle(); + } + } + /** * Setup. */ @@ -85,6 +120,7 @@ public class ExternalDisplayTestBase { doReturn(display).when(mMockedInjector).getDisplay(display.getId()); } doReturn(mFlags).when(mMockedInjector).getFlags(); + mHandler = new TestHandler(mContext.getMainThreadHandler()); doReturn(mHandler).when(mMockedInjector).getHandler(); doReturn("").when(mMockedInjector).getSystemProperty( VIRTUAL_DISPLAY_PACKAGE_NAME_SYSTEM_PROPERTY); diff --git a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdaterTest.java similarity index 100% rename from tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdaterTest.java rename to tests/robotests/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdaterTest.java diff --git a/tests/unit/src/com/android/settings/connecteddevice/display/ResolutionPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/display/ResolutionPreferenceFragmentTest.java similarity index 100% rename from tests/unit/src/com/android/settings/connecteddevice/display/ResolutionPreferenceFragmentTest.java rename to tests/robotests/src/com/android/settings/connecteddevice/display/ResolutionPreferenceFragmentTest.java