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