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.testapp; 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.click; 21f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.action.ViewActions.longClick; 22f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.action.ViewActions.pressMenuKey; 23f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.assertion.ViewAssertions.doesNotExist; 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.isRoot; 27f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.withId; 28f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport static com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.withText; 29f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 30f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport android.os.Build; 31f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport android.test.ActivityInstrumentationTestCase2; 32f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevimport android.test.suitebuilder.annotation.LargeTest; 33f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 34f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev/** 35f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev * Ensures view root ordering works properly. 36f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev */ 37f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev@LargeTest 38f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelevpublic class MenuTest extends ActivityInstrumentationTestCase2<MenuActivity> { 39f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev @SuppressWarnings("deprecation") 40f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public MenuTest() { 41f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev // This constructor was deprecated - but we want to support lower API levels. 42f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev super("com.google.android.apps.common.testing.ui.testapp", MenuActivity.class); 43f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 44f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 45f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev @Override 46f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void setUp() throws Exception { 47f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev super.setUp(); 48f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev getActivity(); 49f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 50f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 51f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testPopupMenu() { 52f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 53f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev // popup menus are post honeycomb. 54f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev return; 55f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 56f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withText(R.string.popup_item_1_text)).check(doesNotExist()); 57f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(R.id.popup_button)).perform(click()); 58f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withText(R.string.popup_item_1_text)).check(matches(isDisplayed())).perform(click()); 59f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 60f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(R.id.text_menu_result)).check(matches(withText(R.string.popup_item_1_text))); 61f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 62f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 63f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testContextMenu() { 64f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withText(R.string.context_item_2_text)).check(doesNotExist()); 65f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(R.id.text_context_menu)).perform(longClick()); 66f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withText(R.string.context_item_2_text)).check(matches(isDisplayed())).perform(click()); 67f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 68f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(R.id.text_menu_result)).check(matches(withText(R.string.context_item_2_text))); 69f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 70f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 71f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev public void testOptionMenu() { 72f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withText(R.string.options_item_3_text)).check(doesNotExist()); 73f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(isRoot()).perform(pressMenuKey()); 74f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withText(R.string.options_item_3_text)).check(matches(isDisplayed())).perform(click()); 75f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev 76f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev onView(withId(R.id.text_menu_result)).check(matches(withText(R.string.options_item_3_text))); 77f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev } 78f69eb9ac2856f470cb79f57141f711ed3ceed99dNick Korostelev} 79