aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Stuppy <jstuppy@google.com>2012-09-18 10:12:55 -0700
committerJon Boekenoogen <jboekeno@google.com>2012-09-18 10:13:55 -0700
commitecdc5be4d4a609aa52faf23716dee19b074aa858 (patch)
tree92ef045da702c62f90a15d06d2895d3c414c000b
parent2a6e5df32946f94d05e679c77fa4feec129ac11b (diff)
downloadrobolectric-ecdc5be4d4a609aa52faf23716dee19b074aa858.tar.gz
Added show and hide to TestFragmentTransaction and associated TestFragmentManager
-rw-r--r--src/main/java/com/xtremelabs/robolectric/shadows/ShadowFragment.java10
-rw-r--r--src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentManager.java14
-rw-r--r--src/main/java/com/xtremelabs/robolectric/tester/android/util/TestFragmentTransaction.java20
-rw-r--r--src/test/java/com/xtremelabs/robolectric/shadows/FragmentTransactionTest.java110
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;