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

Commit 62c271c1 authored by Jorge Gil's avatar Jorge Gil
Browse files

Desks: Fix DesktopHeaderManageWindowsMenuTest

With multiple desks, setting the immersive state in the repository only
takes effect if a display/desk exists and is active. This change updates
the test's set up to create and activate a default desk.

Also makes the menu nullable, so that future failures print the
assertion error instead of crashing because tearDown() threw an NPE.

Flag: com.android.window.flags.enable_multiple_desktops_backend
Bug: 411276711
Test: atest DesktopHeaderManageWindowsMenuTest
Change-Id: I52596c4dd8ad46dc41543e5ac74bdb3d08f6a836
parent a8d64d73
Loading
Loading
Loading
Loading
+53 −19
Original line number Diff line number Diff line
@@ -15,15 +15,22 @@
 */
package com.android.wm.shell.windowdecor

import android.app.ActivityManager
import android.app.ActivityManager.RunningTaskInfo
import android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD
import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM
import android.content.pm.UserInfo
import android.os.UserManager
import android.platform.test.annotations.EnableFlags
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.SurfaceControl
import android.view.Display.DEFAULT_DISPLAY
import android.window.TaskSnapshot
import androidx.test.filters.SmallTest
import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn
import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.dx.mockito.inline.extended.StaticMockitoSession
import com.android.window.flags.Flags
import com.android.wm.shell.MockToken
import com.android.wm.shell.ShellTestCase
@@ -34,12 +41,15 @@ import com.android.wm.shell.shared.desktopmode.FakeDesktopState
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.windowdecor.additionalviewcontainer.AdditionalSystemViewContainer
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertNotNull
import org.junit.After
import org.junit.Assert.fail
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
import org.mockito.quality.Strictness

/**
 * Tests for [DesktopHeaderManageWindowsMenu].
@@ -52,42 +62,62 @@ import org.mockito.kotlin.mock
@RunWith(AndroidTestingRunner::class)
class DesktopHeaderManageWindowsMenuTest : ShellTestCase() {

    private val mockUserManager = mock<UserManager>()

    private lateinit var mockitoSession: StaticMockitoSession
    private lateinit var userRepositories: DesktopUserRepositories
    private lateinit var menu: DesktopHeaderManageWindowsMenu
    private lateinit var desktopState: FakeDesktopState

    private var menu: DesktopHeaderManageWindowsMenu? = null

    @Before
    fun setUp() {
        mockitoSession =
            mockitoSession()
                .strictness(Strictness.LENIENT)
                .spyStatic(ActivityManager::class.java)
                .startMocking()
        doReturn(DEFAULT_USER_ID).`when` { ActivityManager.getCurrentUser() }
        desktopState = FakeDesktopState()
        desktopState.canEnterDesktopMode = true

        whenever(mockUserManager.getProfiles(DEFAULT_USER_ID)).thenReturn(
            listOf(UserInfo(DEFAULT_USER_ID, "User 10", /* flags= */ 0)))
        userRepositories = DesktopUserRepositories(
            shellInit = ShellInit(TestShellExecutor()),
            shellController = mock(),
            persistentRepository = mock(),
            repositoryInitializer = mock(),
            mainCoroutineScope = mock(),
            userManager = mock(),
            userManager = mockUserManager,
            desktopState = desktopState,
        )
        userRepositories.getProfile(DEFAULT_USER_ID).apply {
            addDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
            setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
        }
    }

    @After
    fun tearDown() {
        menu.animateClose()
        mockitoSession.finishMocking()
        menu?.animateClose()
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_FULLY_IMMERSIVE_IN_DESKTOP)
    fun testShow_forImmersiveTask_usesSystemViewContainer() {
        val task = createFreeformTask()
        assertThat(userRepositories.getProfile(DEFAULT_USER_ID).userId).isEqualTo(DEFAULT_USER_ID)
        userRepositories.getProfile(DEFAULT_USER_ID).setTaskInFullImmersiveState(
            displayId = task.displayId,
            taskId = task.taskId,
            immersive = true
        )
        menu = createMenu(task)

        val menu = createMenu(task)

        assertNotNull(menu)
        assertThat(menu.menuViewContainer).isInstanceOf(AdditionalSystemViewContainer::class.java)
    }

@@ -113,7 +143,8 @@ class DesktopHeaderManageWindowsMenuTest : ShellTestCase() {
    private fun createMenu(
        task: RunningTaskInfo,
        snapshotList: List<Pair<Int, TaskSnapshot?>> = emptyList()
    ) = DesktopHeaderManageWindowsMenu(
    ): DesktopHeaderManageWindowsMenu? {
        val menu = DesktopHeaderManageWindowsMenu(
            callerTaskInfo = task,
            x = 0,
            y = 0,
@@ -127,6 +158,9 @@ class DesktopHeaderManageWindowsMenuTest : ShellTestCase() {
            onIconClickListener = {},
            onOutsideClickListener = {},
        )
        this.menu = menu
        return menu
    }

    private fun createFreeformTask(): RunningTaskInfo = TestRunningTaskInfoBuilder()
        .setToken(MockToken().token())