1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.wm.shell.flicker.splitscreen 18 19 import android.platform.test.annotations.Postsubmit 20 import android.platform.test.annotations.Presubmit 21 import android.tools.NavBar 22 import android.tools.flicker.junit.FlickerParametersRunnerFactory 23 import android.tools.flicker.legacy.FlickerBuilder 24 import android.tools.flicker.legacy.LegacyFlickerTest 25 import android.tools.flicker.legacy.LegacyFlickerTestFactory 26 import androidx.test.filters.FlakyTest 27 import androidx.test.filters.RequiresDevice 28 import com.android.wm.shell.flicker.splitscreen.benchmark.EnterSplitScreenByDragFromTaskbarBenchmark 29 import com.android.wm.shell.flicker.utils.ICommonAssertions 30 import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT 31 import com.android.wm.shell.flicker.utils.appWindowBecomesVisible 32 import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd 33 import com.android.wm.shell.flicker.utils.layerBecomesVisible 34 import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd 35 import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesVisibleByDrag 36 import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd 37 import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible 38 import org.junit.FixMethodOrder 39 import org.junit.Test 40 import org.junit.runner.RunWith 41 import org.junit.runners.MethodSorters 42 import org.junit.runners.Parameterized 43 44 /** 45 * Test enter split screen by dragging app icon from taskbar. This test is only for large screen 46 * devices. 47 * 48 * To run this test: `atest WMShellFlickerTestsSplitScreen:EnterSplitScreenByDragFromTaskbar` 49 */ 50 @RequiresDevice 51 @RunWith(Parameterized::class) 52 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) 53 @FixMethodOrder(MethodSorters.NAME_ASCENDING) 54 class EnterSplitScreenByDragFromTaskbar(override val flicker: LegacyFlickerTest) : 55 EnterSplitScreenByDragFromTaskbarBenchmark(flicker), ICommonAssertions { 56 /** {@inheritDoc} */ 57 override val transition: FlickerBuilder.() -> Unit <lambda>null58 get() = { 59 defaultSetup(this) 60 defaultTeardown(this) 61 thisTransition(this) 62 } 63 64 @FlakyTest(bugId = 245472831) 65 @Test splitScreenDividerBecomesVisiblenull66 fun splitScreenDividerBecomesVisible() { 67 flicker.splitScreenDividerBecomesVisible() 68 } 69 70 // TODO(b/245472831): Back to splitScreenDividerBecomesVisible after shell transition ready. 71 @Presubmit 72 @Test splitScreenDividerIsVisibleAtEndnull73 fun splitScreenDividerIsVisibleAtEnd() { 74 flicker.assertLayersEnd { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) } 75 } 76 primaryAppLayerIsVisibleAtEndnull77 @Presubmit @Test fun primaryAppLayerIsVisibleAtEnd() = flicker.layerIsVisibleAtEnd(primaryApp) 78 79 @Presubmit 80 @Test 81 fun secondaryAppLayerBecomesVisible() { 82 flicker.layerBecomesVisible(secondaryApp) 83 } 84 85 @Presubmit 86 @Test primaryAppBoundsIsVisibleAtEndnull87 fun primaryAppBoundsIsVisibleAtEnd() = 88 flicker.splitAppLayerBoundsIsVisibleAtEnd( 89 primaryApp, 90 landscapePosLeft = false, 91 portraitPosTop = false 92 ) 93 94 @Presubmit 95 @Test 96 fun secondaryAppBoundsBecomesVisible() = 97 flicker.splitAppLayerBoundsBecomesVisibleByDrag(secondaryApp) 98 99 @Presubmit 100 @Test 101 fun primaryAppWindowIsVisibleAtEnd() = flicker.appWindowIsVisibleAtEnd(primaryApp) 102 103 @Presubmit 104 @Test 105 fun secondaryAppWindowBecomesVisible() = flicker.appWindowBecomesVisible(secondaryApp) 106 107 /** {@inheritDoc} */ 108 @Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered() 109 110 /** {@inheritDoc} */ 111 @Postsubmit 112 @Test 113 override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd() 114 115 /** {@inheritDoc} */ 116 @Postsubmit 117 @Test 118 override fun navBarLayerPositionAtStartAndEnd() = super.navBarLayerPositionAtStartAndEnd() 119 120 /** {@inheritDoc} */ 121 @Postsubmit 122 @Test 123 override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible() 124 125 /** {@inheritDoc} */ 126 @Postsubmit 127 @Test 128 override fun statusBarLayerIsVisibleAtStartAndEnd() = 129 super.statusBarLayerIsVisibleAtStartAndEnd() 130 131 /** {@inheritDoc} */ 132 @Postsubmit 133 @Test 134 override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd() 135 136 /** {@inheritDoc} */ 137 @Postsubmit 138 @Test 139 override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible() 140 141 /** {@inheritDoc} */ 142 @Postsubmit 143 @Test 144 override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd() 145 146 /** {@inheritDoc} */ 147 @Postsubmit 148 @Test 149 override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible() 150 151 /** {@inheritDoc} */ 152 @Postsubmit 153 @Test 154 override fun visibleLayersShownMoreThanOneConsecutiveEntry() = 155 super.visibleLayersShownMoreThanOneConsecutiveEntry() 156 157 /** {@inheritDoc} */ 158 @Postsubmit 159 @Test 160 override fun visibleWindowsShownMoreThanOneConsecutiveEntry() = 161 super.visibleWindowsShownMoreThanOneConsecutiveEntry() 162 163 companion object { 164 @Parameterized.Parameters(name = "{0}") 165 @JvmStatic 166 fun getParams() = 167 LegacyFlickerTestFactory.nonRotationTests( 168 supportedNavigationModes = listOf(NavBar.MODE_GESTURAL) 169 ) 170 } 171 } 172