package com.lgvalle.beaufitulphotos;

import android.support.v4.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.ActionBarActivity;
import org.junit.After;
import org.robolectric.Robolectric;
import org.robolectric.util.ActivityController;

/**
 * Thanks to: http://blog.nikhaldimann.com/2013/10/10/robolectric-2-2-some-pages-from-the-missing-manual/
 */
public class FragmentTestCase<T extends Fragment> {
	private static final String FRAGMENT_TAG = "fragment";

	private ActivityController controller;
	private FragmentActivity activity;
	private T fragment;

	@After
	public void destroyFragment() {
		if (fragment != null) {
			FragmentManager manager = activity.getSupportFragmentManager();
			manager.beginTransaction().remove(fragment).commit();
			fragment = null;
			activity = null;
		}
	}

	public void pauseAndResumeFragment() {
		controller.pause().resume();
	}

	public T recreateFragment() {
		activity.recreate();
		// Recreating the activity creates a new instance of the
		// fragment which we need to retrieve by tag.
		fragment = (T) activity.getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
		return fragment;
	}

	/**
	 * Adds the fragment to a new blank activity, thereby fully
	 * initializing its view.
	 */
	public void startFragment(T fragment) {
		this.fragment = fragment;
		controller = Robolectric.buildActivity(ActionBarActivity.class);
		activity = (ActionBarActivity) controller.create().start().visible().get();
		FragmentManager manager = activity.getSupportFragmentManager();
		manager.beginTransaction().add(fragment, FRAGMENT_TAG).commit();
	}

}