ViewPagerTest.java revision eefb5d8c984ecd9b37b886cde33cac11ff31d050
117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perrypackage com.xtremelabs.robolectric.shadows; 217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 317ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.app.Application; 417ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.content.Context; 517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.os.Bundle; 617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.support.v4.app.Fragment; 717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.support.v4.app.FragmentActivity; 817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.support.v4.app.FragmentManager; 917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.support.v4.app.FragmentPagerAdapter; 10eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultzimport android.support.v4.view.PagerAdapter; 1117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.support.v4.view.ViewPager; 1217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.view.LayoutInflater; 1317ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.view.View; 1417ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.view.ViewGroup; 1517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport android.widget.Button; 1617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 1717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport com.xtremelabs.robolectric.tester.android.util.TestFragmentManager; 1817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport org.junit.Assert; 1917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport org.junit.Before; 2017ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport org.junit.Test; 2117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perryimport org.junit.runner.RunWith; 2217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 23eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultzimport static junit.framework.Assert.assertEquals; 24eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 2517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry@RunWith(WithTestDefaultsRunner.class) 2617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perrypublic class ViewPagerTest { 2717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private Context context; 2817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private ViewPager viewPager; 2917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private FragmentManager fragmentManager; 3017ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private MockFragmentActivity fragmentActivity; 3117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 3217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry @Before 3317ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry public void setup() throws Exception { 3417ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry context = new Application(); 3517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry viewPager = new ViewPager(context); 3617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry viewPager.setId(8934); 3717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry fragmentActivity = new MockFragmentActivity(viewPager); 3817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry fragmentActivity.onCreate(null); 3917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry fragmentManager = new TestFragmentManager(fragmentActivity); 4017ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 4117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 4217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry @Test 43eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public void setAdapter_shouldCreateFirstView_ifThereIsData() throws Exception { 44eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz OneItemPagerAdapter adapter = new OneItemPagerAdapter(fragmentManager); 4517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry viewPager.setAdapter(adapter); 4617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 4717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry Assert.assertSame(viewPager.getChildAt(0), adapter.createdFragment.getView()); 4817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 4917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 50eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz @Test 51eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public void setAdapter_shouldNotBlowUp_ifThereIsNoData() throws Exception { 52eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz PagerAdapter adapter = new MockEmptyPagerAdapter(fragmentManager); 53eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz viewPager.setAdapter(adapter); 54eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz //pass 55eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 56eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 57eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz @Test 58eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public void setAdapter_shouldInvokeTheRealPagerAdaptersRegisterDataSetObserver() throws Exception { 59eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz ItemAddingPagerAdapter adapter = new ItemAddingPagerAdapter(fragmentManager); 60eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz viewPager.setAdapter(adapter); 61eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 62eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 63eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz @Test 64eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public void shouldUpdateWhenAdapterNotifiesDataSetChanged() throws Exception { 65eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz ItemAddingPagerAdapter adapter = new ItemAddingPagerAdapter(fragmentManager); 66eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz viewPager.setAdapter(adapter); 67eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 68eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz assertEquals(0, viewPager.getChildCount()); 69eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz adapter.addItem(); 70eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz adapter.notifyDataSetChanged(); 71eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 72eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz Assert.assertSame(viewPager.getChildAt(0), adapter.createdFragment.getView()); 73eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 74eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 7517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private static class MockFragmentActivity extends FragmentActivity { 7617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private View view; 7717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 7817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry public MockFragmentActivity(View view) { 7917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry this.view = view; 8017ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 8117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 8217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry @Override 8317ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry public void onCreate(Bundle savedInstanceState) { 8417ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry super.onCreate(savedInstanceState); 8517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry setContentView(view); 8617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 8717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 8817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 89eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz private class OneItemPagerAdapter extends FragmentPagerAdapter { 9017ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private Fragment createdFragment; 9117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 92eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public OneItemPagerAdapter(FragmentManager fm) { 9317ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry super(fm); 9417ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 9517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 9617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry @Override 9717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry public int getCount() { 9817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry return 1; 9917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 10017ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 10117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry @Override 10217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry public Fragment getItem(int position) { 10317ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry createdFragment = new MockFragment(); 10417ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry return createdFragment; 10517ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 106eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 107eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 108eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz private class ItemAddingPagerAdapter extends FragmentPagerAdapter { 109eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz private Fragment createdFragment; 110eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz int itemCount = 0; 111eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 112eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public ItemAddingPagerAdapter(FragmentManager fm) { 113eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz super(fm); 114eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 115eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 116eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz @Override 117eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public int getCount() { 118eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz return itemCount; 119eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 120eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 121eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz @Override 122eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public Fragment getItem(int position) { 123eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz createdFragment = new MockFragment(); 124eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz return createdFragment; 125eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 12617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 127eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public void addItem() { 128eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz ++itemCount; 129eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 130eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 131eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 132eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz private class MockEmptyPagerAdapter extends FragmentPagerAdapter { 133eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public MockEmptyPagerAdapter(FragmentManager fm) { 134eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz super(fm); 135eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 136eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 137eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz @Override 138eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public int getCount() { 139eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz return 0; 140eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 141eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz 142eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz @Override 143eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz public Fragment getItem(int position) { 144eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz return null; 145eefb5d8c984ecd9b37b886cde33cac11ff31d050Phil Goodwin & Tyler Schultz } 14617ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 14717ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry 14817ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry private class MockFragment extends Fragment { 14917ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry @Override 15017ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 15117ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry return new Button(context); 15217ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 15317ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry } 15417ba3349c2cf719120e2c7b5252c90db61202291Aaron VonderHaar & Chris Perry} 155