Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74e68c69 authored by Alex Chau's avatar Alex Chau Committed by Android (Google) Code Review
Browse files

Merge "Use SandboxContext in AbstractDeviceProfileTest" into main

parents d174fcaa 1ce67a61
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ public class MainThreadInitializedObject<T> {
     * Abstract Context which allows custom implementations for
     * {@link MainThreadInitializedObject} providers
     */
    public static abstract class SandboxContext extends ContextWrapper {
    public static class SandboxContext extends ContextWrapper {

        private static final String TAG = "SandboxContext";

@@ -165,5 +165,14 @@ public class MainThreadInitializedObject<T> {
        protected <T> T createObject(MainThreadInitializedObject<T> object) {
            return object.mProvider.get(this);
        }

        /**
         * Put a value into mObjectMap, can be used to put mocked MainThreadInitializedObject
         * instances into SandboxContext.
         */
        @VisibleForTesting
        public <T> void putObject(MainThreadInitializedObject<T> object, T value) {
            mObjectMap.put(object, value);
        }
    }
}
+15 −21
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.Surface
import androidx.test.core.app.ApplicationProvider
import com.android.launcher3.testing.shared.ResourceUtils
import com.android.launcher3.util.DisplayController
import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext
import com.android.launcher3.util.NavigationMode
import com.android.launcher3.util.WindowBounds
import com.android.launcher3.util.rule.TestStabilityRule
@@ -35,8 +36,6 @@ import java.io.PrintWriter
import java.io.StringWriter
import kotlin.math.max
import kotlin.math.min
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
@@ -50,30 +49,14 @@ import org.mockito.kotlin.whenever
 * For an implementation that mocks InvariantDeviceProfile, use [FakeInvariantDeviceProfileTest]
 */
abstract class AbstractDeviceProfileTest {
    protected var context: Context? = null
    protected lateinit var context: SandboxContext
    protected open val runningContext: Context = ApplicationProvider.getApplicationContext()
    private val displayController: DisplayController = mock()
    private val windowManagerProxy: WindowManagerProxy = mock()
    private lateinit var originalDisplayController: DisplayController
    private lateinit var originalWindowManagerProxy: WindowManagerProxy
    private val launcherPrefs: LauncherPrefs = mock()

    @Rule @JvmField val testStabilityRule = TestStabilityRule()

    @Before
    open fun setUp() {
        val appContext: Context = ApplicationProvider.getApplicationContext()
        originalWindowManagerProxy = WindowManagerProxy.INSTANCE.get(appContext)
        originalDisplayController = DisplayController.INSTANCE.get(appContext)
        WindowManagerProxy.INSTANCE.initializeForTesting(windowManagerProxy)
        DisplayController.INSTANCE.initializeForTesting(displayController)
    }

    @After
    open fun tearDown() {
        WindowManagerProxy.INSTANCE.initializeForTesting(originalWindowManagerProxy)
        DisplayController.INSTANCE.initializeForTesting(originalDisplayController)
    }

    class DeviceSpec(
        val naturalSize: Pair<Int, Int>,
        var densityDpi: Int,
@@ -304,8 +287,19 @@ abstract class AbstractDeviceProfileTest {
                screenHeightDp = (realBounds.bounds.height() / density).toInt()
                smallestScreenWidthDp = min(screenWidthDp, screenHeightDp)
            }
        context = runningContext.createConfigurationContext(config)
        val configurationContext = runningContext.createConfigurationContext(config)
        context =
            SandboxContext(
                configurationContext,
                DisplayController.INSTANCE,
                WindowManagerProxy.INSTANCE,
                LauncherPrefs.INSTANCE
            )
        context.putObject(DisplayController.INSTANCE, displayController)
        context.putObject(WindowManagerProxy.INSTANCE, windowManagerProxy)
        context.putObject(LauncherPrefs.INSTANCE, launcherPrefs)

        whenever(launcherPrefs.get(LauncherPrefs.TASKBAR_PINNING)).thenReturn(false)
        val info = spy(DisplayController.Info(context, windowManagerProxy, perDisplayBoundsCache))
        whenever(displayController.info).thenReturn(info)
        whenever(info.isTransientTaskbar).thenReturn(isGestureMode)