diff options
author | George Mount <mount@google.com> | 2017-05-05 22:16:36 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-05-05 22:16:36 +0000 |
commit | 929e7cc6a611627f005f47e982b35aa51ba25aac (patch) | |
tree | c9915a49454bf58aa6d18a1e5d4cf95fa954009a /tests/fragment | |
parent | ca323ceed46bc88772eebe225f890dfc74cdddf5 (diff) | |
parent | baebc3fadafe27f9866c2d479b0245e36a79ab30 (diff) | |
download | platform_cts-929e7cc6a611627f005f47e982b35aa51ba25aac.tar.gz platform_cts-929e7cc6a611627f005f47e982b35aa51ba25aac.tar.bz2 platform_cts-929e7cc6a611627f005f47e982b35aa51ba25aac.zip |
Merge "Add onBackStackChanged() checking." into oc-dev am: 3266c04704
am: baebc3fada
Change-Id: I527c6a3f9d4d30d646a69ddf0cdb89cfd31d84c0
Diffstat (limited to 'tests/fragment')
-rw-r--r-- | tests/fragment/src/android/fragment/cts/FragmentTransactionTest.java | 37 | ||||
-rw-r--r-- | tests/fragment/src/android/fragment/cts/FragmentTransitionTest.java | 39 |
2 files changed, 75 insertions, 1 deletions
diff --git a/tests/fragment/src/android/fragment/cts/FragmentTransactionTest.java b/tests/fragment/src/android/fragment/cts/FragmentTransactionTest.java index ea713fc4000..2a532d7ef64 100644 --- a/tests/fragment/src/android/fragment/cts/FragmentTransactionTest.java +++ b/tests/fragment/src/android/fragment/cts/FragmentTransactionTest.java @@ -40,6 +40,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -60,10 +61,27 @@ public class FragmentTransactionTest { new ActivityTestRule<>(FragmentTestActivity.class); private FragmentTestActivity mActivity; + private int mOnBackStackChangedTimes; + private FragmentManager.OnBackStackChangedListener mOnBackStackChangedListener; @Before public void setUp() { mActivity = mActivityRule.getActivity(); + mOnBackStackChangedTimes = 0; + mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() { + @Override + public void onBackStackChanged() { + mOnBackStackChangedTimes++; + } + }; + mActivity.getFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener); + } + + @After + public void tearDown() { + mActivity.getFragmentManager() + .removeOnBackStackChangedListener(mOnBackStackChangedListener); + mOnBackStackChangedListener = null; } @Test @@ -77,6 +95,7 @@ public class FragmentTransactionTest { .addToBackStack(null) .commit(); mActivity.getFragmentManager().executePendingTransactions(); + assertEquals(1, mOnBackStackChangedTimes); } }); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -96,6 +115,7 @@ public class FragmentTransactionTest { .addToBackStack(null) .commit(); mActivity.getFragmentManager().executePendingTransactions(); + assertEquals(1, mOnBackStackChangedTimes); } catch (IllegalStateException e) { exceptionThrown = true; } finally { @@ -120,6 +140,7 @@ public class FragmentTransactionTest { .addToBackStack(null) .commit(); mActivity.getFragmentManager().executePendingTransactions(); + assertEquals(1, mOnBackStackChangedTimes); } catch (IllegalStateException e) { exceptionThrown = true; } finally { @@ -144,6 +165,7 @@ public class FragmentTransactionTest { .addToBackStack(null) .commit(); mActivity.getFragmentManager().executePendingTransactions(); + assertEquals(1, mOnBackStackChangedTimes); } catch (IllegalStateException e) { exceptionThrown = true; } finally { @@ -168,6 +190,7 @@ public class FragmentTransactionTest { .addToBackStack(null) .commit(); mActivity.getFragmentManager().executePendingTransactions(); + assertEquals(1, mOnBackStackChangedTimes); } catch (IllegalStateException e) { exceptionThrown = true; } finally { @@ -193,6 +216,7 @@ public class FragmentTransactionTest { } }).commit(); fm.executePendingTransactions(); + assertEquals(0, mOnBackStackChangedTimes); assertTrue("runOnCommit runnable never ran", ran[0]); @@ -211,6 +235,7 @@ public class FragmentTransactionTest { } fm.executePendingTransactions(); + assertEquals(0, mOnBackStackChangedTimes); assertTrue("runOnCommit was allowed to be called for back stack transaction", threw); @@ -235,6 +260,7 @@ public class FragmentTransactionTest { Collection<Fragment> fragments = fm.getFragments(); assertEquals(1, fragments.size()); assertTrue(fragments.contains(fragment)); + assertEquals(1, mOnBackStackChangedTimes); // Removed fragments shouldn't show fm.beginTransaction() @@ -243,18 +269,22 @@ public class FragmentTransactionTest { .commit(); FragmentTestUtil.executePendingTransactions(mActivityRule); assertTrue(fm.getFragments().isEmpty()); + assertEquals(2, mOnBackStackChangedTimes); // Now try detached fragments FragmentTestUtil.popBackStackImmediate(mActivityRule); + assertEquals(3, mOnBackStackChangedTimes); fm.beginTransaction() .detach(fragment) .addToBackStack(null) .commit(); FragmentTestUtil.executePendingTransactions(mActivityRule); assertTrue(fm.getFragments().isEmpty()); + assertEquals(4, mOnBackStackChangedTimes); // Now try hidden fragments FragmentTestUtil.popBackStackImmediate(mActivityRule); + assertEquals(5, mOnBackStackChangedTimes); fm.beginTransaction() .hide(fragment) .addToBackStack(null) @@ -263,15 +293,18 @@ public class FragmentTransactionTest { fragments = fm.getFragments(); assertEquals(1, fragments.size()); assertTrue(fragments.contains(fragment)); + assertEquals(6, mOnBackStackChangedTimes); // And showing it again shouldn't change anything: FragmentTestUtil.popBackStackImmediate(mActivityRule); fragments = fm.getFragments(); assertEquals(1, fragments.size()); assertTrue(fragments.contains(fragment)); + assertEquals(7, mOnBackStackChangedTimes); // Now pop back to the start state FragmentTestUtil.popBackStackImmediate(mActivityRule); + assertEquals(8, mOnBackStackChangedTimes); // We can't force concurrency, but we can do it lots of times and hope that // we hit it. @@ -300,6 +333,7 @@ public class FragmentTransactionTest { .add(fragment1, "1") .commit(); FragmentTestUtil.executePendingTransactions(mActivityRule); + assertEquals(0, mOnBackStackChangedTimes); final FragmentManager fm = fragment1.getChildFragmentManager(); mActivity.getFragmentManager() .beginTransaction() @@ -308,6 +342,7 @@ public class FragmentTransactionTest { FragmentTestUtil.executePendingTransactions(mActivityRule); assertEquals(0, mActivity.getFragmentManager().getFragments().size()); assertEquals(0, fm.getFragments().size()); + assertEquals(0, mOnBackStackChangedTimes); // Now the fragment1's fragment manager should allow commitAllowingStateLoss // by doing nothing since it has been detached. @@ -317,6 +352,7 @@ public class FragmentTransactionTest { .commitAllowingStateLoss(); FragmentTestUtil.executePendingTransactions(mActivityRule); assertEquals(0, fm.getFragments().size()); + assertEquals(0, mOnBackStackChangedTimes); // It should also allow commitNowAllowingStateLoss by doing nothing mActivityRule.runOnUiThread(() -> { @@ -326,6 +362,7 @@ public class FragmentTransactionTest { .commitNowAllowingStateLoss(); assertEquals(0, fm.getFragments().size()); }); + assertEquals(0, mOnBackStackChangedTimes); } /** diff --git a/tests/fragment/src/android/fragment/cts/FragmentTransitionTest.java b/tests/fragment/src/android/fragment/cts/FragmentTransitionTest.java index 7a73046a39b..6f63e981ea4 100644 --- a/tests/fragment/src/android/fragment/cts/FragmentTransitionTest.java +++ b/tests/fragment/src/android/fragment/cts/FragmentTransitionTest.java @@ -38,6 +38,7 @@ import android.view.View; import com.android.compatibility.common.util.transition.TargetTracking; import com.android.compatibility.common.util.transition.TrackingTransition; +import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -55,6 +56,8 @@ import java.util.stream.Collectors; @RunWith(Parameterized.class) public class FragmentTransitionTest { private final boolean mReordered; + private int mOnBackStackChangedTimes; + private FragmentManager.OnBackStackChangedListener mOnBackStackChangedListener; @Parameterized.Parameters public static Object[] data() { @@ -77,6 +80,20 @@ public class FragmentTransitionTest { public void setup() throws Throwable { mFragmentManager = mActivityRule.getActivity().getFragmentManager(); FragmentTestUtil.setContentView(mActivityRule, R.layout.simple_container); + mOnBackStackChangedTimes = 0; + mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() { + @Override + public void onBackStackChanged() { + mOnBackStackChangedTimes++; + } + }; + mFragmentManager.addOnBackStackChangedListener(mOnBackStackChangedListener); + } + + @After + public void teardown() throws Throwable { + mFragmentManager.removeOnBackStackChangedListener(mOnBackStackChangedListener); + mOnBackStackChangedListener = null; } // Test that normal view transitions (enter, exit, reenter, return) run with @@ -98,6 +115,7 @@ public class FragmentTransitionTest { fragment.waitForTransition(); verifyAndClearTransition(fragment.exitTransition, null, green, blue); verifyNoOtherTransitions(fragment); + assertEquals(2, mOnBackStackChangedTimes); // reenter transition FragmentTestUtil.popBackStackImmediate(mActivityRule); @@ -106,12 +124,14 @@ public class FragmentTransitionTest { final View blue2 = findBlue(); verifyAndClearTransition(fragment.reenterTransition, null, green2, blue2); verifyNoOtherTransitions(fragment); + assertEquals(3, mOnBackStackChangedTimes); // return transition FragmentTestUtil.popBackStackImmediate(mActivityRule); fragment.waitForTransition(); verifyAndClearTransition(fragment.returnTransition, null, green2, blue2); verifyNoOtherTransitions(fragment); + assertEquals(4, mOnBackStackChangedTimes); } // Test that shared elements transition from one fragment to the next @@ -125,9 +145,11 @@ public class FragmentTransitionTest { fragment2.setLayoutId(R.layout.scene2); verifyTransition(fragment1, fragment2, "blueSquare"); + assertEquals(2, mOnBackStackChangedTimes); // Now pop the back stack verifyPopTransition(1, fragment2, fragment1); + assertEquals(3, mOnBackStackChangedTimes); } // Test that shared element transitions through multiple fragments work together @@ -173,6 +195,7 @@ public class FragmentTransitionTest { } }); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(2, mOnBackStackChangedTimes); // should be a normal transition from fragment1 to fragment2 fragment1.waitForTransition(); @@ -188,6 +211,7 @@ public class FragmentTransitionTest { // Pop should also do the same thing FragmentTestUtil.popBackStackImmediate(mActivityRule); + assertEquals(3, mOnBackStackChangedTimes); fragment1.waitForTransition(); fragment2.waitForTransition(); @@ -216,6 +240,7 @@ public class FragmentTransitionTest { .addToBackStack(null) .commit(); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(1, mOnBackStackChangedTimes); fragment1.waitForTransition(); final View greenSquare1 = findViewById(fragment1, R.id.greenSquare); @@ -450,6 +475,7 @@ public class FragmentTransitionTest { .addToBackStack(null) .commit(); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(2, mOnBackStackChangedTimes); fragment1.waitForTransition(); fragment2.waitForTransition(); @@ -465,6 +491,7 @@ public class FragmentTransitionTest { // Now see if it works when popped FragmentTestUtil.popBackStackImmediate(mActivityRule); + assertEquals(3, mOnBackStackChangedTimes); fragment1.waitForTransition(); fragment2.waitForTransition(); @@ -778,6 +805,7 @@ public class FragmentTransitionTest { .addToBackStack(null) .commit(); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(1, mOnBackStackChangedTimes); fragment1.waitForTransition(); final View blueSquare1 = findBlue(); final View greenSquare1 = findGreen(); @@ -833,6 +861,7 @@ public class FragmentTransitionTest { private void verifyTransition(TransitionFragment from, TransitionFragment to, String sharedElementName) throws Throwable { + final int startOnBackStackChanged = mOnBackStackChangedTimes; final View startBlue = findBlue(); final View startGreen = findGreen(); final View startRed = findRed(); @@ -847,6 +876,7 @@ public class FragmentTransitionTest { .commit(); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(startOnBackStackChanged + 1, mOnBackStackChangedTimes); to.waitForTransition(); final View endGreen = findGreen(); @@ -872,7 +902,8 @@ public class FragmentTransitionTest { private void verifyCrossTransition(boolean swapSource, TransitionFragment from1, TransitionFragment from2) throws Throwable { - + final int startNumOnBackStackChanged = mOnBackStackChangedTimes; + final int changesPerOperation = mReordered ? 1 : 2; final TransitionFragment to1 = new TransitionFragment(); to1.setLayoutId(R.layout.scene2); final TransitionFragment to2 = new TransitionFragment(); @@ -906,6 +937,8 @@ public class FragmentTransitionTest { }); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(startNumOnBackStackChanged + changesPerOperation, mOnBackStackChangedTimes); + from1.waitForTransition(); from2.waitForTransition(); to1.waitForTransition(); @@ -937,6 +970,8 @@ public class FragmentTransitionTest { mFragmentManager.popBackStack(); }); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(startNumOnBackStackChanged + changesPerOperation + 1, + mOnBackStackChangedTimes); from1.waitForTransition(); from2.waitForTransition(); @@ -964,6 +999,7 @@ public class FragmentTransitionTest { private void verifyPopTransition(final int numPops, TransitionFragment from, TransitionFragment to, TransitionFragment... others) throws Throwable { + final int startOnBackStackChanged = mOnBackStackChangedTimes; final View startBlue = findBlue(); final View startGreen = findGreen(); final View startRed = findRed(); @@ -975,6 +1011,7 @@ public class FragmentTransitionTest { } }); FragmentTestUtil.waitForExecution(mActivityRule); + assertEquals(startOnBackStackChanged + 1, mOnBackStackChangedTimes); to.waitForTransition(); final View endGreen = findGreen(); |