/* * Copyright (C) 2013 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.uiautomator.tests.cts; import com.android.uiautomator.core.UiDevice; import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; import com.android.uiautomator.core.UiScrollable; import com.android.uiautomator.core.UiSelector; import com.android.uiautomator.testrunner.UiAutomatorTestCase; import android.content.ComponentName; import android.content.Intent; import android.os.RemoteException; public class TimeoutTest extends UiAutomatorTestCase { private static final String TEST_APP_PKG = "com.android.uiautomator.tests.cts.testapp"; private static final Intent START_MAIN_ACTIVITY = new Intent(Intent.ACTION_MAIN) .setComponent(new ComponentName(TEST_APP_PKG, TEST_APP_PKG + ".MainActivity")) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); private final UiObject mActionButton = new UiObject(new UiSelector().text("Go")); private final UiObject mDelayField = new UiObject(new UiSelector().description("delay")); private static final int DEFAULT_WAIT_FOR_WINDOW_TIMEOUT = 5500; private static final int SHORT_WAIT_FOR_WINDOW_TIMEOUT = 1000; private static final int LONG_WAIT_FOR_WINDOW_TIMEOUT = 30000; private static final int THRESHOLD = 500; @Override protected void setUp() throws Exception { super.setUp(); // Launch the test app getInstrumentation().getContext().startActivity(START_MAIN_ACTIVITY); // Navigate to the Timeout Test UiScrollable listView = new UiScrollable(new UiSelector() .className(android.widget.ListView.class.getName())); UiObject testItem = listView.getChildByText(new UiSelector() .className(android.widget.TextView.class.getName()), "Timeout Test"); testItem.click(); } public void testClickAndWaitForNewWindowShortTimeoutNotReached() throws UiObjectNotFoundException { // Trigger the app to start a new activity just before the short timeout expires mDelayField.setText(Integer.toString(SHORT_WAIT_FOR_WINDOW_TIMEOUT - THRESHOLD)); assertTrue("clickAndWaitForNewWindow() timed out too early", mActionButton.clickAndWaitForNewWindow(SHORT_WAIT_FOR_WINDOW_TIMEOUT)); // Wait until the new activity launches mActionButton.waitUntilGone(2 * THRESHOLD); getUiDevice().pressBack(); } public void testClickAndWaitForNewWindowShortTimeoutReached() throws UiObjectNotFoundException { // Trigger the app to start a new activity just after the short timeout expires mDelayField.setText(Integer.toString(SHORT_WAIT_FOR_WINDOW_TIMEOUT + THRESHOLD)); assertFalse("clickAndWaitForNewWindow() did not timeout", mActionButton.clickAndWaitForNewWindow(SHORT_WAIT_FOR_WINDOW_TIMEOUT)); // Wait until the new activity launches mActionButton.waitUntilGone(2 * THRESHOLD); getUiDevice().pressBack(); } public void testClickAndWaitForNewWindowDefaultTimeoutNotReached() throws UiObjectNotFoundException { // Trigger the app to start a new activity just before the default timeout expires mDelayField.setText(Integer.toString(DEFAULT_WAIT_FOR_WINDOW_TIMEOUT - THRESHOLD)); assertTrue("clickAndWaitForNewWindow() timed out too early", mActionButton.clickAndWaitForNewWindow()); // Wait until the new activity launches mActionButton.waitUntilGone(2 * THRESHOLD); getUiDevice().pressBack(); } public void testClickAndWaitForNewWindowDefaultTimeoutReached() throws UiObjectNotFoundException { // Trigger the app to start a new activity just after the default timeout expires mDelayField.setText(Integer.toString(DEFAULT_WAIT_FOR_WINDOW_TIMEOUT + THRESHOLD)); assertFalse("clickAndWaitForNewWindow() did not timeout", mActionButton.clickAndWaitForNewWindow()); // Wait until the new activity launches mActionButton.waitUntilGone(2 * THRESHOLD); getUiDevice().pressBack(); } public void testClickAndWaitForNewWindowLongTimeoutNotReached() throws UiObjectNotFoundException { // Trigger the app to start a new activity just before the short timeout expires mDelayField.setText(Integer.toString(LONG_WAIT_FOR_WINDOW_TIMEOUT - THRESHOLD)); assertTrue("clickAndWaitForNewWindow() timed out too early", mActionButton.clickAndWaitForNewWindow(LONG_WAIT_FOR_WINDOW_TIMEOUT)); // Wait until the new activity launches mActionButton.waitUntilGone(2 * THRESHOLD); getUiDevice().pressBack(); } public void testClickAndWaitForNewWindowLongTimeoutReached() throws UiObjectNotFoundException { // Trigger the app to start a new activity just after the short timeout expires mDelayField.setText(Integer.toString(LONG_WAIT_FOR_WINDOW_TIMEOUT + THRESHOLD)); assertFalse("clickAndWaitForNewWindow() did not timeout", mActionButton.clickAndWaitForNewWindow(LONG_WAIT_FOR_WINDOW_TIMEOUT)); // Wait until the new activity launches mActionButton.waitUntilGone(2 * THRESHOLD); getUiDevice().pressBack(); } @Override protected void tearDown() { // Return to the homescreen after each test getUiDevice().pressHome(); } }