package org.robolectric.shadows; import android.app.Activity; import android.content.Context; import android.preference.Preference; import android.preference.PreferenceGroup; import android.preference.PreferenceManager; import android.util.AttributeSet; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.TestRunners; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.Robolectric.buildActivity; import static org.robolectric.Shadows.shadowOf; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowPreferenceGroupTest { private TestPreferenceGroup group; private ShadowPreference shadow; private Activity activity; private AttributeSet attrs; private Preference pref1, pref2; @Before public void setUp() throws Exception { activity = buildActivity(Activity.class).create().get(); attrs = Robolectric.buildAttributeSet().build(); group = new TestPreferenceGroup(activity, attrs); shadow = shadowOf(group); shadow.callOnAttachedToHierarchy(new PreferenceManager(activity, 0)); pref1 = new Preference(activity); pref1.setKey("pref1"); pref2 = new Preference(activity); pref2.setKey("pref2"); } @Test public void shouldInheritFromPreference() { assertThat(shadow).isInstanceOf(ShadowPreference.class); } @Test public void shouldAddPreferences() { assertThat(group.getPreferenceCount()).isEqualTo(0); // First add succeeds assertThat(group.addPreference(pref1)).isTrue(); assertThat(group.getPreferenceCount()).isEqualTo(1); // Dupe add fails silently assertThat(group.addPreference(pref1)).isTrue(); assertThat(group.getPreferenceCount()).isEqualTo(1); // Second add succeeds assertThat(group.addPreference(pref2)).isTrue(); assertThat(group.getPreferenceCount()).isEqualTo(2); } @Test public void shouldAddItemFromInflater() { assertThat(group.getPreferenceCount()).isEqualTo(0); // First add succeeds group.addItemFromInflater(pref1); assertThat(group.getPreferenceCount()).isEqualTo(1); // Dupe add fails silently group.addItemFromInflater(pref1); assertThat(group.getPreferenceCount()).isEqualTo(1); // Second add succeeds group.addItemFromInflater(pref2); assertThat(group.getPreferenceCount()).isEqualTo(2); } @Test public void shouldGetPreference() { group.addPreference(pref1); group.addPreference(pref2); assertThat(group.getPreference(0)).isSameAs(pref1); assertThat(group.getPreference(1)).isSameAs(pref2); } @Test public void shouldGetPreferenceCount() { assertThat(group.getPreferenceCount()).isEqualTo(0); group.addPreference(pref1); assertThat(group.getPreferenceCount()).isEqualTo(1); group.addPreference(pref2); assertThat(group.getPreferenceCount()).isEqualTo(2); } @Test public void shouldRemovePreference() { group.addPreference(pref1); group.addPreference(pref2); assertThat(group.getPreferenceCount()).isEqualTo(2); // First remove succeeds assertThat(group.removePreference(pref1)).isTrue(); assertThat(group.getPreferenceCount()).isEqualTo(1); // Dupe remove fails assertThat(group.removePreference(pref1)).isFalse(); assertThat(group.getPreferenceCount()).isEqualTo(1); // Second remove succeeds assertThat(group.removePreference(pref2)).isTrue(); assertThat(group.getPreferenceCount()).isEqualTo(0); } @Test public void shouldRemoveAll() { group.addPreference(pref1); group.addPreference(pref2); assertThat(group.getPreferenceCount()).isEqualTo(2); group.removeAll(); assertThat(group.getPreferenceCount()).isEqualTo(0); } @Test public void shouldFindPreference() { group.addPreference(pref1); group.addPreference(pref2); assertThat(group.findPreference(pref1.getKey())).isSameAs(pref1); assertThat(group.findPreference(pref2.getKey())).isSameAs(pref2); } @Test public void shouldFindPreferenceRecursively() { TestPreferenceGroup group2 = new TestPreferenceGroup(activity, attrs); shadowOf(group2).callOnAttachedToHierarchy(new PreferenceManager(activity, 0)); group2.addPreference(pref2); group.addPreference(pref1); group.addPreference(group2); assertThat(group.findPreference(pref2.getKey())).isSameAs(pref2); } @Test public void shouldSetEnabledRecursively() { boolean[] values = {false, true}; TestPreferenceGroup group2 = new TestPreferenceGroup(activity, attrs); shadowOf(group2).callOnAttachedToHierarchy(new PreferenceManager(activity, 0)); group2.addPreference(pref2); group.addPreference(pref1); group.addPreference(group2); for (boolean enabled : values) { group.setEnabled(enabled); assertThat(group.isEnabled()).isEqualTo(enabled); assertThat(group2.isEnabled()).isEqualTo(enabled); assertThat(pref1.isEnabled()).isEqualTo(enabled); assertThat(pref2.isEnabled()).isEqualTo(enabled); } } private static class TestPreferenceGroup extends PreferenceGroup { public TestPreferenceGroup(Context context, AttributeSet attrs) { super(context, attrs); } } }