package org.robolectric.shadows; import static org.assertj.core.api.Assertions.assertThat; import android.app.Activity; import android.app.FragmentManager; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.R; import org.robolectric.Robolectric; import org.robolectric.TestRunners; /** * Current Android examples show adding a PreferenceFragment as part of the * hosting Activity lifecycle. This resulted in a null pointer exception when * trying to access a Context while inflating the Preference objects defined in * xml. This class tests that path. */ @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowPreferenceActivityTestWithFragment { private TestPreferenceActivity activity = Robolectric.setupActivity(TestPreferenceActivity.class); private TestPreferenceFragment fragment; private static final String FRAGMENT_TAG = "fragmentPreferenceTag"; @Before public void before() { this.fragment = (TestPreferenceFragment) this.activity.getFragmentManager().findFragmentByTag(FRAGMENT_TAG); } @Test public void fragmentIsNotNull() { assertThat(this.fragment).isNotNull(); } @Test public void preferenceAddedWithCorrectDetails() { Preference preference = fragment.findPreference("edit_text"); assertThat(preference).isNotNull(); assertThat(preference.getTitle()).isEqualTo("EditText Test"); assertThat(preference.getSummary()).isEqualTo(""); } private static class TestPreferenceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager fragmentManager = this.getFragmentManager(); TestPreferenceFragment fragment = new TestPreferenceFragment(); fragmentManager.beginTransaction().replace(android.R.id.content, fragment, FRAGMENT_TAG).commit(); } } private static class TestPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.addPreferencesFromResource(R.xml.preferences); } } }