FragmentTransactionTest.java revision 43db3168ca4a4d309f059363054ba60bc22a9ef3
1af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri/* 2af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * Copyright (C) 2016 The Android Open Source Project 3af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * 4af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * Licensed under the Apache License, Version 2.0 (the "License"); 5af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * you may not use this file except in compliance with the License. 6af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * You may obtain a copy of the License at 7af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * 8af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * http://www.apache.org/licenses/LICENSE-2.0 9af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * 10af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * Unless required by applicable law or agreed to in writing, software 11af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * distributed under the License is distributed on an "AS IS" BASIS, 12af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * See the License for the specific language governing permissions and 14af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * limitations under the License. 15af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri */ 16af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarripackage android.support.v4.app; 17af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 18af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport static junit.framework.TestCase.assertFalse; 19af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport static junit.framework.TestCase.assertTrue; 20af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 2196221034e4a23a2abb83f772a0281bb197ac5ac0George Mountimport static org.junit.Assert.assertEquals; 2296221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 2396221034e4a23a2abb83f772a0281bb197ac5ac0George Mountimport android.os.SystemClock; 24af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.fragment.test.R; 25af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.test.InstrumentationRegistry; 26754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.MediumTest; 27af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.test.rule.ActivityTestRule; 28af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.test.runner.AndroidJUnit4; 29af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.v4.app.test.FragmentTestActivity; 30af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 31af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.Before; 32af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.Rule; 33af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.Test; 34af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.runner.RunWith; 35af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 3643db3168ca4a4d309f059363054ba60bc22a9ef3George Mountimport java.util.Collection; 3796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 38af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri/** 39af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * Tests usage of the {@link FragmentTransaction} class. 40af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri */ 41754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas@MediumTest 42af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri@RunWith(AndroidJUnit4.class) 43af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarripublic class FragmentTransactionTest { 44af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 45af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Rule 46af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public ActivityTestRule<FragmentTestActivity> mActivityRule = 47af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri new ActivityTestRule<>(FragmentTestActivity.class); 48af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 49af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri private FragmentTestActivity mActivity; 50af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 51af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Before 52af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void setUp() { 53af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity = mActivityRule.getActivity(); 54af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 55af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 56af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 57c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas public void testAddTransactionWithValidFragment() throws Throwable { 58af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new CorrectFragment(); 59c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas mActivityRule.runOnUiThread(new Runnable() { 60af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 61af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 62af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 63af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 64af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 65af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 66af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 67af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 68af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 69af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 70af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue(fragment.isAdded()); 71af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 72af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 73af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 74c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas public void testAddTransactionWithPrivateFragment() throws Throwable { 75af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new PrivateFragment(); 76c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas mActivityRule.runOnUiThread(new Runnable() { 77af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 78af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 79af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 80af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 81af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 82af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 83af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 84af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 85af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 86af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 87af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 88af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 89af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 90af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 91af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 92af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 93af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 94af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 95af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 96af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 97af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 98c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas public void testAddTransactionWithPackagePrivateFragment() throws Throwable { 99af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new PackagePrivateFragment(); 100c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas mActivityRule.runOnUiThread(new Runnable() { 101af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 102af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 103af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 104af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 105af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 106af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 107af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 108af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 109af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 110af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 111af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 112af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 113af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 114af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 115af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 116af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 117af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 118af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 119af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 120af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 121af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 122c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas public void testAddTransactionWithAnonymousFragment() throws Throwable { 123af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new Fragment() {}; 124c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas mActivityRule.runOnUiThread(new Runnable() { 125af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 126af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 127af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 128af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 129af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 130af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 131af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 132af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 133af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 134af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 135af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 136af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 137af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 138af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 139af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 140af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 141af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 142af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 143af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 144af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 145af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 146c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas public void testAddTransactionWithNonStaticFragment() throws Throwable { 147af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new NonStaticFragment(); 148c90b24ff959edb955ff48e345c074a98368a90adAurimas Liutikas mActivityRule.runOnUiThread(new Runnable() { 149af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 150af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 151af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 152af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 153af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 154af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 155af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 156af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 157af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 158af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 159af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 160af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 161af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 162af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 163af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 164af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 165af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 166af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 167af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 168af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 16996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // Ensure that getFragments() works during transactions, even if it is run off thread 17096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount @Test 17196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount public void getFragmentsOffThread() throws Throwable { 17296221034e4a23a2abb83f772a0281bb197ac5ac0George Mount final FragmentManager fm = mActivity.getSupportFragmentManager(); 17396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 17496221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // Make sure that adding a fragment works 17596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount Fragment fragment = new CorrectFragment(); 17696221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fm.beginTransaction() 17796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .add(R.id.content, fragment) 17896221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .addToBackStack(null) 17996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .commit(); 18096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 18196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 18243db3168ca4a4d309f059363054ba60bc22a9ef3George Mount Collection<Fragment> fragments = fm.getFragments(); 18396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount assertEquals(1, fragments.size()); 18443db3168ca4a4d309f059363054ba60bc22a9ef3George Mount assertTrue(fragments.contains(fragment)); 18596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 18696221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // Removed fragments shouldn't show 18796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fm.beginTransaction() 18896221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .remove(fragment) 18996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .addToBackStack(null) 19096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .commit(); 19196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 19296221034e4a23a2abb83f772a0281bb197ac5ac0George Mount assertTrue(fm.getFragments().isEmpty()); 19396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 19496221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // Now try detached fragments 19596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.popBackStackImmediate(mActivityRule); 19696221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fm.beginTransaction() 19796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .detach(fragment) 19896221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .addToBackStack(null) 19996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .commit(); 20096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 20196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount assertTrue(fm.getFragments().isEmpty()); 20296221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 20396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // Now try hidden fragments 20496221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.popBackStackImmediate(mActivityRule); 20596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fm.beginTransaction() 20696221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .hide(fragment) 20796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .addToBackStack(null) 20896221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .commit(); 20996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.executePendingTransactions(mActivityRule); 21096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fragments = fm.getFragments(); 21196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount assertEquals(1, fragments.size()); 21243db3168ca4a4d309f059363054ba60bc22a9ef3George Mount assertTrue(fragments.contains(fragment)); 21396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 21496221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // And showing it again shouldn't change anything: 21596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.popBackStackImmediate(mActivityRule); 21696221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fragments = fm.getFragments(); 21796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount assertEquals(1, fragments.size()); 21843db3168ca4a4d309f059363054ba60bc22a9ef3George Mount assertTrue(fragments.contains(fragment)); 21996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 22096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // Now pop back to the start state 22196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount FragmentTestUtil.popBackStackImmediate(mActivityRule); 22296221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 22396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // We can't force concurrency, but we can do it lots of times and hope that 22496221034e4a23a2abb83f772a0281bb197ac5ac0George Mount // we hit it. 22596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount for (int i = 0; i < 100; i++) { 22643db3168ca4a4d309f059363054ba60bc22a9ef3George Mount Fragment fragment2 = new CorrectFragment(); 22796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fm.beginTransaction() 22843db3168ca4a4d309f059363054ba60bc22a9ef3George Mount .add(R.id.content, fragment2) 22996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .addToBackStack(null) 23096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount .commit(); 23196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount getFragmentsUntilSize(1); 23296221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 23396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount fm.popBackStack(); 23496221034e4a23a2abb83f772a0281bb197ac5ac0George Mount getFragmentsUntilSize(0); 23596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount } 23696221034e4a23a2abb83f772a0281bb197ac5ac0George Mount } 23796221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 23896221034e4a23a2abb83f772a0281bb197ac5ac0George Mount private void getFragmentsUntilSize(int expectedSize) { 23996221034e4a23a2abb83f772a0281bb197ac5ac0George Mount final long endTime = SystemClock.uptimeMillis() + 3000; 24096221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 24196221034e4a23a2abb83f772a0281bb197ac5ac0George Mount do { 24296221034e4a23a2abb83f772a0281bb197ac5ac0George Mount assertTrue(SystemClock.uptimeMillis() < endTime); 24396221034e4a23a2abb83f772a0281bb197ac5ac0George Mount } while (mActivity.getSupportFragmentManager().getFragments().size() != expectedSize); 24496221034e4a23a2abb83f772a0281bb197ac5ac0George Mount } 24596221034e4a23a2abb83f772a0281bb197ac5ac0George Mount 246af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public static class CorrectFragment extends Fragment {} 247af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 248af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri private static class PrivateFragment extends Fragment {} 249af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 250af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri static class PackagePrivateFragment extends Fragment {} 251af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 252af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri private class NonStaticFragment extends Fragment {} 253af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri} 254