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

Commit 78cb28df authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix tests to correctly use the appropriate tab when edit modes tabs are enabled" into main

parents ed1e73a0 9d79d3a6
Loading
Loading
Loading
Loading
+47 −20
Original line number Diff line number Diff line
@@ -16,22 +16,27 @@

package com.android.systemui.qs.panels.ui.compose

import android.platform.test.flag.junit.FlagsParameterization
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onAllNodesWithContentDescription
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.text.AnnotatedString
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.FlakyTest
import androidx.test.filters.SmallTest
import com.android.compose.theme.PlatformTheme
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.qs.flags.QsEditModeTabs
import com.android.systemui.qs.panels.shared.model.SizedTileImpl
import com.android.systemui.qs.panels.ui.compose.infinitegrid.DefaultEditTileGrid
import com.android.systemui.qs.panels.ui.compose.infinitegrid.EditAction
@@ -45,11 +50,18 @@ import com.android.systemui.testKosmos
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@FlakyTest(bugId = 360351805)
@SmallTest
@RunWith(AndroidJUnit4::class)
class DragAndDropTest : SysuiTestCase() {
@RunWith(ParameterizedAndroidJunit4::class)
class DragAndDropTest(flags: FlagsParameterization) : SysuiTestCase() {

    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    @get:Rule val composeRule = createComposeRule()

    private val kosmos = testKosmos()
@@ -79,21 +91,29 @@ class DragAndDropTest : SysuiTestCase() {
        }
    }

    private fun ComposeContentTestRule.setEditContent(listState: EditTileListState) {
        setContent { EditTileGridUnderTest(listState) }
        waitForIdle()

        if (QsEditModeTabs.isEnabled) {
            // Tap on Layout tab to select
            onNodeWithText("Layout").performClick()
        }
    }

    @Test
    fun draggedTile_shouldDisappear() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        composeRule.setContent { EditTileGridUnderTest(listState) }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState)

        listState.onStarted(listState.tiles[0] as TileGridCell, DragType.Move)

        // Tile is being dragged, it should be replaced with a placeholder. Assert that only the
        // copy in the available section is visible
        composeRule.onAllNodesWithContentDescription("tileA").assertCountEquals(1)
        // Tile is being dragged, it should be replaced with a placeholder.
        composeRule.onNodeWithContentDescription("tileA").assertDoesNotExist()

        // Available tiles should still appear for a move
        composeRule.onNodeWithTag(AVAILABLE_TILES_GRID_TEST_TAG).assertExists()
        composeRule.assertAvailableGridExists()

        // Every other tile should still be in the same order
        composeRule.assertGridContainsExactly(
@@ -111,8 +131,7 @@ class DragAndDropTest : SysuiTestCase() {
                columns = 4,
                largeTilesSpan = 2,
            )
        composeRule.setContent { EditTileGridUnderTest(listState) }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState)

        val sizedTile = SizedTileImpl(nonRemovableTile, width = 1)
        listState.onStarted(sizedTile, DragType.Move)
@@ -133,8 +152,7 @@ class DragAndDropTest : SysuiTestCase() {
    fun draggedTile_shouldChangePosition() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        composeRule.setContent { EditTileGridUnderTest(listState) }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState)

        listState.onStarted(listState.tiles[0] as TileGridCell, DragType.Move)

@@ -142,7 +160,7 @@ class DragAndDropTest : SysuiTestCase() {
        listState.onDrop()

        // Available tiles should appear for a move
        composeRule.onNodeWithTag(AVAILABLE_TILES_GRID_TEST_TAG).assertExists()
        composeRule.assertAvailableGridExists()

        // Tile A and B should swap places
        composeRule.assertGridContainsExactly(
@@ -155,8 +173,7 @@ class DragAndDropTest : SysuiTestCase() {
    fun draggedTileOut_shouldBeRemoved() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        composeRule.setContent { EditTileGridUnderTest(listState) }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState)

        listState.onStarted(listState.tiles[0] as TileGridCell, DragType.Move)

@@ -164,7 +181,7 @@ class DragAndDropTest : SysuiTestCase() {
        listState.onDrop()

        // Available tiles should appear for a move
        composeRule.onNodeWithTag(AVAILABLE_TILES_GRID_TEST_TAG).assertExists()
        composeRule.assertAvailableGridExists()

        // Tile A is gone
        composeRule.assertGridContainsExactly(
@@ -177,8 +194,7 @@ class DragAndDropTest : SysuiTestCase() {
    fun draggedNewTileIn_shouldBeAdded() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        composeRule.setContent { EditTileGridUnderTest(listState) }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState)

        val sizedTile = SizedTileImpl(createEditTile("tile_new", isRemovable = false), width = 1)
        listState.onStarted(sizedTile, DragType.Add)
@@ -193,7 +209,7 @@ class DragAndDropTest : SysuiTestCase() {
        listState.onDrop()

        // Available tiles should re-appear
        composeRule.onNodeWithTag(AVAILABLE_TILES_GRID_TEST_TAG).assertExists()
        composeRule.assertAvailableGridExists()

        // tile_new is added after tileD
        composeRule.assertGridContainsExactly(
@@ -202,7 +218,18 @@ class DragAndDropTest : SysuiTestCase() {
        )
    }

    private fun ComposeContentTestRule.assertAvailableGridExists() {
        if (!QsEditModeTabs.isEnabled) {
            onNodeWithTag(AVAILABLE_TILES_GRID_TEST_TAG).assertExists()
        }
    }

    companion object {

        @Parameters(name = "{0}")
        @JvmStatic
        fun data() = FlagsParameterization.progressionOf(QsEditModeTabs.FLAG_NAME)

        private const val CURRENT_TILES_GRID_TEST_TAG = "CurrentTilesGrid"
        private const val AVAILABLE_TILES_GRID_TEST_TAG = "AvailableTilesGrid"

+26 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.qs.panels.ui.compose

import android.platform.test.flag.junit.FlagsParameterization
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
@@ -31,7 +32,6 @@ import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollToNode
import androidx.compose.ui.test.performTouchInput
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.theme.PlatformTheme
import com.android.systemui.SysuiTestCase
@@ -40,6 +40,7 @@ import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragment
import com.android.systemui.qs.flags.QsEditModeTabs
import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository
import com.android.systemui.qs.panels.domain.interactor.iconTilesInteractor
import com.android.systemui.qs.panels.ui.compose.infinitegrid.infiniteGridLayout
@@ -53,10 +54,17 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@SmallTest
@RunWith(AndroidJUnit4::class)
class InfiniteGridLayoutEditTileGridTest : SysuiTestCase() {
@RunWith(ParameterizedAndroidJunit4::class)
class InfiniteGridLayoutEditTileGridTest(flags: FlagsParameterization) : SysuiTestCase() {

    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    @get:Rule val composeRule = createComposeRule()

    private val kosmos =
@@ -97,6 +105,11 @@ class InfiniteGridLayoutEditTileGridTest : SysuiTestCase() {
            composeRule.setContent { TestEditTileGrid() }
            composeRule.waitForIdle()

            if (QsEditModeTabs.isEnabled) {
                // Tap on Layout tab to select
                composeRule.onNodeWithText("Layout").performClick()
            }

            val stateOnFirstMove =
                listOf(
                    "bt",
@@ -243,6 +256,11 @@ class InfiniteGridLayoutEditTileGridTest : SysuiTestCase() {
            composeRule.setContent { TestEditTileGrid() }
            composeRule.waitForIdle()

            if (QsEditModeTabs.isEnabled) {
                // Tap on Layout tab to select
                composeRule.onNodeWithText("Layout").performClick()
            }

            // Resize tileA to large
            composeRule
                .onNodeWithContentDescription("internet")
@@ -285,6 +303,11 @@ class InfiniteGridLayoutEditTileGridTest : SysuiTestCase() {
        }

    companion object {

        @Parameters(name = "{0}")
        @JvmStatic
        fun data() = FlagsParameterization.progressionOf(QsEditModeTabs.FLAG_NAME)

        private const val AVAILABLE_TILES_GRID_TEST_TAG = "AvailableTilesGrid"
        private val TestEditTiles =
            listOf(
+40 −19
Original line number Diff line number Diff line
@@ -16,26 +16,29 @@

package com.android.systemui.qs.panels.ui.compose

import android.platform.test.flag.junit.FlagsParameterization
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.click
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performCustomAccessibilityActionWithLabel
import androidx.compose.ui.test.performTouchInput
import androidx.compose.ui.test.swipeLeft
import androidx.compose.ui.test.swipeRight
import androidx.compose.ui.text.AnnotatedString
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.theme.PlatformTheme
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.qs.flags.QsEditModeTabs
import com.android.systemui.qs.panels.ui.compose.infinitegrid.DefaultEditTileGrid
import com.android.systemui.qs.panels.ui.compose.infinitegrid.EditAction
import com.android.systemui.qs.panels.ui.model.GridCell
@@ -50,11 +53,18 @@ import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@OptIn(ExperimentalTestApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
class ResizingTest : SysuiTestCase() {
@RunWith(ParameterizedAndroidJunit4::class)
class ResizingTest(flags: FlagsParameterization) : SysuiTestCase() {

    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    @get:Rule val composeRule = createComposeRule()

    private val kosmos = testKosmos()
@@ -90,13 +100,27 @@ class ResizingTest : SysuiTestCase() {
        }
    }

    private fun ComposeContentTestRule.setEditContent(
        listState: EditTileListState,
        tiles: List<EditTileViewModel> = TestEditTiles,
        largeTiles: Set<TileSpec> = TestLargeTilesSpecs,
        onResize: (EditAction.ResizeTile) -> Unit = {},
    ) {
        setContent { EditTileGridUnderTest(listState, tiles, largeTiles, onResize) }
        waitForIdle()

        if (QsEditModeTabs.isEnabled) {
            // Tap on Layout tab to select
            onNodeWithText("Layout").performClick()
        }
    }

    @Test
    fun toggleIconTileWithA11yAction_shouldBeLarge() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        var resizedAction: EditAction.ResizeTile? = null
        composeRule.setContent { EditTileGridUnderTest(listState) { resizedAction = it } }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState) { resizedAction = it }

        composeRule
            .onNodeWithContentDescription("tileA")
@@ -114,8 +138,7 @@ class ResizingTest : SysuiTestCase() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        var resizedAction: EditAction.ResizeTile? = null
        composeRule.setContent { EditTileGridUnderTest(listState) { resizedAction = it } }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState) { resizedAction = it }

        composeRule
            .onNodeWithContentDescription("tileD_large")
@@ -133,8 +156,7 @@ class ResizingTest : SysuiTestCase() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        var resizedAction: EditAction.ResizeTile? = null
        composeRule.setContent { EditTileGridUnderTest(listState) { resizedAction = it } }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState) { resizedAction = it }

        composeRule
            .onNodeWithContentDescription("tileA")
@@ -154,8 +176,7 @@ class ResizingTest : SysuiTestCase() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        var resizedAction: EditAction.ResizeTile? = null
        composeRule.setContent { EditTileGridUnderTest(listState) { resizedAction = it } }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState) { resizedAction = it }

        composeRule
            .onNodeWithContentDescription("tileD_large")
@@ -175,8 +196,7 @@ class ResizingTest : SysuiTestCase() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        var resizedAction: EditAction.ResizeTile? = null
        composeRule.setContent { EditTileGridUnderTest(listState) { resizedAction = it } }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState) { resizedAction = it }

        composeRule
            .onNodeWithContentDescription("tileA")
@@ -196,8 +216,7 @@ class ResizingTest : SysuiTestCase() {
        val listState =
            EditTileListState(TestEditTiles, TestLargeTilesSpecs, columns = 4, largeTilesSpan = 2)
        var resizedAction: EditAction.ResizeTile? = null
        composeRule.setContent { EditTileGridUnderTest(listState) { resizedAction = it } }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState) { resizedAction = it }

        composeRule
            .onNodeWithContentDescription("tileD_large")
@@ -224,10 +243,7 @@ class ResizingTest : SysuiTestCase() {
        val listState = EditTileListState(testTiles, emptySet(), columns = 4, largeTilesSpan = 2)
        var resizedAction: EditAction.ResizeTile? = null

        composeRule.setContent {
            EditTileGridUnderTest(listState, testTiles) { resizedAction = it }
        }
        composeRule.waitForIdle()
        composeRule.setEditContent(listState, testTiles) { resizedAction = it }

        composeRule
            .onNodeWithContentDescription("tileD")
@@ -250,6 +266,11 @@ class ResizingTest : SysuiTestCase() {
    }

    companion object {

        @Parameters(name = "{0}")
        @JvmStatic
        fun data() = FlagsParameterization.progressionOf(QsEditModeTabs.FLAG_NAME)

        private fun createEditTile(tileSpec: String): EditTileViewModel {
            return EditTileViewModel(
                tileSpec = TileSpec.create(tileSpec),