1d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurpackage com.xtremelabs.robolectric.shadows;
2d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
3ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
4ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.junit.Assert.assertEquals;
5ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.junit.Assert.assertFalse;
6ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.junit.Assert.assertSame;
7ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.junit.Assert.assertTrue;
8ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.mockito.Matchers.anyBoolean;
9ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.mockito.Mockito.mock;
10ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.mockito.Mockito.never;
11ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.mockito.Mockito.verify;
12ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport static org.mockito.Mockito.when;
13ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
1454c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Planteimport android.content.Intent;
15d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport android.support.v4.app.Fragment;
162f8bdc77f09462bc1813e1e9a156928a35eb6a5cRyan Richardimport android.support.v4.app.FragmentActivity;
17d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport android.support.v4.app.FragmentTransaction;
18d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport android.view.View;
19ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
20d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
21d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport com.xtremelabs.robolectric.tester.android.util.TestFragmentManager;
22d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport com.xtremelabs.robolectric.tester.android.util.TestFragmentTransaction;
23ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
24d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport org.junit.Before;
25d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport org.junit.Test;
26d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurimport org.junit.runner.RunWith;
27d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
28ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport java.util.Collections;
29ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport java.util.HashMap;
30ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppyimport java.util.Map;
31d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
32d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur@RunWith(WithTestDefaultsRunner.class)
33d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakurpublic class FragmentTransactionTest {
34d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    private MockTestFragmentManager manager;
35d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    private Fragment fragment;
36956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    private TestFragmentTransaction txn;
37956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    private String tag;
38956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    private int id;
39d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
40d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    @Before
41d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    public void setUp() throws Exception {
42d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        manager = new MockTestFragmentManager();
43d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        txn = new TestFragmentTransaction(manager);
44d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        fragment = new TestFragment();
45956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        tag = "tag";
46956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        id = 111;
47956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    }
48956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard
49956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    @Test
50956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    public void testGetters() throws Exception {
51956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        txn.add(fragment, tag);
52956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(fragment, txn.getFragment());
53956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(tag, txn.getTag());
54956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertEquals(View.NO_ID, txn.getContainerViewId());
55956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard
56956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        txn.add(id, fragment);
57956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertEquals(id, txn.getContainerViewId());
58956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(fragment, txn.getFragment());
59956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard
60956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        txn.add(id, fragment, tag);
61956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertEquals(id, txn.getContainerViewId());
62956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(fragment, txn.getFragment());
63956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(tag, txn.getTag());
64956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertFalse(txn.isReplacing());
65956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard
66956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        txn.replace(id, fragment);
67956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertEquals(id, txn.getContainerViewId());
68956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(fragment, txn.getFragment());
69956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertTrue(txn.isReplacing());
70956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard
71956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        txn.replace(id, fragment, tag);
72956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertEquals(id, txn.getContainerViewId());
73956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(fragment, txn.getFragment());
74956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(tag, txn.getTag());
75956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertTrue(txn.isReplacing());
76956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    }
77956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard
78956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    @Test
79956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard    public void testAddToBackStack() throws Exception {
80956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertFalse(txn.isAddedToBackStack());
81956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        FragmentTransaction returnedTransaction = txn.addToBackStack("name");
82956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertSame(txn, returnedTransaction);
83956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertTrue(txn.isAddedToBackStack());
84956611edfcf6e4f766f36fd1f168f4300f5a3473Phil Plante & Ryan Richard        assertEquals("name", txn.getBackStackName());
85d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    }
86d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
87d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    @Test
88d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    public void addWithId_commit_shouldCallFragmentManager() throws Exception {
89d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        txn.add(111, fragment).commit();
90d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
91d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertTrue(manager.addFragmentWasCalled);
92d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentContainerViewId, 111);
93d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentTag, null);
94d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertSame(manager.addFragmentFragment, fragment);
95d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertFalse(manager.addFragmentReplace);
96d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    }
97d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
98d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    @Test
99d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    public void addWithIdAndTag_commit_shouldCallFragmentManager() throws Exception {
100d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        txn.add(111, fragment, "tag1").commit();
101d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
102d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertTrue(manager.addFragmentWasCalled);
103d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentContainerViewId, 111);
104d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentTag, "tag1");
105d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertSame(manager.addFragmentFragment, fragment);
106d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertFalse(manager.addFragmentReplace);
107d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    }
108d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
109d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    @Test
110d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    public void addWithTag_commit_shouldCallFragmentManager() throws Exception {
111d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        txn.add(fragment, "tag1").commit();
112d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
113d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertTrue(manager.addFragmentWasCalled);
114d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentContainerViewId, View.NO_ID);
115d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentTag, "tag1");
116d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertSame(manager.addFragmentFragment, fragment);
117d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertFalse(manager.addFragmentReplace);
118d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    }
119d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
120d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    @Test
121d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    public void replaceWithId_commit_shouldCallFragmentManager() throws Exception {
122d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        txn.replace(111, fragment).commit();
123d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
124d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertTrue(manager.addFragmentWasCalled);
125d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentContainerViewId, 111);
126d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentTag, null);
127d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertSame(manager.addFragmentFragment, fragment);
128d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertTrue(manager.addFragmentReplace);
129d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    }
130d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
131d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    @Test
132d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    public void replaceWithIdAndTag_commit_shouldCallFragmentManager() throws Exception {
133d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        txn.replace(111, fragment, "tag1").commit();
134d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
135d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertTrue(manager.addFragmentWasCalled);
136d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentContainerViewId, 111);
137d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertEquals(manager.addFragmentTag, "tag1");
138d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertSame(manager.addFragmentFragment, fragment);
139d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        assertTrue(manager.addFragmentReplace);
140d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    }
141d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
14254c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante    @Test
14354c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante    public void startActivity_shouldNotDelegateToParentActivity() throws Exception {
14454c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        // because for some reason that's not what Android does in real life
14554c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        StartActivityTrackingActivity trackingActivity = new StartActivityTrackingActivity();
14654c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        shadowOf(fragment).setActivity(trackingActivity);
14754c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        fragment.startActivity(null);
14854c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        assertFalse(trackingActivity.startActivityWasCalled);
14954c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante    }
15054c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante
1518b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    @Test
1528b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    public void commit_shouldNotActLikeCommitAllowingStateLoss() throws Exception {
1538b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        txn.add(fragment, "tag1").commit();
1548b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        assertFalse(txn.isCommittedAllowingStateLoss());
1558b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    }
1568b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard
1578b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    @Test
1588b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    public void commitAllowingStateLoss_shouldCommitAndSetAFlag() throws Exception {
1598b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        txn.add(fragment, "tag1").commitAllowingStateLoss();
1608b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard
1618b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        assertTrue(manager.addFragmentWasCalled);
1628b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        assertEquals(manager.addFragmentContainerViewId, View.NO_ID);
1638b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        assertEquals(manager.addFragmentTag, "tag1");
1648b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        assertSame(manager.addFragmentFragment, fragment);
1658b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard
1668b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        assertTrue(txn.isCommittedAllowingStateLoss());
1678b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    }
1688b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard
1698b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    @Test
1708b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    public void attach_shouldCauseFragmentToBecomeAttached() throws Exception {
1718b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        shadowOf(fragment).setAttached(false);
1728b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        txn.attach(fragment).commit();
1738b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard        assertTrue(shadowOf(fragment).isAttached());
1748b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard    }
1758b51223b8134e045c0b7ef682d2b55b7affe0af5Phil Goodwin & Ryan Richard
176ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
177ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void hide_shouldCauseFragmentToBecomeHidden() {
178ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(false);
179ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.hide(fragment).commit();
180ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertTrue(shadowOf(fragment).isHidden());
181ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
182ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
183ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
184ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void show_shouldCauseFragmentToBecomeNotHidden() {
185ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(true);
186ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.show(fragment).commit();
187ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertFalse(shadowOf(fragment).isHidden());
188ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
189ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
190ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
191ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void hide_shouldCallOnHiddenChangedOnFragment() {
192ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final String key = "onHiddenChanged";
193ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final Map<String, Boolean> calls = new HashMap<String, Boolean>();
194ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        Fragment fragment = new TestFragment() {
195ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          @Override
196ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          public void onHiddenChanged(boolean hidden) {
197ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            super.onHiddenChanged(hidden);
198ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            calls.put(key, hidden);
199ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          }
200ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        };
201ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(false);
202ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.hide(fragment).commit();
203ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertEquals(true, calls.get(key));
204ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
205ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
206ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
207ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void show_shouldCallOnHiddenChangedOnFragment() {
208ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final String key = "onHiddenChanged";
209ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final Map<String, Boolean> calls = new HashMap<String, Boolean>();
210ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        Fragment fragment = new TestFragment() {
211ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          @Override
212ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          public void onHiddenChanged(boolean hidden) {
213ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            super.onHiddenChanged(hidden);
214ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            calls.put(key, hidden);
215ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          }
216ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        };
217ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(true);
218ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.show(fragment).commit();
219ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertEquals(false, calls.get(key));
220ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
221ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
222ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
223ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void hide_shouldNotCallOnHiddenChangedOnFragmentIfAlreadyHidden() {
224ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final String key = "onHiddenChanged";
225ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final Map<String, Boolean> calls = new HashMap<String, Boolean>();
226ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        Fragment fragment = new TestFragment() {
227ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          @Override
228ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          public void onHiddenChanged(boolean hidden) {
229ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            super.onHiddenChanged(hidden);
230ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            calls.put(key, hidden);
231ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          }
232ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        };
233ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(true);
234ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.hide(fragment).commit();
235ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertFalse(calls.containsKey(key));
236ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
237ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
238ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
239ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void show_shouldNotCallOnHiddenChangedOnFragmentIfAlreadyNotHidden() {
240ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final String key = "onHiddenChanged";
241ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        final Map<String, Boolean> calls = new HashMap<String, Boolean>();
242ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        Fragment fragment = new TestFragment() {
243ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          @Override
244ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          public void onHiddenChanged(boolean hidden) {
245ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            super.onHiddenChanged(hidden);
246ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy            calls.put(key, hidden);
247ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy          }
248ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        };
249ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(false);
250ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.show(fragment).commit();
251ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertFalse(calls.containsKey(key));
252ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
253ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
254ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
255ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void showHide_shouldHideFragment() {
256ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(false);
257ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.show(fragment).hide(fragment).commit();
258ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertTrue(shadowOf(fragment).isHidden());
259ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
260ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
261ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    @Test
262ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    public void hideShow_shouldShowFragment() {
263ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        shadowOf(fragment).setHidden(false);
264ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        txn.hide(fragment).show(fragment).commit();
265ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy        assertFalse(shadowOf(fragment).isHidden());
266ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy    }
267ecdc5be4d4a609aa52faf23716dee19b074aa858John Stuppy
268d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    private static class MockTestFragmentManager extends TestFragmentManager {
269d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        private boolean addFragmentWasCalled;
270d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        private int addFragmentContainerViewId;
271d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        private String addFragmentTag;
272d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        private Fragment addFragmentFragment;
273d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        private boolean addFragmentReplace;
274d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
275d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        public MockTestFragmentManager() {
2762f8bdc77f09462bc1813e1e9a156928a35eb6a5cRyan Richard            super(new FragmentActivity());
277d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        }
278d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur
279d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        @Override
280d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        public void addFragment(int containerViewId, String tag, Fragment fragment, boolean replace) {
281d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur            addFragmentWasCalled = true;
282d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur            addFragmentContainerViewId = containerViewId;
283d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur            addFragmentTag = tag;
284d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur            addFragmentFragment = fragment;
285d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur            addFragmentReplace = replace;
286d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur        }
287d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur    }
28854c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante
28954c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante    private static class StartActivityTrackingActivity extends FragmentActivity {
29054c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        boolean startActivityWasCalled;
29154c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante
29254c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        @Override
29354c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        public void startActivity(Intent intent) {
29454c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante            super.startActivity(intent);
29554c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante            startActivityWasCalled = true;
29654c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante        }
29754c175506c5e5776ec84eef12c3add93508c0ad8Phil Goodwin & Phil Plante    }
298d1a3090101df9daf574faffe0c3ac84a8217f608Aaron VonderHaar & Amrit Thakur}
299