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