FragmentController { @Nullable public Fragment findFragmentByFactoryId(final int factoryFragmentId) { this.assertNotDestroyed("FIND FRAGMENT BY FACTORY ID"); this.assertHasFactory(); if (!factory.isFragmentProvided(factoryFragmentId)) { throw new IllegalArgumentException( "Cannot find fragment by factory id. Current factory(" + factory.getClass() + ") " + "does not provide fragment for the requested id(" + factoryFragmentId + ")!"); } return manager.findFragmentByTag(factory.createFragmentTag(factoryFragmentId)); } FragmentController(@NonNull final FragmentActivity parentActivity);  FragmentController(@NonNull final Fragment parentFragment);  FragmentController(@NonNull final FragmentManager fragmentManager);  FragmentController(@Nullable final Context context, @NonNull final FragmentManager fragmentManager); @NonNull FragmentManager getFragmentManager(); void setViewContainerId(@IdRes final int containerId); @IdRes int getViewContainerId(); void setFactory(@Nullable final FragmentFactory factory); boolean hasFactory(); @Nullable FragmentFactory getFactory(); void setRequestInterceptor(@Nullable final FragmentRequestInterceptor interceptor); void registerOnRequestListener(@NonNull final OnRequestListener listener); void unregisterOnRequestListener(@NonNull final OnRequestListener listener); void registerOnBackStackChangeListener(@NonNull final OnBackStackChangeListener listener); void unregisterOnBackStackChangeListener(@NonNull final OnBackStackChangeListener listener); @NonNull final FragmentRequest newRequest(); @NonNull final FragmentRequest newRequest(@NonNull final Fragment fragment); @NonNull final FragmentRequest newRequest(final int fragmentId); @SuppressWarnings("NewApi") @NonNull FragmentTransaction createTransaction(@NonNull final FragmentRequest request); @Nullable Fragment findCurrentFragment(); @Nullable Fragment findFragmentByFactoryId(final int factoryFragmentId); boolean hasBackStackEntries(); @Nullable FragmentManager.BackStackEntry getTopBackStackEntry(); void clearBackStack(); boolean clearBackStackImmediate(); final void destroy(); static final String FRAGMENT_TAG; static final int NO_CONTAINER_ID; }
@Test public void testFindFragmentByFactoryId() { final FragmentManager mockManager = mock(FragmentManager.class); final FragmentFactory mockFactory = mock(FragmentFactory.class); final Fragment mockFragment = mock(TestFragment.class); final FragmentController controller = new FragmentController(mockManager); controller.setFactory(mockFactory); when(mockFactory.isFragmentProvided(TestFactory.FRAGMENT_1)).thenReturn(true); when(mockFactory.createFragmentTag(TestFactory.FRAGMENT_1)).thenReturn("TAG.TestFragment"); when(mockManager.findFragmentByTag("TAG.TestFragment")).thenReturn(mockFragment); assertThat(controller.findFragmentByFactoryId(TestFactory.FRAGMENT_1), is(mockFragment)); verify(mockFactory).isFragmentProvided(TestFactory.FRAGMENT_1); verify(mockFactory).createFragmentTag(TestFactory.FRAGMENT_1); verify(mockManager).findFragmentByTag("TAG.TestFragment"); }
@Test(expected = IllegalStateException.class) public void testFindFragmentByFactoryIdWithoutFactoryAttached() { final FragmentController controller = new FragmentController(mock(FragmentManager.class)); controller.findFragmentByFactoryId(TestFactory.FRAGMENT_1); }
@Test(expected = IllegalStateException.class) public void testFindFragmentByFactoryIdWhenDestroyed() { createDestroyedController().findFragmentByFactoryId(TestFactory.FRAGMENT_1); }