package org.robolectric.shadows.support.v4; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.util.TestRunnerWithManifest; import static junit.framework.Assert.*; @RunWith(TestRunnerWithManifest.class) public class ShadowViewPagerTest { private ViewPager pager; private TestPagerAdapter adapter; @Before public void setUp() throws Exception { pager = new ViewPager(RuntimeEnvironment.application); adapter = new TestPagerAdapter(); } @Test public void shouldSetAndGetAdapter() throws Exception { assertNull(pager.getAdapter()); pager.setAdapter(adapter); assertSame(adapter, pager.getAdapter()); } @Test public void test_getAndSetCurrentItem() throws Exception { pager.setAdapter(adapter); pager.setCurrentItem(2); assertEquals(2, pager.getCurrentItem()); } @Test public void setCurrentItem_shouldInvokeListener() throws Exception { pager.setAdapter(adapter); TestOnPageChangeListener listener = new TestOnPageChangeListener(); pager.setOnPageChangeListener(listener); assertFalse(listener.onPageSelectedCalled); pager.setCurrentItem(2); assertTrue(listener.onPageSelectedCalled); } @Test public void setCurrentItem_shouldntInvokeListenerWhenSettingRedundantly() throws Exception { TestOnPageChangeListener listener = new TestOnPageChangeListener(); pager.setOnPageChangeListener(listener); assertFalse(listener.onPageSelectedCalled); pager.setCurrentItem(pager.getCurrentItem()); assertFalse(listener.onPageSelectedCalled); } private static class TestPagerAdapter extends PagerAdapter { @Override public int getCount() { return 3; } @Override public boolean isViewFromObject(View view, Object object) { return false; } } private static class TestOnPageChangeListener extends ViewPager.SimpleOnPageChangeListener { public boolean onPageSelectedCalled; @Override public void onPageSelected(int position) { onPageSelectedCalled = true; } } }