package com.hannesdorfmann.mosby3.mvp.delegate; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.hannesdorfmann.mosby3.mvp.MvpBasePresenter; import com.hannesdorfmann.mosby3.mvp.MvpFragment; import com.hannesdorfmann.mosby3.mvp.MvpPresenter; import com.hannesdorfmann.mosby3.mvp.MvpView; import junit.framework.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.support.v4.SupportFragmentTestUtil; /** * @author Hannes Dorfmann */ @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE) public class FragmentMvpDelegateUiLessMvpFragmentTest { public static class UiLessFragment extends MvpFragment<MvpView, MvpPresenter<MvpView>> { @Override public MvpPresenter<MvpView> createPresenter() { return new MvpBasePresenter<MvpView>(); } } public static class CorrectUiFragment extends MvpFragment<MvpView, MvpPresenter<MvpView>> { @Override public MvpPresenter<MvpView> createPresenter() { return new MvpBasePresenter<MvpView>(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return new View(RuntimeEnvironment.application); } } @Test() public void uiLessShouldFail() { try { SupportFragmentTestUtil.startVisibleFragment(new UiLessFragment()); Assert.fail("Exception expected"); } catch (IllegalStateException e) { Assert.assertEquals( "It seems that you are using "+UiLessFragment.class.getCanonicalName()+" as headless (UI less) fragment (because onViewCreated() has not been called or maybe delegation misses that part). Having a Presenter without a View (UI) doesn't make sense. Simply use an usual fragment instead of an MvpFragment if you want to use a UI less Fragment", e.getMessage()); } } @Test public void correctUi() { SupportFragmentTestUtil.startVisibleFragment(new CorrectUiFragment()); } }