1f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev/* 2f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * Copyright (C) 2014 The Android Open Source Project 3f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * 4f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * Licensed under the Apache License, Version 2.0 (the "License"); 5f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * you may not use this file except in compliance with the License. 6f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * You may obtain a copy of the License at 7f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * 8f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * http://www.apache.org/licenses/LICENSE-2.0 9f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * 10f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * Unless required by applicable law or agreed to in writing, software 11f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * distributed under the License is distributed on an "AS IS" BASIS, 12f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * See the License for the specific language governing permissions and 14f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * limitations under the License. 15f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev */ 16f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 17f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevpackage com.google.android.apps.common.testing.ui.espresso.action; 18f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 19f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.Espresso.onView; 20f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.action.ViewActions.pressImeActionButton; 21f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.action.ViewActions.scrollTo; 22f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.action.ViewActions.typeText; 23f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.action.ViewActions.typeTextIntoFocusedView; 24f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.assertion.ViewAssertions.matches; 25f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.isDisplayed; 26f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.withId; 27f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.withParent; 28f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.withText; 29f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static org.hamcrest.Matchers.allOf; 30f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static org.hamcrest.Matchers.containsString; 31f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static org.hamcrest.Matchers.is; 32f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 33f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport com.google.android.apps.common.testing.ui.espresso.PerformException; 34f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport com.google.android.apps.common.testing.ui.testapp.R; 35f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport com.google.android.apps.common.testing.ui.testapp.SendActivity; 36f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 37f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport android.test.ActivityInstrumentationTestCase2; 38f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport android.test.suitebuilder.annotation.LargeTest; 39f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 40f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev/** 41f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * {@link TypeTextAction} integration tests. 42f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev */ 43f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev@LargeTest 44f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevpublic class TypeTextActionIntegrationTest extends ActivityInstrumentationTestCase2<SendActivity> { 45f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev @SuppressWarnings("deprecation") 46f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public TypeTextActionIntegrationTest() { 47f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev // Supporting froyo. 48f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev super("com.google.android.apps.common.testing.ui.testapp", SendActivity.class); 49f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 50f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 51f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev @Override 52f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void setUp() throws Exception { 53f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev super.setUp(); 54f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev getActivity(); 55f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 56f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 57f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testTypeTextActionPerform() { 58f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(is(R.id.send_data_to_call_edit_text))).perform(typeText("Hello!")); 59f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 60f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 61f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev @SuppressWarnings("unchecked") 62f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testTypeTextActionPerformWithEnter() { 63f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(R.id.enter_data_edit_text)).perform(typeText("Hello World!\n")); 64f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(allOf(withId(R.id.enter_data_response_text), withText("Hello World!"))) 65f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev .check(matches(isDisplayed())); 66f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 67f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 68f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testTypeTextInFocusedView() { 69f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(is(R.id.send_data_to_call_edit_text))).perform(typeText( 70f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev "Hello World How Are You Today? I have alot of text to type.")); 71f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(is(R.id.send_data_to_call_edit_text))).perform(typeTextIntoFocusedView( 72f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev "Jolly good!")); 73f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(is(R.id.send_data_to_call_edit_text))).check(matches(withText( 74f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev "Hello World How Are You Today? I have alot of text to type.Jolly good!"))); 75f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 76f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 77f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testTypeTextInFocusedView_constraintBreakage() { 78f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(is(R.id.send_data_to_call_edit_text))).perform(typeText( 79f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev "Hello World How Are You Today? I have alot of text to type.")); 80f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev try { 81f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(is(R.id.edit_text_message))) 82f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev .perform(scrollTo(), typeTextIntoFocusedView("Jolly good!")); 83f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev fail("Should not have been able to type into focused view."); 84f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } catch (PerformException expected) { 85f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 86f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 87f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 88f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev @SuppressWarnings("unchecked") 89f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testTypeTextInDelegatedEditText() { 90f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev String toType = "honeybadger doesn't care"; 91f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(allOf(withParent(withId(R.id.delegating_edit_text)), withId(R.id.delegate_edit_text))) 92f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev .perform(scrollTo(), typeText(toType), pressImeActionButton()); 93f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(R.id.edit_text_message)) 94f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev .perform(scrollTo()) 95f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev .check(matches(withText(containsString(toType)))); 96f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 97f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev} 98