diff options
author | Jonathan Gerrish <jonathan@indiekid.org> | 2017-11-02 16:13:15 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-02 16:13:15 -0400 |
commit | 79a5030989fdcea6e79b0bece14d4ee4a37e77a7 (patch) | |
tree | e58f9ead43f7159bda73272c600ebde1e0e591c9 | |
parent | 1914b01c68703772e9f7db3e478b54304e4f2b9e (diff) | |
parent | 1be19af9780e77e1294ffed9f220e3da8008892d (diff) | |
download | robolectric-shadows-79a5030989fdcea6e79b0bece14d4ee4a37e77a7.tar.gz |
Merge pull request #3498 from alwa/issues/3296
Added support for fragment arguments
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); |