summaryrefslogtreecommitdiffstats
path: root/tests/fragment
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2017-05-05 22:16:36 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-05-05 22:16:36 +0000
commit929e7cc6a611627f005f47e982b35aa51ba25aac (patch)
treec9915a49454bf58aa6d18a1e5d4cf95fa954009a /tests/fragment
parentca323ceed46bc88772eebe225f890dfc74cdddf5 (diff)
parentbaebc3fadafe27f9866c2d479b0245e36a79ab30 (diff)
downloadplatform_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.java37
-rw-r--r--tests/fragment/src/android/fragment/cts/FragmentTransitionTest.java39
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();