aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gerrish <jonathan@indiekid.org>2017-11-02 16:13:15 -0400
committerGitHub <noreply@github.com>2017-11-02 16:13:15 -0400
commit79a5030989fdcea6e79b0bece14d4ee4a37e77a7 (patch)
treee58f9ead43f7159bda73272c600ebde1e0e591c9
parent1914b01c68703772e9f7db3e478b54304e4f2b9e (diff)
parent1be19af9780e77e1294ffed9f220e3da8008892d (diff)
downloadrobolectric-shadows-79a5030989fdcea6e79b0bece14d4ee4a37e77a7.tar.gz
Merge pull request #3498 from alwa/issues/3296
Added support for fragment arguments
-rw-r--r--robolectric/src/main/java/org/robolectric/Robolectric.java41
-rw-r--r--robolectric/src/main/java/org/robolectric/android/controller/FragmentController.java34
-rw-r--r--robolectric/src/test/java/org/robolectric/android/controller/FragmentControllerTest.java20
3 files changed, 83 insertions, 12 deletions
diff --git a/robolectric/src/main/java/org/robolectric/Robolectric.java b/robolectric/src/main/java/org/robolectric/Robolectric.java
index 9e41a385b..999e712d2 100644
--- a/robolectric/src/main/java/org/robolectric/Robolectric.java
+++ b/robolectric/src/main/java/org/robolectric/Robolectric.java
@@ -7,12 +7,9 @@ import android.app.Service;
import android.app.backup.BackupAgent;
import android.content.ContentProvider;
import android.content.Intent;
+import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
-import java.util.ServiceLoader;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import org.robolectric.android.XmlResourceParserImpl;
import org.robolectric.android.controller.ActivityController;
import org.robolectric.android.controller.BackupAgentController;
@@ -29,6 +26,11 @@ import org.robolectric.util.Scheduler;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.util.ServiceLoader;
+
public class Robolectric {
private static ShadowsAdapter shadowsAdapter = null;
private static Iterable<ShadowProvider> providers;
@@ -105,7 +107,13 @@ public class Robolectric {
return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass));
}
- public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass, Class<? extends Activity> activityClass) {
+ public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass,
+ Bundle arguments) {
+ return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass), arguments);
+ }
+
+ public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass,
+ Class<? extends Activity> activityClass) {
return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass), activityClass);
}
@@ -113,10 +121,31 @@ public class Robolectric {
return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass), intent);
}
- public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass, Class<? extends Activity> activityClass, Intent intent) {
+ public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass,
+ Intent intent,
+ Bundle arguments) {
+ return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass), intent, arguments);
+ }
+
+ public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass,
+ Class<? extends Activity> activityClass,
+ Intent intent) {
return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass), activityClass, intent);
}
+ public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass,
+ Class<? extends Activity> activityClass,
+ Bundle arguments) {
+ return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass), activityClass, arguments);
+ }
+
+ public static <T extends Fragment> FragmentController<T> buildFragment(Class<T> fragmentClass,
+ Class<? extends Activity> activityClass,
+ Intent intent,
+ Bundle arguments) {
+ return FragmentController.of(ReflectionHelpers.callConstructor(fragmentClass), activityClass, intent, arguments);
+ }
+
public static <T extends BackupAgent> BackupAgentController<T> buildBackupAgent(Class<T> backupAgentClass) {
return BackupAgentController.of(ReflectionHelpers.callConstructor(backupAgentClass));
}
diff --git a/robolectric/src/main/java/org/robolectric/android/controller/FragmentController.java b/robolectric/src/main/java/org/robolectric/android/controller/FragmentController.java
index 2c2a8a471..5888a31db 100644
--- a/robolectric/src/main/java/org/robolectric/android/controller/FragmentController.java
+++ b/robolectric/src/main/java/org/robolectric/android/controller/FragmentController.java
@@ -16,24 +16,54 @@ public class FragmentController<F extends Fragment> extends ComponentController<
private final ActivityController<? extends Activity> activityController;
public static <F extends Fragment> FragmentController<F> of(F fragment) {
- return of(fragment, FragmentControllerActivity.class, null);
+ return of(fragment, FragmentControllerActivity.class, null, null);
}
public static <F extends Fragment> FragmentController<F> of(F fragment, Class<? extends Activity> activityClass) {
- return of(fragment, activityClass, null);
+ return of(fragment, activityClass, null, null);
}
public static <F extends Fragment> FragmentController<F> of(F fragment, Intent intent) {
return new FragmentController<>(Robolectric.getShadowsAdapter(), fragment, FragmentControllerActivity.class, intent);
}
+ public static <F extends Fragment> FragmentController<F> of(F fragment, Bundle arguments) {
+ return new FragmentController<>(Robolectric.getShadowsAdapter(), fragment, FragmentControllerActivity.class, arguments);
+ }
+
+ public static <F extends Fragment> FragmentController<F> of(F fragment, Intent intent, Bundle arguments) {
+ return new FragmentController<>(Robolectric.getShadowsAdapter(), fragment, FragmentControllerActivity.class, intent,
+ arguments);
+ }
+
public static <F extends Fragment> FragmentController<F> of(F fragment, Class<? extends Activity> activityClass, Intent intent) {
return new FragmentController<>(Robolectric.getShadowsAdapter(), fragment, activityClass, intent);
}
+ public static <F extends Fragment> FragmentController<F> of(F fragment, Class<? extends Activity> activityClass, Bundle arguments) {
+ return new FragmentController<>(Robolectric.getShadowsAdapter(), fragment, activityClass, arguments);
+ }
+
+ public static <F extends Fragment> FragmentController<F> of(F fragment, Class<? extends Activity> activityClass,
+ Intent intent, Bundle arguments) {
+ return new FragmentController<>(Robolectric.getShadowsAdapter(), fragment, activityClass, intent, arguments);
+ }
+
private FragmentController(ShadowsAdapter shadowsAdapter, F fragment, Class<? extends Activity> activityClass, Intent intent) {
+ this(shadowsAdapter, fragment, activityClass, intent, null);
+ }
+
+ private FragmentController(ShadowsAdapter shadowsAdapter, F fragment, Class<? extends Activity> activityClass, Bundle arguments) {
+ this(shadowsAdapter, fragment, activityClass, null, arguments);
+ }
+
+ private FragmentController(ShadowsAdapter shadowsAdapter, F fragment, Class<? extends Activity> activityClass,
+ Intent intent, Bundle arguments) {
super(shadowsAdapter, fragment, intent);
this.fragment = fragment;
+ if (arguments != null) {
+ this.fragment.setArguments(arguments);
+ }
this.activityController = Robolectric.buildActivity(activityClass, intent);
}
diff --git a/robolectric/src/test/java/org/robolectric/android/controller/FragmentControllerTest.java b/robolectric/src/test/java/org/robolectric/android/controller/FragmentControllerTest.java
index 109ca39e7..bcc215bc7 100644
--- a/robolectric/src/test/java/org/robolectric/android/controller/FragmentControllerTest.java
+++ b/robolectric/src/test/java/org/robolectric/android/controller/FragmentControllerTest.java
@@ -1,9 +1,5 @@
package org.robolectric.android.controller;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
@@ -18,6 +14,10 @@ import org.junit.runner.RunWith;
import org.robolectric.R;
import org.robolectric.RobolectricTestRunner;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
@RunWith(RobolectricTestRunner.class)
public class FragmentControllerTest {
@@ -135,6 +135,18 @@ public class FragmentControllerTest {
}
@Test
+ public void withArguments() {
+ final LoginFragment fragment = new LoginFragment();
+
+ Bundle arguments = new Bundle();
+ arguments.putString("test_argument", "test_value");
+ FragmentController<LoginFragment> controller = FragmentController.of(fragment, LoginActivity.class, arguments).create();
+
+ Bundle argumentsInFragment = controller.get().getArguments();
+ assertThat(argumentsInFragment.getString("test_argument")).isEqualTo("test_value");
+ }
+
+ @Test
public void visible() {
final LoginFragment fragment = new LoginFragment();
final FragmentController<LoginFragment> controller = FragmentController.of(fragment, LoginActivity.class);