Convert more tests to TAPL
Bug: 110103162
Test: running these tests
Change-Id: I76b145eb4d16aca20ce30a5abca8f4568e3297e4
diff --git a/tests/src/com/android/launcher3/ui/AllAppsIconToHomeTest.java b/tests/src/com/android/launcher3/ui/AllAppsIconToHomeTest.java
index 9160076..9354862 100644
--- a/tests/src/com/android/launcher3/ui/AllAppsIconToHomeTest.java
+++ b/tests/src/com/android/launcher3/ui/AllAppsIconToHomeTest.java
@@ -1,18 +1,10 @@
package com.android.launcher3.ui;
-import static org.junit.Assert.assertTrue;
-
import android.content.pm.LauncherActivityInfo;
+
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
-import androidx.test.uiautomator.By;
-import androidx.test.uiautomator.UiObject2;
-import androidx.test.uiautomator.Until;
-import com.android.launcher3.util.Condition;
-import com.android.launcher3.util.Wait;
-
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -24,37 +16,23 @@
public class AllAppsIconToHomeTest extends AbstractLauncherUiTest {
@Test
- @Ignore
- public void testDragIcon_portrait() throws Throwable {
- lockRotation(true);
- performTest();
- }
-
- @Test
- @Ignore
- public void testDragIcon_landscape() throws Throwable {
- lockRotation(false);
- performTest();
- }
-
- private void performTest() throws Throwable {
+ @PortraitLandscape
+ public void testDragIcon() throws Throwable {
LauncherActivityInfo settingsApp = getSettingsApp();
clearHomescreen();
mDevice.pressHome();
mDevice.waitForIdle();
- // Open all apps and wait for load complete.
- final UiObject2 appsContainer = TestViewHelpers.openAllApps();
- Wait.atMost(null, Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT);
-
- // Drag icon to homescreen.
- UiObject2 icon = scrollAndFind(appsContainer, By.text(settingsApp.getLabel().toString()));
- TestViewHelpers.dragToWorkspace(icon, true);
-
- // Verify that the icon works on homescreen.
- mDevice.findObject(By.text(settingsApp.getLabel().toString())).click();
- assertTrue(mDevice.wait(Until.hasObject(By.pkg(
- settingsApp.getComponentName().getPackageName()).depth(0)), DEFAULT_UI_TIMEOUT));
+ final String appName = settingsApp.getLabel().toString();
+ // 1. Open all apps and wait for load complete.
+ // 2. Drag icon to homescreen.
+ // 3. Verify that the icon works on homescreen.
+ mLauncher.getWorkspace().
+ switchToAllApps().
+ getAppIcon(appName).
+ dragToWorkspace().
+ getWorkspaceAppIcon(appName).
+ launch(settingsApp.getComponentName().getPackageName());
}
}
diff --git a/tests/src/com/android/launcher3/ui/ShortcutsLaunchTest.java b/tests/src/com/android/launcher3/ui/ShortcutsLaunchTest.java
index e95801a..1fea4d5 100644
--- a/tests/src/com/android/launcher3/ui/ShortcutsLaunchTest.java
+++ b/tests/src/com/android/launcher3/ui/ShortcutsLaunchTest.java
@@ -6,8 +6,6 @@
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
-import androidx.test.uiautomator.By;
-import androidx.test.uiautomator.Until;
import com.android.launcher3.Launcher;
import com.android.launcher3.popup.ArrowPopup;
@@ -49,9 +47,6 @@
final AppIconMenuItem menuItem = menu.getMenuItem(1);
final String itemName = menuItem.getText();
- menuItem.launch();
- assertTrue(mDevice.wait(Until.hasObject(By.pkg(
- testApp.getComponentName().getPackageName())
- .text(itemName)), DEFAULT_UI_TIMEOUT));
+ menuItem.launch(testApp.getComponentName().getPackageName(), itemName);
}
}
diff --git a/tests/src/com/android/launcher3/ui/ShortcutsToHomeTest.java b/tests/src/com/android/launcher3/ui/ShortcutsToHomeTest.java
index 436c699..4c2c959 100644
--- a/tests/src/com/android/launcher3/ui/ShortcutsToHomeTest.java
+++ b/tests/src/com/android/launcher3/ui/ShortcutsToHomeTest.java
@@ -1,22 +1,12 @@
package com.android.launcher3.ui;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
import android.content.pm.LauncherActivityInfo;
-import android.graphics.Point;
+
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
-import androidx.test.uiautomator.By;
-import androidx.test.uiautomator.UiObject2;
-import androidx.test.uiautomator.Until;
-import android.view.MotionEvent;
-import com.android.launcher3.R;
-import com.android.launcher3.util.Condition;
-import com.android.launcher3.util.Wait;
+import com.android.launcher3.tapl.AppIconMenuItem;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -28,51 +18,30 @@
public class ShortcutsToHomeTest extends AbstractLauncherUiTest {
@Test
- @Ignore
- public void testDragIcon_portrait() throws Throwable {
- lockRotation(true);
- performTest();
- }
-
- @Test
- @Ignore
- public void testDragIcon_landscape() throws Throwable {
- lockRotation(false);
- performTest();
- }
-
- private void performTest() throws Throwable {
+ @PortraitLandscape
+ public void testDragIcon() throws Throwable {
clearHomescreen();
mActivityMonitor.startLauncher();
- LauncherActivityInfo testApp = getSettingsApp();
+ LauncherActivityInfo testApp = getSettingsApp();
- // Open all apps and wait for load complete.
- final UiObject2 appsContainer = TestViewHelpers.openAllApps();
- Wait.atMost(null, Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT);
+ // 1. Open all apps and wait for load complete.
+ // 2. Find the app and long press it to show shortcuts.
+ // 3. Press icon center until shortcuts appear
+ final AppIconMenuItem menuItem = mLauncher.
+ getWorkspace().
+ switchToAllApps().
+ getAppIcon(testApp.getLabel().toString()).
+ openMenu().
+ getMenuItem(0);
+ final String shortcutName = menuItem.getText();
- // Find the app and long press it to show shortcuts.
- UiObject2 icon = scrollAndFind(appsContainer, By.text(testApp.getLabel().toString()));
- // Press icon center until shortcuts appear
- Point iconCenter = icon.getVisibleCenter();
- TestViewHelpers.sendPointer(MotionEvent.ACTION_DOWN, iconCenter);
- UiObject2 deepShortcutsContainer = TestViewHelpers.findViewById(
- R.id.deep_shortcuts_container);
- assertNotNull(deepShortcutsContainer);
- TestViewHelpers.sendPointer(MotionEvent.ACTION_UP, iconCenter);
-
- // Drag the first shortcut to the home screen.
- assertTrue(deepShortcutsContainer.getChildCount() > 0);
- UiObject2 shortcut = deepShortcutsContainer.getChildren().get(1)
- .findObject(TestViewHelpers.getSelectorForId(R.id.bubble_text));
- String shortcutName = shortcut.getText();
- TestViewHelpers.dragToWorkspace(shortcut, false);
-
- // Verify that the shortcut works on home screen
- // (the app opens and has the same text as the shortcut).
- mDevice.findObject(By.text(shortcutName)).click();
- assertTrue(mDevice.wait(Until.hasObject(By.pkg(
- testApp.getComponentName().getPackageName())
- .text(shortcutName)), DEFAULT_UI_TIMEOUT));
+ // 4. Drag the first shortcut to the home screen.
+ // 5. Verify that the shortcut works on home screen
+ // (the app opens and has the same text as the shortcut).
+ menuItem.
+ dragToWorkspace().
+ getWorkspaceAppIcon(shortcutName).
+ launch(testApp.getComponentName().getPackageName(), shortcutName);
}
}
diff --git a/tests/tapl/com/android/launcher3/tapl/AppIcon.java b/tests/tapl/com/android/launcher3/tapl/AppIcon.java
index 1c0ecb9..efefc0d 100644
--- a/tests/tapl/com/android/launcher3/tapl/AppIcon.java
+++ b/tests/tapl/com/android/launcher3/tapl/AppIcon.java
@@ -22,18 +22,13 @@
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.BySelector;
import androidx.test.uiautomator.UiObject2;
-import androidx.test.uiautomator.Until;
/**
* App icon, whether in all apps or in workspace/
*/
-public final class AppIcon {
- private final LauncherInstrumentation mLauncher;
- private final UiObject2 mIcon;
-
+public final class AppIcon extends Launchable {
AppIcon(LauncherInstrumentation launcher, UiObject2 icon) {
- mLauncher = launcher;
- mIcon = icon;
+ super(launcher, icon);
}
static BySelector getAppIconSelector(String appName) {
@@ -41,28 +36,10 @@
}
/**
- * Clicks the icon to launch its app.
- */
- public Background launch(String packageName) {
- LauncherInstrumentation.log("AppIcon.launch before click " + mIcon.getVisibleCenter());
- LauncherInstrumentation.assertTrue(
- "Launching an app didn't open a new window: " + mIcon.getText(),
- mIcon.clickAndWait(Until.newWindow(), LauncherInstrumentation.WAIT_TIME_MS));
- LauncherInstrumentation.assertTrue(
- "App didn't start: " + packageName, mLauncher.getDevice().wait(Until.hasObject(
- By.pkg(packageName).depth(0)), LauncherInstrumentation.WAIT_TIME_MS));
- return new Background(mLauncher);
- }
-
- UiObject2 getIcon() {
- return mIcon;
- }
-
- /**
* Long-clicks the icon to open its menu.
*/
public AppIconMenu openMenu() {
- final Point iconCenter = mIcon.getVisibleCenter();
+ final Point iconCenter = mObject.getVisibleCenter();
mLauncher.longTap(iconCenter.x, iconCenter.y);
final UiObject2 deepShortcutsContainer = mLauncher.waitForLauncherObject(
"deep_shortcuts_container");
diff --git a/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java b/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java
index 7b2abeb..c39f8d1 100644
--- a/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java
+++ b/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java
@@ -16,37 +16,20 @@
package com.android.launcher3.tapl;
-import static org.junit.Assert.assertTrue;
-
import androidx.test.uiautomator.UiObject2;
-import androidx.test.uiautomator.Until;
/**
* Menu item in an app icon menu.
*/
-public class AppIconMenuItem {
- private final LauncherInstrumentation mLauncher;
- final UiObject2 mShortcut;
-
- AppIconMenuItem(LauncherInstrumentation launcher,
- UiObject2 shortcut) {
- mLauncher = launcher;
- mShortcut = shortcut;
+public class AppIconMenuItem extends Launchable {
+ AppIconMenuItem(LauncherInstrumentation launcher, UiObject2 shortcut) {
+ super(launcher, shortcut);
}
/**
* Returns the visible text of the menu item.
*/
public String getText() {
- return mShortcut.getText();
- }
-
- /**
- * Launches the action for the menu item.
- */
- public Background launch() {
- assertTrue("Clicking a menu item didn't open a new window: " + mShortcut.getText(),
- mShortcut.clickAndWait(Until.newWindow(), LauncherInstrumentation.WAIT_TIME_MS));
- return new Background(mLauncher);
+ return mObject.getText();
}
}
diff --git a/tests/tapl/com/android/launcher3/tapl/Launchable.java b/tests/tapl/com/android/launcher3/tapl/Launchable.java
new file mode 100644
index 0000000..7e2c966
--- /dev/null
+++ b/tests/tapl/com/android/launcher3/tapl/Launchable.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2018 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.tapl;
+
+import android.graphics.Point;
+
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.BySelector;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject2;
+import androidx.test.uiautomator.Until;
+
+/**
+ * Ancestor for AppIcon and AppMenuItem.
+ */
+class Launchable {
+ private static final int DRAG_SPEED = 500;
+ protected final LauncherInstrumentation mLauncher;
+
+ protected final UiObject2 mObject;
+
+ Launchable(LauncherInstrumentation launcher, UiObject2 object) {
+ mObject = object;
+ mLauncher = launcher;
+ }
+
+ UiObject2 getObject() {
+ return mObject;
+ }
+
+ /**
+ * Clicks the object to launch its app.
+ */
+ public Background launch(String expectedPackageName) {
+ return launch(expectedPackageName, By.pkg(expectedPackageName).depth(0));
+ }
+
+ /**
+ * Clicks the object to launch its app.
+ */
+ public Background launch(String expectedPackageName, String expectedAppText) {
+ return launch(expectedPackageName, By.pkg(expectedPackageName).text(expectedAppText));
+ }
+
+ private Background launch(String errorMessage, BySelector selector) {
+ LauncherInstrumentation.log("Launchable.launch before click " +
+ mObject.getVisibleCenter());
+ LauncherInstrumentation.assertTrue(
+ "Launching an app didn't open a new window: " + mObject.getText(),
+ mObject.clickAndWait(Until.newWindow(), LauncherInstrumentation.WAIT_TIME_MS));
+ LauncherInstrumentation.assertTrue(
+ "App didn't start: " + errorMessage,
+ mLauncher.getDevice().wait(Until.hasObject(selector),
+ LauncherInstrumentation.WAIT_TIME_MS));
+ return new Background(mLauncher);
+ }
+
+ /**
+ * Drags an object to the center of homescreen.
+ */
+ public Workspace dragToWorkspace() {
+ final UiDevice device = mLauncher.getDevice();
+ mObject.drag(new Point(
+ device.getDisplayWidth() / 2, device.getDisplayHeight() / 2), DRAG_SPEED);
+ return new Workspace(mLauncher);
+ }
+}
diff --git a/tests/tapl/com/android/launcher3/tapl/Workspace.java b/tests/tapl/com/android/launcher3/tapl/Workspace.java
index 493f26a..c63822e 100644
--- a/tests/tapl/com/android/launcher3/tapl/Workspace.java
+++ b/tests/tapl/com/android/launcher3/tapl/Workspace.java
@@ -19,12 +19,12 @@
import static junit.framework.TestCase.assertTrue;
import android.graphics.Point;
-import androidx.test.uiautomator.Direction;
-import androidx.test.uiautomator.UiObject2;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.test.uiautomator.Direction;
+import androidx.test.uiautomator.UiObject2;
/**
* Operations on the workspace screen.
@@ -85,6 +85,21 @@
return icon != null ? new AppIcon(mLauncher, icon) : null;
}
+
+ /**
+ * Returns an icon for the app; fails if the icon doesn't exist.
+ *
+ * @param appName name of the app
+ * @return app icon.
+ */
+ @NonNull
+ public AppIcon getWorkspaceAppIcon(String appName) {
+ return new AppIcon(mLauncher,
+ mLauncher.getObjectInContainer(
+ verifyActiveContainer(),
+ AppIcon.getAppIconSelector(appName)));
+ }
+
/**
* Ensures that workspace is scrollable. If it's not, drags an icon icons from hotseat to the
* second screen.
@@ -111,7 +126,7 @@
private void dragIconToNextScreen(AppIcon app, UiObject2 workspace) {
final Point dest = new Point(
mLauncher.getDevice().getDisplayWidth(), workspace.getVisibleBounds().centerY());
- app.getIcon().drag(dest, ICON_DRAG_SPEED);
+ app.getObject().drag(dest, ICON_DRAG_SPEED);
verifyActiveContainer();
}