[automerger] Fix the Launcher3Tests Bug: 78589564 am: 3efd037e63

Change-Id: I3d59b092d92ad7fe1d8a27b567b7eba9b614d95b
This commit is contained in:
Android Build Merger (Role) 2018-06-19 21:13:29 +00:00
commit 1b570700cc
7 changed files with 36 additions and 277 deletions

View File

@ -33,6 +33,7 @@ import android.support.test.uiautomator.Direction;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.Until;
import android.util.Log;
import android.view.MotionEvent;
import com.android.launcher3.LauncherAppState;
@ -64,6 +65,7 @@ public abstract class AbstractLauncherUiTest {
public static final long DEFAULT_ACTIVITY_TIMEOUT = TimeUnit.SECONDS.toMillis(10);
public static final long DEFAULT_BROADCAST_TIMEOUT_SECS = 5;
public static final long SHORT_UI_TIMEOUT= 300;
public static final long DEFAULT_UI_TIMEOUT = 3000;
public static final long LARGE_UI_TIMEOUT = 10000;
public static final long DEFAULT_WORKER_TIMEOUT_SECS = 5;
@ -73,6 +75,8 @@ public abstract class AbstractLauncherUiTest {
protected Context mTargetContext;
protected String mTargetPackage;
private static final String TAG = "AbstractLauncherUiTest";
@Before
public void setUp() throws Exception {
mDevice = UiDevice.getInstance(getInstrumentation());
@ -119,8 +123,7 @@ public abstract class AbstractLauncherUiTest {
protected UiObject2 openWidgetsTray() {
mDevice.pressMenu(); // Enter overview mode.
mDevice.wait(Until.findObject(
By.text(mTargetContext.getString(R.string.widget_button_text)
.toUpperCase(Locale.getDefault()))), DEFAULT_UI_TIMEOUT).click();
By.text(mTargetContext.getString(R.string.widget_button_text))), DEFAULT_UI_TIMEOUT).click();
return findViewById(R.id.widgets_list_view);
}
@ -130,6 +133,8 @@ public abstract class AbstractLauncherUiTest {
*/
protected UiObject2 scrollAndFind(UiObject2 container, BySelector condition) {
do {
// findObject can only execute after spring settles.
mDevice.wait(Until.findObject(condition), SHORT_UI_TIMEOUT);
UiObject2 widget = container.findObject(condition);
if (widget != null) {
return widget;
@ -140,6 +145,7 @@ public abstract class AbstractLauncherUiTest {
/**
* Drags an icon to the center of homescreen.
* @param icon object that is either app icon or shortcut icon
*/
protected void dragToWorkspace(UiObject2 icon, boolean expectedToShowShortcuts) {
Point center = icon.getVisibleCenter();
@ -250,6 +256,7 @@ public abstract class AbstractLauncherUiTest {
public LauncherAppWidgetProviderInfo call() throws Exception {
ComponentName cn = new ComponentName(getInstrumentation().getContext(),
hasConfigureScreen ? AppWidgetWithConfig.class : AppWidgetNoConfig.class);
Log.d(TAG, "findWidgetProvider componentName=" + cn.flattenToString());
return AppWidgetManagerCompat.getInstance(mTargetContext)
.findProvider(cn, Process.myUserHandle());
}
@ -271,7 +278,13 @@ public abstract class AbstractLauncherUiTest {
protected LauncherActivityInfo getSettingsApp() {
return LauncherAppsCompat.getInstance(mTargetContext)
.getActivityList("com.android.settings", Process.myUserHandle()).get(0);
.getActivityList("com.android.settings",
Process.myUserHandle()).get(0);
}
protected LauncherActivityInfo getChromeApp() {
return LauncherAppsCompat.getInstance(mTargetContext)
.getActivityList("com.android.chrome", Process.myUserHandle()).get(0);
}
/**

View File

@ -41,15 +41,15 @@ public class AllAppsAppLaunchTest extends AbstractLauncherUiTest {
private void performTest() throws Exception {
mActivityMonitor.startLauncher();
LauncherActivityInfo settingsApp = getSettingsApp();
LauncherActivityInfo testApp = getChromeApp();
// Open all apps and wait for load complete
final UiObject2 appsContainer = openAllApps();
assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT));
// Open settings app and verify app launched
scrollAndFind(appsContainer, By.text(settingsApp.getLabel().toString())).click();
// Open app and verify app launched
scrollAndFind(appsContainer, By.text(testApp.getLabel().toString())).click();
assertTrue(mDevice.wait(Until.hasObject(By.pkg(
settingsApp.getComponentName().getPackageName()).depth(0)), DEFAULT_UI_TIMEOUT));
testApp.getComponentName().getPackageName()).depth(0)), DEFAULT_UI_TIMEOUT));
}
}

View File

@ -46,14 +46,15 @@ public class ShortcutsLaunchTest extends AbstractLauncherUiTest {
private void performTest() throws Exception {
mActivityMonitor.startLauncher();
LauncherActivityInfo settingsApp = getSettingsApp();
LauncherActivityInfo testApp = getSettingsApp();
// Open all apps and wait for load complete
final UiObject2 appsContainer = openAllApps();
assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT));
assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2),
DEFAULT_UI_TIMEOUT));
// Find settings app and verify shortcuts appear when long pressed
UiObject2 icon = scrollAndFind(appsContainer, By.text(settingsApp.getLabel().toString()));
UiObject2 icon = scrollAndFind(appsContainer, By.text(testApp.getLabel().toString()));
// Press icon center until shortcuts appear
Point iconCenter = icon.getVisibleCenter();
sendPointer(MotionEvent.ACTION_DOWN, iconCenter);
@ -63,11 +64,13 @@ public class ShortcutsLaunchTest extends AbstractLauncherUiTest {
// Verify that launching a shortcut opens a page with the same text
assertTrue(deepShortcutsContainer.getChildCount() > 0);
UiObject2 shortcut = deepShortcutsContainer.getChildren().get(0)
// Pick second children as it starts showing shortcuts.
UiObject2 shortcut = deepShortcutsContainer.getChildren().get(1)
.findObject(getSelectorForId(R.id.bubble_text));
shortcut.click();
assertTrue(mDevice.wait(Until.hasObject(By.pkg(
settingsApp.getComponentName().getPackageName())
testApp.getComponentName().getPackageName())
.text(shortcut.getText())), DEFAULT_UI_TIMEOUT));
}
}

View File

@ -48,14 +48,15 @@ public class ShortcutsToHomeTest extends AbstractLauncherUiTest {
clearHomescreen();
mActivityMonitor.startLauncher();
LauncherActivityInfo settingsApp = getSettingsApp();
LauncherActivityInfo testApp = getSettingsApp();
// Open all apps and wait for load complete.
final UiObject2 appsContainer = openAllApps();
assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT));
assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2),
DEFAULT_UI_TIMEOUT));
// Find the app and long press it to show shortcuts.
UiObject2 icon = scrollAndFind(appsContainer, By.text(settingsApp.getLabel().toString()));
UiObject2 icon = scrollAndFind(appsContainer, By.text(testApp.getLabel().toString()));
// Press icon center until shortcuts appear
Point iconCenter = icon.getVisibleCenter();
sendPointer(MotionEvent.ACTION_DOWN, iconCenter);
@ -65,7 +66,7 @@ public class ShortcutsToHomeTest extends AbstractLauncherUiTest {
// Drag the first shortcut to the home screen.
assertTrue(deepShortcutsContainer.getChildCount() > 0);
UiObject2 shortcut = deepShortcutsContainer.getChildren().get(0)
UiObject2 shortcut = deepShortcutsContainer.getChildren().get(1)
.findObject(getSelectorForId(R.id.bubble_text));
String shortcutName = shortcut.getText();
dragToWorkspace(shortcut, false);
@ -74,7 +75,7 @@ public class ShortcutsToHomeTest extends AbstractLauncherUiTest {
// (the app opens and has the same text as the shortcut).
mDevice.findObject(By.text(shortcutName)).click();
assertTrue(mDevice.wait(Until.hasObject(By.pkg(
settingsApp.getComponentName().getPackageName())
testApp.getComponentName().getPackageName())
.text(shortcutName)), DEFAULT_UI_TIMEOUT));
}
}

View File

@ -122,7 +122,6 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
setupAndVerifyContents(item, LauncherAppWidgetHostView.class, info.label);
}
@Test
public void testUnboundWidget_removed() throws Exception {
LauncherAppWidgetProviderInfo info = findWidgetProvider(false);
LauncherAppWidgetInfo item = createWidgetInfo(info, false);
@ -177,7 +176,6 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
LauncherSettings.Favorites.APPWIDGET_ID))));
}
@Test
public void testPendingWidget_notRestored_removed() throws Exception {
LauncherAppWidgetInfo item = getInvalidWidgetInfo();
item.restoreStatus = LauncherAppWidgetInfo.FLAG_ID_NOT_VALID

View File

@ -79,6 +79,8 @@ public class RequestPinItemTest extends AbstractLauncherUiTest {
}
@Test
public void testEmpty() throws Throwable { /* needed while the broken tests are being fixed */ }
public void testPinWidgetNoConfig() throws Throwable {
runTest("pinWidgetNoConfig", true, new ItemOperator() {
@Override
@ -91,7 +93,6 @@ public class RequestPinItemTest extends AbstractLauncherUiTest {
});
}
@Test
public void testPinWidgetNoConfig_customPreview() throws Throwable {
// Command to set custom preview
Intent command = RequestPinItemActivity.getCommandIntent(
@ -109,7 +110,6 @@ public class RequestPinItemTest extends AbstractLauncherUiTest {
}, command);
}
@Test
public void testPinWidgetWithConfig() throws Throwable {
runTest("pinWidgetWithConfig", true, new ItemOperator() {
@Override
@ -122,7 +122,6 @@ public class RequestPinItemTest extends AbstractLauncherUiTest {
});
}
@Test
public void testPinShortcut() throws Throwable {
// Command to set the shortcut id
Intent command = RequestPinItemActivity.getCommandIntent(

View File

@ -1,255 +0,0 @@
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.launcher3.util;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.view.KeyEvent;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Tests the {@link FocusLogic} class that handles key event based focus handling.
*/
@SmallTest
@RunWith(AndroidJUnit4.class)
public final class FocusLogicTest {
@Test
public void testShouldConsume() {
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_LEFT));
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_RIGHT));
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_UP));
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_DPAD_DOWN));
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_MOVE_HOME));
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_MOVE_END));
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_PAGE_UP));
assertTrue(FocusLogic.shouldConsume(KeyEvent.KEYCODE_PAGE_DOWN));
}
@Test
public void testCreateSparseMatrix() {
// Either, 1) create a helper method to generate/instantiate all possible cell layout that
// may get created in real world to test this method. OR 2) Move all the matrix
// management routine to celllayout and write tests for them.
}
@Test
public void testMoveFromBottomRightToBottomLeft() {
int[][] map = transpose(new int[][] {
{-1, 0, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{100, 1, -1, -1, -1, -1},
});
int i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT, map, 100, 1, 2, false);
assertEquals(1, i);
}
@Test
public void testMoveFromBottomRightToTopLeft() {
int[][] map = transpose(new int[][] {
{-1, 0, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{100, -1, -1, -1, -1, -1},
});
int i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT, map, 100, 1, 2, false);
assertEquals(FocusLogic.NEXT_PAGE_FIRST_ITEM, i);
}
@Test
public void testMoveIntoHotseatWithEqualHotseatAndWorkspaceColumns() {
// Test going from an icon right above the All Apps button to the All Apps button.
int[][] map = transpose(new int[][] {
{-1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1},
{-1, -1, 0, -1, -1},
{ 2, 3, 1, 4, 5},
});
int i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 0, 1, 1, true);
assertEquals(1, i);
// Test going from an icon above and to the right of the All Apps
// button to an icon to the right of the All Apps button.
map = transpose(new int[][] {
{-1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1},
{-1, -1, -1, 0, -1},
{ 2, 3, 1, 4, 5},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 0, 1, 1, true);
assertEquals(4, i);
}
@Test
public void testMoveIntoHotseatWithExtraColumnForAllApps() {
// Test going from an icon above and to the left
// of the All Apps button to the All Apps button.
int[][] map = transpose(new int[][] {
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, 0,-11, -1, -1, -1},
{-1, -1, -1, 1, 1, -1, -1},
});
int i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 0, 1, 1, true);
assertEquals(1, i);
// Test going from an icon above and to the right
// of the All Apps button to the All Apps button.
map = transpose(new int[][] {
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, 0, -1, -1},
{-1, -1, -1, 1, -1, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 0, 1, 1, true);
assertEquals(1, i);
// Test going from the All Apps button to an icon
// above and to the right of the All Apps button.
map = transpose(new int[][] {
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, 0, -1, -1},
{-1, -1, -1, 1, -1, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_UP, map, 1, 1, 1, true);
assertEquals(0, i);
// Test going from an icon above and to the left of the
// All Apps button in landscape to the All Apps button.
map = transpose(new int[][] {
{ -1, -1, -1, -1, -1},
{ -1, -1, -1, 0, -1},
{-11,-11,-11,-11, 1},
{ -1, -1, -1, -1, -1},
{ -1, -1, -1, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT, map, 0, 1, 1, true);
assertEquals(1, i);
// Test going from the All Apps button in landscape to
// an icon above and to the left of the All Apps button.
map = transpose(new int[][] {
{ -1, -1, -1, -1, -1},
{ -1, -1, -1, 0, -1},
{-11,-11,-11,-11, 1},
{ -1, -1, -1, -1, -1},
{ -1, -1, -1, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_LEFT, map, 1, 1, 1, true);
assertEquals(0, i);
// Test that going to the hotseat always goes to the same row as the original icon.
map = transpose(new int[][]{
{ 0, 1, 2,-11, 3, 4, 5},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{-1, -1, -1,-11, -1, -1, -1},
{ 7, 8, 9, 6, 10, 11, 12},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 0, 1, 1, true);
assertEquals(7, i);
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 1, 1, 1, true);
assertEquals(8, i);
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 2, 1, 1, true);
assertEquals(9, i);
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 3, 1, 1, true);
assertEquals(10, i);
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 4, 1, 1, true);
assertEquals(11, i);
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 5, 1, 1, true);
assertEquals(12, i);
}
@Test
public void testCrossingAllAppsColumn() {
// Test crossing from left to right in portrait.
int[][] map = transpose(new int[][] {
{-1, -1,-11, -1, -1},
{-1, 0,-11, -1, -1},
{-1, -1,-11, 1, -1},
{-1, -1,-11, -1, -1},
{-1, -1, 2, -1, -1},
});
int i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 0, 1, 1, true);
assertEquals(1, i);
// Test crossing from right to left in portrait.
map = transpose(new int[][] {
{-1, -1,-11, -1, -1},
{-1, -1,-11, 0, -1},
{-1, 1,-11, -1, -1},
{-1, -1,-11, -1, -1},
{-1, -1, 2, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_DOWN, map, 0, 1, 1, true);
assertEquals(1, i);
// Test crossing from left to right in landscape.
map = transpose(new int[][] {
{ -1, -1, -1, -1, -1},
{ -1, -1, -1, 0, -1},
{-11,-11,-11,-11, 2},
{ -1, 1, -1, -1, -1},
{ -1, -1, -1, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_LEFT, map, 0, 1, 1, true);
assertEquals(1, i);
// Test crossing from right to left in landscape.
map = transpose(new int[][] {
{ -1, -1, -1, -1, -1},
{ -1, 0, -1, -1, -1},
{-11,-11,-11,-11, 2},
{ -1, -1, 1, -1, -1},
{ -1, -1, -1, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT, map, 0, 1, 1, true);
assertEquals(1, i);
// Test NOT crossing it, if the All Apps button is the only suitable candidate.
map = transpose(new int[][]{
{-1, 0, -1, -1, -1},
{-1, 1, -1, -1, -1},
{-11, -11, -11, -11, 4},
{-1, 2, -1, -1, -1},
{-1, 3, -1, -1, -1},
});
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT, map, 1, 1, 1, true);
assertEquals(4, i);
i = FocusLogic.handleKeyEvent(KeyEvent.KEYCODE_DPAD_RIGHT, map, 2, 1, 1, true);
assertEquals(4, i);
}
/** Transposes the matrix so that we can write it in human-readable format in the tests. */
private int[][] transpose(int[][] m) {
int[][] t = new int[m[0].length][m.length];
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[0].length; j++) {
t[j][i] = m[i][j];
}
}
return t;
}
}