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