diff options
author | John Stuppy <jstuppy@google.com> | 2012-09-18 10:12:55 -0700 |
---|---|---|
committer | Jon Boekenoogen <jboekeno@google.com> | 2012-09-18 10:13:55 -0700 |
commit | ecdc5be4d4a609aa52faf23716dee19b074aa858 (patch) | |
tree | 92ef045da702c62f90a15d06d2895d3c414c000b | |
parent | 2a6e5df32946f94d05e679c77fa4feec129ac11b (diff) | |
download | robolectric-ecdc5be4d4a609aa52faf23716dee19b074aa858.tar.gz |
Added show and hide to TestFragmentTransaction and associated TestFragmentManager
4 files changed, 150 insertions, 4 deletions
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowFragment.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowFragment.java index 91c433a23..98991f4e1 100644 --- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowFragment.java +++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowFragment.java @@ -24,6 +24,7 @@ public class ShadowFragment { private boolean shouldReplace; private Bundle arguments; private boolean attached; + private boolean hidden; public void setView(View view) { this.view = view; @@ -132,4 +133,13 @@ public class ShadowFragment { public boolean isAttached() { return attached; } + + public void setHidden(boolean isHidden) { + hidden = isHidden; + } + + @Implementation + public boolean isHidden() { + return hidden; + } } diff --git a/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentManager.java b/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentManager.java index d05c23e45..f780fb751 100644 --- a/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentManager.java +++ b/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentManager.java @@ -198,6 +198,20 @@ public class TestFragmentManager extends FragmentManager { if (t.isAttaching()) { shadowOf(t.getFragmentToAttach()).setAttached(true); } + if (t.isHiding()) { + Fragment fragment = t.getFragment(); + if (!fragment.isHidden()) { + shadowOf(fragment).setHidden(true); + fragment.onHiddenChanged(true); + } + } + if (t.isShowing()) { + Fragment fragment = t.getFragment(); + if (fragment.isHidden()) { + shadowOf(fragment).setHidden(false); + fragment.onHiddenChanged(false); + } + } } void commitLater(final TestFragmentTransaction testFragmentTransaction) { diff --git a/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentTransaction.java b/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentTransaction.java index c6b10567b..5c5a4948d 100644 --- a/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentTransaction.java +++ b/src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentTransaction.java @@ -14,6 +14,8 @@ public class TestFragmentTransaction extends FragmentTransaction { private boolean starting; private boolean removing; private boolean addedToBackStack; + private boolean hiding; + private boolean showing; private String backStackName; private int lastEnterAnimation; private int lastExitAnimation; @@ -68,12 +70,18 @@ public class TestFragmentTransaction extends FragmentTransaction { @Override public FragmentTransaction hide(Fragment fragment) { - return null; + this.fragment = fragment; + this.hiding = true; + this.showing = false; + return this; } @Override public FragmentTransaction show(Fragment fragment) { - return null; + this.fragment = fragment; + this.showing = true; + this.hiding = false; + return this; } @Override @@ -191,6 +199,14 @@ public class TestFragmentTransaction extends FragmentTransaction { return removing; } + public boolean isHiding() { + return hiding; + } + + public boolean isShowing() { + return showing; + } + public String getBackStackName() { return backStackName; } diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/FragmentTransactionTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/FragmentTransactionTest.java index 4445ad3d7..a6a0e7a31 100644 --- a/src/test/java/com/xtremelabs/robolectric/shadows/FragmentTransactionTest.java +++ b/src/test/java/com/xtremelabs/robolectric/shadows/FragmentTransactionTest.java @@ -1,19 +1,33 @@ package com.xtremelabs.robolectric.shadows; +import static com.xtremelabs.robolectric.Robolectric.shadowOf; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.content.Intent; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import android.view.View; + import com.xtremelabs.robolectric.WithTestDefaultsRunner; import com.xtremelabs.robolectric.tester.android.util.TestFragmentManager; import com.xtremelabs.robolectric.tester.android.util.TestFragmentTransaction; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import static com.xtremelabs.robolectric.Robolectric.shadowOf; -import static org.junit.Assert.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; @RunWith(WithTestDefaultsRunner.class) public class FragmentTransactionTest { @@ -159,6 +173,98 @@ public class FragmentTransactionTest { assertTrue(shadowOf(fragment).isAttached()); } + @Test + public void hide_shouldCauseFragmentToBecomeHidden() { + shadowOf(fragment).setHidden(false); + txn.hide(fragment).commit(); + assertTrue(shadowOf(fragment).isHidden()); + } + + @Test + public void show_shouldCauseFragmentToBecomeNotHidden() { + shadowOf(fragment).setHidden(true); + txn.show(fragment).commit(); + assertFalse(shadowOf(fragment).isHidden()); + } + + @Test + public void hide_shouldCallOnHiddenChangedOnFragment() { + final String key = "onHiddenChanged"; + final Map<String, Boolean> calls = new HashMap<String, Boolean>(); + Fragment fragment = new TestFragment() { + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + calls.put(key, hidden); + } + }; + shadowOf(fragment).setHidden(false); + txn.hide(fragment).commit(); + assertEquals(true, calls.get(key)); + } + + @Test + public void show_shouldCallOnHiddenChangedOnFragment() { + final String key = "onHiddenChanged"; + final Map<String, Boolean> calls = new HashMap<String, Boolean>(); + Fragment fragment = new TestFragment() { + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + calls.put(key, hidden); + } + }; + shadowOf(fragment).setHidden(true); + txn.show(fragment).commit(); + assertEquals(false, calls.get(key)); + } + + @Test + public void hide_shouldNotCallOnHiddenChangedOnFragmentIfAlreadyHidden() { + final String key = "onHiddenChanged"; + final Map<String, Boolean> calls = new HashMap<String, Boolean>(); + Fragment fragment = new TestFragment() { + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + calls.put(key, hidden); + } + }; + shadowOf(fragment).setHidden(true); + txn.hide(fragment).commit(); + assertFalse(calls.containsKey(key)); + } + + @Test + public void show_shouldNotCallOnHiddenChangedOnFragmentIfAlreadyNotHidden() { + final String key = "onHiddenChanged"; + final Map<String, Boolean> calls = new HashMap<String, Boolean>(); + Fragment fragment = new TestFragment() { + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + calls.put(key, hidden); + } + }; + shadowOf(fragment).setHidden(false); + txn.show(fragment).commit(); + assertFalse(calls.containsKey(key)); + } + + @Test + public void showHide_shouldHideFragment() { + shadowOf(fragment).setHidden(false); + txn.show(fragment).hide(fragment).commit(); + assertTrue(shadowOf(fragment).isHidden()); + } + + @Test + public void hideShow_shouldShowFragment() { + shadowOf(fragment).setHidden(false); + txn.hide(fragment).show(fragment).commit(); + assertFalse(shadowOf(fragment).isHidden()); + } + private static class MockTestFragmentManager extends TestFragmentManager { private boolean addFragmentWasCalled; private int addFragmentContainerViewId; |