FragmentTransactionTest.java revision 754cb29c50f09a83251dd4bb633ba445b2411adb
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 21af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.fragment.test.R; 22af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.test.InstrumentationRegistry; 23754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.MediumTest; 24af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.test.rule.ActivityTestRule; 25af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.test.runner.AndroidJUnit4; 26af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport android.support.v4.app.test.FragmentTestActivity; 27af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 28af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.Before; 29af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.Rule; 30af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.Test; 31af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarriimport org.junit.runner.RunWith; 32af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 33af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri/** 34af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri * Tests usage of the {@link FragmentTransaction} class. 35af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri */ 36754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas@MediumTest 37af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri@RunWith(AndroidJUnit4.class) 38af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarripublic class FragmentTransactionTest { 39af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 40af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Rule 41af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public ActivityTestRule<FragmentTestActivity> mActivityRule = 42af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri new ActivityTestRule<>(FragmentTestActivity.class); 43af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 44af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri private FragmentTestActivity mActivity; 45af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 46af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Before 47af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void setUp() { 48af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity = mActivityRule.getActivity(); 49af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 50af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 51af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 52af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void testAddTransactionWithValidFragment() { 53af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new CorrectFragment(); 54af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 55af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 56af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 57af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 58af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 59af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 60af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 61af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 62af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 63af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 64af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 65af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue(fragment.isAdded()); 66af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 67af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 68af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 69af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void testAddTransactionWithPrivateFragment() { 70af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new PrivateFragment(); 71af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 72af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 73af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 74af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 75af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 76af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 77af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 78af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 79af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 80af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 81af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 82af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 83af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 84af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 85af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 86af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 87af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 88af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 89af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 90af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 91af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 92af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 93af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void testAddTransactionWithPackagePrivateFragment() { 94af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new PackagePrivateFragment(); 95af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 96af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 97af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 98af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 99af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 100af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 101af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 102af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 103af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 104af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 105af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 106af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 107af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 108af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 109af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 110af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 111af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 112af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 113af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 114af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 115af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 116af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 117af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void testAddTransactionWithAnonymousFragment() { 118af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new Fragment() {}; 119af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 120af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 121af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 122af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 123af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 124af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 125af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 126af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 127af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 128af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 129af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 130af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 131af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 132af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 133af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 134af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 135af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 136af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 137af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 138af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 139af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 140af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Test 141af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void testAddTransactionWithNonStaticFragment() { 142af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri final Fragment fragment = new NonStaticFragment(); 143af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 144af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri @Override 145af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public void run() { 146af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri boolean exceptionThrown = false; 147af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri try { 148af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().beginTransaction() 149af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .add(R.id.content, fragment) 150af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .addToBackStack(null) 151af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri .commit(); 152af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri mActivity.getSupportFragmentManager().executePendingTransactions(); 153af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } catch (IllegalStateException e) { 154af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri exceptionThrown = true; 155af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } finally { 156af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertTrue("Exception should be thrown", exceptionThrown); 157af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri assertFalse("Fragment shouldn't be added", fragment.isAdded()); 158af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 159af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 160af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri }); 161af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 162af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri } 163af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 164af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri public static class CorrectFragment extends Fragment {} 165af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 166af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri private static class PrivateFragment extends Fragment {} 167af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 168af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri static class PackagePrivateFragment extends Fragment {} 169af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri 170af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri private class NonStaticFragment extends Fragment {} 171af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri} 172