Add sanity test for work tab

Create work profile and assert the tab is there.
Also, fixed openAllApps in the test.

FIX: 74390632

Change-Id: I526b4da0609643057a3d2306fa0034d57167840e
This commit is contained in:
Tony Mak 2018-03-08 18:14:23 +00:00
parent f2523dc8aa
commit 87827b5d90
2 changed files with 94 additions and 7 deletions

View File

@ -15,9 +15,6 @@
*/ */
package com.android.launcher3.ui; package com.android.launcher3.ui;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import android.app.Instrumentation; import android.app.Instrumentation;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
@ -37,22 +34,27 @@ import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject2; import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.Until; import android.support.test.uiautomator.Until;
import android.view.MotionEvent; import android.view.MotionEvent;
import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.LauncherSettings; import com.android.launcher3.LauncherSettings;
import com.android.launcher3.MainThreadExecutor; import com.android.launcher3.MainThreadExecutor;
import com.android.launcher3.R; import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.LauncherAppsCompat;
import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.testcomponent.AppWidgetNoConfig; import com.android.launcher3.testcomponent.AppWidgetNoConfig;
import com.android.launcher3.testcomponent.AppWidgetWithConfig; import com.android.launcher3.testcomponent.AppWidgetWithConfig;
import org.junit.Before;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.junit.Before;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
/** /**
* Base class for all instrumentation tests providing various utility methods. * Base class for all instrumentation tests providing various utility methods.
@ -63,6 +65,7 @@ public abstract class AbstractLauncherUiTest {
public static final long DEFAULT_BROADCAST_TIMEOUT_SECS = 5; public static final long DEFAULT_BROADCAST_TIMEOUT_SECS = 5;
public static final long DEFAULT_UI_TIMEOUT = 3000; 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; public static final long DEFAULT_WORKER_TIMEOUT_SECS = 5;
protected MainThreadExecutor mMainThreadExecutor = new MainThreadExecutor(); protected MainThreadExecutor mMainThreadExecutor = new MainThreadExecutor();
@ -95,8 +98,13 @@ public abstract class AbstractLauncherUiTest {
protected UiObject2 openAllApps() { protected UiObject2 openAllApps() {
mDevice.waitForIdle(); mDevice.waitForIdle();
if (FeatureFlags.NO_ALL_APPS_ICON) { if (FeatureFlags.NO_ALL_APPS_ICON) {
// clicking on the page indicator brings up all apps tray on non tablets. UiObject2 hotseat = mDevice.wait(
findViewById(R.id.page_indicator).click(); Until.findObject(getSelectorForId(R.id.hotseat)), 2500);
Point start = hotseat.getVisibleCenter();
int endY = (int) (mDevice.getDisplayHeight() * 0.1f);
// 100 px/step
mDevice.swipe(start.x, start.y, start.x, endY, (start.y - endY) / 100);
} else { } else {
mDevice.wait(Until.findObject( mDevice.wait(Until.findObject(
By.desc(mTargetContext.getString(R.string.all_apps_button_label))), By.desc(mTargetContext.getString(R.string.all_apps_button_label))),

View File

@ -0,0 +1,79 @@
/*
* Copyright 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.ui;
import android.support.test.filters.LargeTest;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.Until;
import com.android.launcher3.R;
import com.android.launcher3.util.Condition;
import com.android.launcher3.util.Wait;
import com.android.launcher3.util.rule.LauncherActivityRule;
import com.android.launcher3.util.rule.ShellCommandRule;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertTrue;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class WorkTabTest extends AbstractLauncherUiTest {
@Rule
public LauncherActivityRule mActivityMonitor = new LauncherActivityRule();
@Rule
public ShellCommandRule mDefaultLauncherRule = ShellCommandRule.setDefaultLauncher();
private int mProfileUserId;
@Before
public void createWorkProfile() throws Exception {
String output =
mDevice.executeShellCommand(
"pm create-user --profileOf 0 --managed TestProfile");
assertTrue("Failed to create work profile", output.startsWith("Success"));
String[] tokens = output.split("\\s+");
mProfileUserId = Integer.parseInt(tokens[tokens.length - 1]);
mDevice.executeShellCommand("am start-user " + mProfileUserId);
}
@After
public void removeWorkProfile() throws Exception {
mDevice.executeShellCommand("pm remove-user " + mProfileUserId);
}
@Test
public void workTabExists() {
mActivityMonitor.startLauncher();
// Open all apps and wait for load complete
final UiObject2 appsContainer = openAllApps();
assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT));
assertTrue("Personal tab is missing",
mDevice.wait(Until.hasObject(getSelectorForId(R.id.tab_personal)),
LARGE_UI_TIMEOUT));
assertTrue("Work tab is missing",
mDevice.wait(Until.hasObject(getSelectorForId(R.id.tab_work)), LARGE_UI_TIMEOUT));
}
}