summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Tryshev <vadimt@google.com>2019-06-27 00:20:51 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-06-27 00:20:51 +0000
commit1703eb8b88d1557696b13f6dbbd1db2c15a5993c (patch)
tree7368bff78de9586abee024af48b465b9df66e815
parentf45509ec8e4a00436a18c2cce77c166321b0af78 (diff)
parent007e7e94b317ab2d9aa03636be5037bc3cee2216 (diff)
downloadandroid_packages_apps_Trebuchet-1703eb8b88d1557696b13f6dbbd1db2c15a5993c.tar.gz
android_packages_apps_Trebuchet-1703eb8b88d1557696b13f6dbbd1db2c15a5993c.tar.bz2
android_packages_apps_Trebuchet-1703eb8b88d1557696b13f6dbbd1db2c15a5993c.zip
Merge "Revert "Converting even more tests to TAPL"" into ub-launcher3-qt-dev
-rw-r--r--tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java31
-rw-r--r--tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java19
-rw-r--r--tests/src/com/android/launcher3/ui/TestViewHelpers.java114
-rw-r--r--tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java16
-rw-r--r--tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java32
-rw-r--r--tests/tapl/com/android/launcher3/tapl/Launchable.java6
-rw-r--r--tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java4
-rw-r--r--tests/tapl/com/android/launcher3/tapl/Widget.java13
-rw-r--r--tests/tapl/com/android/launcher3/tapl/Widgets.java30
9 files changed, 202 insertions, 63 deletions
diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
index abaad20b2..4a0ca5c24 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -20,6 +20,7 @@ import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static com.android.launcher3.ui.TaplTestsLauncher3.getAppPackageName;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static java.lang.System.exit;
@@ -37,7 +38,10 @@ import android.util.Log;
import androidx.test.InstrumentationRegistry;
import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.BySelector;
+import androidx.test.uiautomator.Direction;
import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject2;
import androidx.test.uiautomator.Until;
import com.android.launcher3.Launcher;
@@ -46,6 +50,7 @@ import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherState;
import com.android.launcher3.MainThreadExecutor;
+import com.android.launcher3.ResourceUtils;
import com.android.launcher3.Utilities;
import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.model.AppLaunchTracker;
@@ -81,6 +86,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 = 10000;
private static final String TAG = "AbstractLauncherUiTest";
@@ -175,6 +181,31 @@ public abstract class AbstractLauncherUiTest {
}
/**
+ * Scrolls the {@param container} until it finds an object matching {@param condition}.
+ *
+ * @return the matching object.
+ */
+ protected UiObject2 scrollAndFind(UiObject2 container, BySelector condition) {
+ final int margin = ResourceUtils.getNavbarSize(
+ ResourceUtils.NAVBAR_BOTTOM_GESTURE_SIZE, mLauncher.getResources()) + 1;
+ container.setGestureMargins(0, 0, 0, margin);
+
+ int i = 0;
+ for (; ; ) {
+ // findObject can only execute after spring settles.
+ mDevice.wait(Until.findObject(condition), SHORT_UI_TIMEOUT);
+ UiObject2 widget = container.findObject(condition);
+ if (widget != null && widget.getVisibleBounds().intersects(
+ 0, 0, mDevice.getDisplayWidth(),
+ mDevice.getDisplayHeight() - margin)) {
+ return widget;
+ }
+ if (++i > 40) fail("Too many attempts");
+ container.scroll(Direction.DOWN, 1f);
+ }
+ }
+
+ /**
* Removes all icons from homescreen and hotseat.
*/
public void clearHomescreen() throws Throwable {
diff --git a/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java b/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java
index 4dab44fad..c3168f812 100644
--- a/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java
+++ b/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java
@@ -216,8 +216,7 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest {
final AppIcon app = allApps.getAppIcon("TestActivity7");
assertNotNull("AppIcon.launch returned null", app.launch(getAppPackageName()));
test.executeOnLauncher(launcher -> assertTrue(
- "Launcher activity is the top activity; expecting another activity to be the "
- + "top "
+ "Launcher activity is the top activity; expecting another activity to be the top "
+ "one",
test.isInBackground(launcher)));
} finally {
@@ -305,8 +304,11 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest {
switchToAllApps();
allApps.freeze();
try {
- allApps.getAppIcon(APP_NAME).dragToWorkspace();
- mLauncher.getWorkspace().getWorkspaceAppIcon(APP_NAME).launch(getAppPackageName());
+ allApps.
+ getAppIcon(APP_NAME).
+ dragToWorkspace().
+ getWorkspaceAppIcon(APP_NAME).
+ launch(getAppPackageName());
} finally {
allApps.unfreeze();
}
@@ -333,8 +335,13 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest {
getMenuItem(0);
final String shortcutName = menuItem.getText();
- menuItem.dragToWorkspace();
- mLauncher.getWorkspace().getWorkspaceAppIcon(shortcutName).launch(getAppPackageName());
+ // 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(getAppPackageName());
} finally {
allApps.unfreeze();
}
diff --git a/tests/src/com/android/launcher3/ui/TestViewHelpers.java b/tests/src/com/android/launcher3/ui/TestViewHelpers.java
index d0df66485..d13d31952 100644
--- a/tests/src/com/android/launcher3/ui/TestViewHelpers.java
+++ b/tests/src/com/android/launcher3/ui/TestViewHelpers.java
@@ -18,15 +18,28 @@ package com.android.launcher3.ui;
import static androidx.test.InstrumentationRegistry.getInstrumentation;
import static androidx.test.InstrumentationRegistry.getTargetContext;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
import android.content.ComponentName;
+import android.content.Context;
+import android.graphics.Point;
import android.os.Process;
+import android.os.SystemClock;
import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+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;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
+import com.android.launcher3.R;
import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.testcomponent.AppWidgetNoConfig;
import com.android.launcher3.testcomponent.AppWidgetWithConfig;
@@ -37,6 +50,21 @@ import java.util.function.Function;
public class TestViewHelpers {
private static final String TAG = "TestViewHelpers";
+ private static UiDevice getDevice() {
+ return UiDevice.getInstance(getInstrumentation());
+ }
+
+ public static UiObject2 findViewById(int id) {
+ return getDevice().wait(Until.findObject(getSelectorForId(id)),
+ AbstractLauncherUiTest.DEFAULT_UI_TIMEOUT);
+ }
+
+ public static BySelector getSelectorForId(int id) {
+ final Context targetContext = getTargetContext();
+ String name = targetContext.getResources().getResourceEntryName(id);
+ return By.res(targetContext.getPackageName(), name);
+ }
+
/**
* Finds a widget provider which can fit on the home screen.
*
@@ -63,6 +91,92 @@ public class TestViewHelpers {
return info;
}
+ /**
+ * Drags an icon to the center of homescreen.
+ *
+ * @param icon object that is either app icon or shortcut icon
+ */
+ public static void dragToWorkspace(UiObject2 icon, boolean expectedToShowShortcuts) {
+ Point center = icon.getVisibleCenter();
+
+ // Action Down
+ final long downTime = SystemClock.uptimeMillis();
+ sendPointer(downTime, MotionEvent.ACTION_DOWN, center);
+
+ UiObject2 dragLayer = findViewById(R.id.drag_layer);
+
+ if (expectedToShowShortcuts) {
+ // Make sure shortcuts show up, and then move a bit to hide them.
+ assertNotNull(findViewById(R.id.deep_shortcuts_container));
+
+ Point moveLocation = new Point(center);
+ int distanceToMove =
+ getTargetContext().getResources().getDimensionPixelSize(
+ R.dimen.deep_shortcuts_start_drag_threshold) + 50;
+ if (moveLocation.y - distanceToMove >= dragLayer.getVisibleBounds().top) {
+ moveLocation.y -= distanceToMove;
+ } else {
+ moveLocation.y += distanceToMove;
+ }
+ movePointer(downTime, center, moveLocation);
+
+ assertNull(findViewById(R.id.deep_shortcuts_container));
+ }
+
+ // Wait until Remove/Delete target is visible
+ assertNotNull(findViewById(R.id.delete_target_text));
+
+ Point moveLocation = dragLayer.getVisibleCenter();
+
+ // Move to center
+ movePointer(downTime, center, moveLocation);
+ sendPointer(downTime, MotionEvent.ACTION_UP, moveLocation);
+
+ // Wait until remove target is gone.
+ getDevice().wait(Until.gone(getSelectorForId(R.id.delete_target_text)),
+ AbstractLauncherUiTest.DEFAULT_UI_TIMEOUT);
+ }
+
+ private static void movePointer(long downTime, Point from, Point to) {
+ while (!from.equals(to)) {
+ try {
+ Thread.sleep(20);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ from.x = getNextMoveValue(to.x, from.x);
+ from.y = getNextMoveValue(to.y, from.y);
+ sendPointer(downTime, MotionEvent.ACTION_MOVE, from);
+ }
+ }
+
+ private static int getNextMoveValue(int targetValue, int oldValue) {
+ if (targetValue - oldValue > 10) {
+ return oldValue + 10;
+ } else if (targetValue - oldValue < -10) {
+ return oldValue - 10;
+ } else {
+ return targetValue;
+ }
+ }
+
+ public static void sendPointer(long downTime, int action, Point point) {
+ MotionEvent event = MotionEvent.obtain(downTime,
+ SystemClock.uptimeMillis(), action, point.x, point.y, 0);
+ getInstrumentation().sendPointerSync(event);
+ event.recycle();
+ }
+
+ /**
+ * Opens widget tray and returns the recycler view.
+ */
+ public static UiObject2 openWidgetsTray() {
+ final UiDevice device = getDevice();
+ device.pressKeyCode(KeyEvent.KEYCODE_W, KeyEvent.META_CTRL_ON);
+ device.waitForIdle();
+ return findViewById(R.id.widgets_list_view);
+ }
+
public static View findChildView(ViewGroup parent, Function<View, Boolean> condition) {
for (int i = 0; i < parent.getChildCount(); ++i) {
final View child = parent.getChildAt(i);
diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
index dc72bda9a..5eb5f1992 100644
--- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java
@@ -27,18 +27,20 @@ import android.view.View;
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.UiObject2;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherAppWidgetInfo;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.Workspace;
-import com.android.launcher3.tapl.Widgets;
import com.android.launcher3.testcomponent.WidgetConfigActivity;
import com.android.launcher3.ui.AbstractLauncherUiTest;
import com.android.launcher3.ui.TestViewHelpers;
import com.android.launcher3.util.Condition;
import com.android.launcher3.util.Wait;
import com.android.launcher3.util.rule.ShellCommandRule;
+import com.android.launcher3.widget.WidgetCell;
import org.junit.Before;
import org.junit.Ignore;
@@ -69,6 +71,7 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest {
}
@Test
+ // Convert test to TAPL b/131116002
public void testWidgetConfig() throws Throwable {
runTest(false, true);
}
@@ -80,6 +83,7 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest {
}
@Test
+ // Convert test to TAPL b/131116002
public void testConfigCancelled() throws Throwable {
runTest(false, false);
}
@@ -100,13 +104,15 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest {
clearHomescreen();
mActivityMonitor.startLauncher();
- final Widgets widgets = mLauncher.getWorkspace().openAllWidgets();
+ // Open widget tray and wait for load complete.
+ final UiObject2 widgetContainer = TestViewHelpers.openWidgetsTray();
+ Wait.atMost(null, Condition.minChildCount(widgetContainer, 2), DEFAULT_UI_TIMEOUT);
// Drag widget to homescreen
WidgetConfigStartupMonitor monitor = new WidgetConfigStartupMonitor();
- widgets.
- getWidget(mWidgetInfo.getLabel(mTargetContext.getPackageManager())).
- dragToWorkspace();
+ UiObject2 widget = scrollAndFind(widgetContainer, By.clazz(WidgetCell.class)
+ .hasDescendant(By.text(mWidgetInfo.getLabel(mTargetContext.getPackageManager()))));
+ TestViewHelpers.dragToWorkspace(widget, false);
// Widget id for which the config activity was opened
mWidgetId = monitor.getWidgetId();
diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
index 4529a80d1..0061568cc 100644
--- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
+++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java
@@ -19,12 +19,20 @@ import static org.junit.Assert.assertTrue;
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.UiObject2;
+import android.view.View;
+import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherAppWidgetInfo;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
+import com.android.launcher3.Workspace.ItemOperator;
import com.android.launcher3.ui.AbstractLauncherUiTest;
import com.android.launcher3.ui.TestViewHelpers;
+import com.android.launcher3.util.Condition;
+import com.android.launcher3.util.Wait;
import com.android.launcher3.util.rule.ShellCommandRule;
+import com.android.launcher3.widget.WidgetCell;
import org.junit.Ignore;
import org.junit.Rule;
@@ -53,6 +61,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest {
performTest();
}
+ // Convert to TAPL b/131116002
private void performTest() throws Throwable {
clearHomescreen();
mActivityMonitor.startLauncher();
@@ -60,15 +69,22 @@ public class AddWidgetTest extends AbstractLauncherUiTest {
final LauncherAppWidgetProviderInfo widgetInfo =
TestViewHelpers.findWidgetProvider(this, false /* hasConfigureScreen */);
- mLauncher.
- getWorkspace().
- openAllWidgets().
- getWidget(widgetInfo.getLabel(mTargetContext.getPackageManager())).
- dragToWorkspace();
+ // Open widget tray and wait for load complete.
+ final UiObject2 widgetContainer = TestViewHelpers.openWidgetsTray();
+ Wait.atMost(null, Condition.minChildCount(widgetContainer, 2), DEFAULT_UI_TIMEOUT);
- assertTrue(mActivityMonitor.itemExists(
- (info, view) -> info instanceof LauncherAppWidgetInfo &&
+ // Drag widget to homescreen
+ UiObject2 widget = scrollAndFind(widgetContainer, By.clazz(WidgetCell.class)
+ .hasDescendant(By.text(widgetInfo.getLabel(mTargetContext.getPackageManager()))));
+ TestViewHelpers.dragToWorkspace(widget, false);
+
+ assertTrue(mActivityMonitor.itemExists(new ItemOperator() {
+ @Override
+ public boolean evaluate(ItemInfo info, View view) {
+ return info instanceof LauncherAppWidgetInfo &&
((LauncherAppWidgetInfo) info).providerName.getClassName().equals(
- widgetInfo.provider.getClassName())).call());
+ widgetInfo.provider.getClassName());
+ }
+ }).call());
}
}
diff --git a/tests/tapl/com/android/launcher3/tapl/Launchable.java b/tests/tapl/com/android/launcher3/tapl/Launchable.java
index 04b801945..d4bdafa76 100644
--- a/tests/tapl/com/android/launcher3/tapl/Launchable.java
+++ b/tests/tapl/com/android/launcher3/tapl/Launchable.java
@@ -68,7 +68,7 @@ abstract class Launchable {
/**
* Drags an object to the center of homescreen.
*/
- public void dragToWorkspace() {
+ public Workspace dragToWorkspace() {
final Point launchableCenter = getObject().getVisibleCenter();
final Point displaySize = mLauncher.getRealDisplaySize();
final int width = displaySize.x / 2;
@@ -80,6 +80,10 @@ abstract class Launchable {
launchableCenter.x - width / 2 : launchableCenter.x + width / 2,
displaySize.y / 2),
getLongPressIndicator());
+ try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
+ "dragged launchable to workspace")) {
+ return new Workspace(mLauncher);
+ }
}
protected abstract String getLongPressIndicator();
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 1641d702d..a7e633619 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -614,12 +614,12 @@ public final class LauncherInstrumentation {
@NonNull
UiObject2 waitForLauncherObject(BySelector selector) {
- return waitForObjectBySelector(By.copy(selector).pkg(getLauncherPackageName()));
+ return waitForObjectBySelector(selector.pkg(getLauncherPackageName()));
}
@NonNull
UiObject2 tryWaitForLauncherObject(BySelector selector, long timeout) {
- return tryWaitForObjectBySelector(By.copy(selector).pkg(getLauncherPackageName()), timeout);
+ return tryWaitForObjectBySelector(selector.pkg(getLauncherPackageName()), timeout);
}
@NonNull
diff --git a/tests/tapl/com/android/launcher3/tapl/Widget.java b/tests/tapl/com/android/launcher3/tapl/Widget.java
index 1b6d8c4a6..128789dbc 100644
--- a/tests/tapl/com/android/launcher3/tapl/Widget.java
+++ b/tests/tapl/com/android/launcher3/tapl/Widget.java
@@ -18,16 +18,7 @@ package com.android.launcher3.tapl;
import androidx.test.uiautomator.UiObject2;
-/**
- * Widget in workspace or a widget list.
- */
-public final class Widget extends Launchable {
- Widget(LauncherInstrumentation launcher, UiObject2 icon) {
- super(launcher, icon);
- }
-
- @Override
- protected String getLongPressIndicator() {
- return "drop_target_bar";
+public class Widget {
+ Widget(LauncherInstrumentation launcher, UiObject2 widget) {
}
}
diff --git a/tests/tapl/com/android/launcher3/tapl/Widgets.java b/tests/tapl/com/android/launcher3/tapl/Widgets.java
index cbc3a815f..94003be91 100644
--- a/tests/tapl/com/android/launcher3/tapl/Widgets.java
+++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java
@@ -16,12 +16,6 @@
package com.android.launcher3.tapl;
-import static org.junit.Assert.fail;
-
-import android.graphics.Point;
-
-import androidx.test.uiautomator.By;
-import androidx.test.uiautomator.BySelector;
import androidx.test.uiautomator.Direction;
import androidx.test.uiautomator.UiObject2;
@@ -81,28 +75,4 @@ public final class Widgets extends LauncherInstrumentation.VisibleContainer {
protected LauncherInstrumentation.ContainerType getContainerType() {
return LauncherInstrumentation.ContainerType.WIDGETS;
}
-
- public Widget getWidget(String label) {
- final int margin = ResourceUtils.getNavbarSize(
- ResourceUtils.NAVBAR_BOTTOM_GESTURE_SIZE, mLauncher.getResources()) + 1;
- final UiObject2 widgetsContainer = verifyActiveContainer();
- widgetsContainer.setGestureMargins(0, 0, 0, margin);
-
- final Point displaySize = mLauncher.getRealDisplaySize();
-
- int i = 0;
- final BySelector selector = By.
- clazz("com.android.launcher3.widget.WidgetCell").
- hasDescendant(By.text(label));
-
- for (; ; ) {
- final UiObject2 widget = mLauncher.tryWaitForLauncherObject(selector, 300);
- if (widget != null && widget.getVisibleBounds().intersects(
- 0, 0, displaySize.x, displaySize.y - margin)) {
- return new Widget(mLauncher, widget);
- }
- if (++i > 40) fail("Too many attempts");
- widgetsContainer.scroll(Direction.DOWN, 1f);
- }
- }
}