package com.xtremelabs.robolectric.shadows; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertThat; import java.util.HashMap; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import android.app.Activity; import android.content.Context; import android.preference.Preference; import android.preference.PreferenceGroup; import android.util.AttributeSet; import com.xtremelabs.robolectric.Robolectric; import com.xtremelabs.robolectric.WithTestDefaultsRunner; import com.xtremelabs.robolectric.tester.android.util.TestAttributeSet; @RunWith(WithTestDefaultsRunner.class) public class PreferenceGroupTest { private TestPreferenceGroup group; private ShadowPreferenceGroup shadow; private Context context; private TestAttributeSet attrs; private Preference pref1, pref2; @Before public void setUp() throws Exception { context = new Activity(); attrs = new TestAttributeSet( new HashMap() ); group = new TestPreferenceGroup(context, attrs); shadow = Robolectric.shadowOf(group); pref1 = new Preference(context); pref1.setKey("pref1"); pref2 = new Preference(context); pref2.setKey("pref2"); } @Test public void shouldInheritFromPreference() { assertThat(shadow, instanceOf(ShadowPreference.class)); } @Test public void shouldAddPreferences() { assertThat( group.getPreferenceCount(), equalTo(0)); // First add succeeds assertThat( group.addPreference(pref1), equalTo(true)); assertThat( group.getPreferenceCount(), equalTo(1)); // Dupe add fails silently assertThat( group.addPreference(pref1), equalTo(true)); assertThat( group.getPreferenceCount(), equalTo(1)); // Second add succeeds assertThat( group.addPreference(pref2), equalTo(true)); assertThat( group.getPreferenceCount(), equalTo(2)); } @Test public void shouldAddItemFromInflater() { assertThat( group.getPreferenceCount(), equalTo(0)); // First add succeeds group.addItemFromInflater(pref1); assertThat( group.getPreferenceCount(), equalTo(1)); // Dupe add fails silently group.addItemFromInflater(pref1); assertThat( group.getPreferenceCount(), equalTo(1)); // Second add succeeds group.addItemFromInflater(pref2); assertThat( group.getPreferenceCount(), equalTo(2)); } @Test public void shouldGetPreference() { group.addPreference(pref1); group.addPreference(pref2); assertThat( group.getPreference(0), sameInstance(pref1)); assertThat( group.getPreference(1), sameInstance(pref2)); } @Test public void shouldGetPreferenceCount() { assertThat( group.getPreferenceCount(), equalTo(0)); group.addPreference(pref1); assertThat( group.getPreferenceCount(), equalTo(1)); group.addPreference(pref2); assertThat( group.getPreferenceCount(), equalTo(2)); } @Test public void shouldRemovePreference() { group.addPreference(pref1); group.addPreference(pref2); assertThat( group.getPreferenceCount(), equalTo(2)); // First remove succeeds assertThat( group.removePreference(pref1), equalTo(true)); assertThat( group.getPreferenceCount(), equalTo(1)); // Dupe remove fails assertThat( group.removePreference(pref1), equalTo(false)); assertThat( group.getPreferenceCount(), equalTo(1)); // Second remove succeeds assertThat( group.removePreference(pref2), equalTo(true)); assertThat( group.getPreferenceCount(), equalTo(0)); } @Test public void shouldRemoveAll() { group.addPreference(pref1); group.addPreference(pref2); assertThat( group.getPreferenceCount(), equalTo(2)); group.removeAll(); assertThat( group.getPreferenceCount(), equalTo(0)); } @Test public void shouldFindPreference() { group.addPreference(pref1); group.addPreference(pref2); assertThat( group.findPreference(pref1.getKey()), sameInstance(pref1)); assertThat( group.findPreference(pref2.getKey()), sameInstance(pref2)); } @Test public void shouldFindPreferenceRecursively() { TestPreferenceGroup group2 = new TestPreferenceGroup(context, attrs); group2.addPreference(pref2); group.addPreference(pref1); group.addPreference(group2); assertThat( group.findPreference(pref2.getKey()), sameInstance(pref2)); } @Test public void shouldSetEnabledRecursively() { boolean[] values = { false, true }; TestPreferenceGroup group2 = new TestPreferenceGroup(context, attrs); group2.addPreference(pref2); group.addPreference(pref1); group.addPreference(group2); for( boolean enabled : values ) { group.setEnabled(enabled); assertThat(group.isEnabled(), equalTo(enabled)); assertThat(group2.isEnabled(), equalTo(enabled)); assertThat(pref1.isEnabled(), equalTo(enabled)); assertThat(pref2.isEnabled(), equalTo(enabled)); } } private static class TestPreferenceGroup extends PreferenceGroup { public TestPreferenceGroup(Context context, AttributeSet attrs) { super(context, attrs); } } }