159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov/* 259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * Copyright (C) 2015 The Android Open Source Project 359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * 459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License"); 559606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * you may not use this file except in compliance with the License. 659606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * You may obtain a copy of the License at 759606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * 859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * http://www.apache.org/licenses/LICENSE-2.0 959606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * 1059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * Unless required by applicable law or agreed to in writing, software 1159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS, 1259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * See the License for the specific language governing permissions and 1459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * limitations under the License. 1559606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov */ 1659606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovpackage android.support.v4.view; 1759606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 18ff22d81f6561f6cdd2a91eb63238c41079927a22Kirill Grouchnikovimport android.support.coreui.test.R; 1959606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 2059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovimport static android.support.test.espresso.Espresso.onView; 2159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovimport static android.support.test.espresso.action.ViewActions.click; 2259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA; 2359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.withId; 2459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.withText; 2529212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikovimport static android.support.v4.view.ViewPagerActions.clickBetweenTwoTitles; 2629212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikovimport static android.support.v4.view.ViewPagerActions.scrollRight; 2729212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikovimport static android.support.v4.view.ViewPagerActions.scrollToPage; 2859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovimport static org.hamcrest.Matchers.allOf; 2939e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport static org.junit.Assert.assertEquals; 3059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 3159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov/** 3259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov * Provides assertions that depend on the interactive nature of <code>PagerTabStrip</code>. 3359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov */ 3459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikovpublic class ViewPagerWithTabStripTest extends BaseViewPagerTest<ViewPagerWithTabStripActivity> { 3559606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov public ViewPagerWithTabStripTest() { 3659606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov super(ViewPagerWithTabStripActivity.class); 3759606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov } 3859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 3959606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov @Override 4059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov protected Class getStripClass() { 4159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov return PagerTabStrip.class; 4259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov } 4359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 4459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov @Override 4529212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikov protected void assertStripInteraction(boolean smoothScroll) { 4659606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // The following block tests that ViewPager page selection changes on clicking titles of 4759606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // various tabs as PagerTabStrip is interactive 4859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 4959606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click the tab title for page #0 and verify that we're still on page #0 5059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov onView(allOf(isDescendantOfA(withId(R.id.titles)), withText("Red"))).perform(click()); 5159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click tab #0 on tab #0", 0, mViewPager.getCurrentItem()); 5259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 5359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click the tab title for page #1 and verify that we're on page #1 5459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov onView(allOf(isDescendantOfA(withId(R.id.titles)), withText("Green"))).perform(click()); 5559606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click tab #1 on tab #0", 1, mViewPager.getCurrentItem()); 5659606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 5759606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click the tab title for page #0 and verify that we're on page #0 5859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov onView(allOf(isDescendantOfA(withId(R.id.titles)), withText("Red"))).perform(click()); 5959606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click tab #0 on tab #1", 0, mViewPager.getCurrentItem()); 6059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 6159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Go back to page #1 6229212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikov onView(withId(R.id.pager)).perform(scrollRight(smoothScroll)); 6359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 6459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click the tab title for page #1 and verify that we're still on page #1 6559606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov onView(allOf(isDescendantOfA(withId(R.id.titles)), withText("Green"))).perform(click()); 6659606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click tab #1 on tab #1", 1, mViewPager.getCurrentItem()); 6759606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 6859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click the tab title for page #2 and verify that we're on page #2 6959606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov onView(allOf(isDescendantOfA(withId(R.id.titles)), withText("Blue"))).perform(click()); 7059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click tab #2 on tab #1", 2, mViewPager.getCurrentItem()); 7159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 7259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // The following block tests that ViewPager page selection changes on clicking in 7359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // between titles of tabs as that functionality is exposed by PagerTabStrip 7459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 7559606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Scroll back to page #0 7629212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikov onView(withId(R.id.pager)).perform(scrollToPage(0, smoothScroll)); 7759606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 7859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click between titles of page #0 and page #1 and verify that we're on page #1 7929212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikov onView(withId(R.id.titles)).perform(clickBetweenTwoTitles("Red", "Green")); 8059606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click in between tabs #0 and #1 on tab #0", 1, mViewPager.getCurrentItem()); 8159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 8259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click between titles of page #0 and page #1 and verify that we're on page #0 8329212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikov onView(withId(R.id.titles)).perform(clickBetweenTwoTitles("Red", "Green")); 8459606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click in between tabs #0 and #1 on tab #1", 0, mViewPager.getCurrentItem()); 8559606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 8659606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Go back to page #1 8729212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikov onView(withId(R.id.pager)).perform(scrollRight(smoothScroll)); 8859606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov 8959606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov // Click between titles of page #1 and page #2 and verify that we're on page #2 9029212b535486a2f7c6dc7e35ede84f9fa4816e70Kirill Grouchnikov onView(withId(R.id.titles)).perform(clickBetweenTwoTitles("Green", "Blue")); 9159606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov assertEquals("Click in between tabs #1 and #2 on tab #1", 2, mViewPager.getCurrentItem()); 9259606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov } 9359606ec8e4d812326448f0bf6acde5a0a167a958Kirill Grouchnikov} 94