1 package org.robolectric.shadows; 2 3 import static com.google.common.truth.Truth.assertThat; 4 import static org.robolectric.Robolectric.buildActivity; 5 import static org.robolectric.Shadows.shadowOf; 6 7 import android.app.Activity; 8 import android.content.Context; 9 import android.preference.Preference; 10 import android.preference.PreferenceGroup; 11 import android.preference.PreferenceManager; 12 import android.util.AttributeSet; 13 import androidx.test.ext.junit.runners.AndroidJUnit4; 14 import org.junit.Before; 15 import org.junit.Test; 16 import org.junit.runner.RunWith; 17 import org.robolectric.Robolectric; 18 19 @RunWith(AndroidJUnit4.class) 20 public class ShadowPreferenceGroupTest { 21 22 private TestPreferenceGroup group; 23 private ShadowPreference shadow; 24 private Activity activity; 25 private AttributeSet attrs; 26 private Preference pref1, pref2; 27 28 @Before setUp()29 public void setUp() throws Exception { 30 activity = buildActivity(Activity.class).create().get(); 31 attrs = Robolectric.buildAttributeSet().build(); 32 33 group = new TestPreferenceGroup(activity, attrs); 34 shadow = shadowOf(group); 35 shadow.callOnAttachedToHierarchy(new PreferenceManager(activity, 0)); 36 37 pref1 = new Preference(activity); 38 pref1.setKey("pref1"); 39 40 pref2 = new Preference(activity); 41 pref2.setKey("pref2"); 42 } 43 44 @Test shouldInheritFromPreference()45 public void shouldInheritFromPreference() { 46 assertThat(shadow).isInstanceOf(ShadowPreference.class); 47 } 48 49 @Test shouldAddPreferences()50 public void shouldAddPreferences() { 51 assertThat(group.getPreferenceCount()).isEqualTo(0); 52 53 // First add succeeds 54 assertThat(group.addPreference(pref1)).isTrue(); 55 assertThat(group.getPreferenceCount()).isEqualTo(1); 56 57 // Dupe add fails silently 58 assertThat(group.addPreference(pref1)).isTrue(); 59 assertThat(group.getPreferenceCount()).isEqualTo(1); 60 61 // Second add succeeds 62 assertThat(group.addPreference(pref2)).isTrue(); 63 assertThat(group.getPreferenceCount()).isEqualTo(2); 64 } 65 66 @Test shouldAddItemFromInflater()67 public void shouldAddItemFromInflater() { 68 assertThat(group.getPreferenceCount()).isEqualTo(0); 69 70 // First add succeeds 71 group.addItemFromInflater(pref1); 72 assertThat(group.getPreferenceCount()).isEqualTo(1); 73 74 // Dupe add fails silently 75 group.addItemFromInflater(pref1); 76 assertThat(group.getPreferenceCount()).isEqualTo(1); 77 78 // Second add succeeds 79 group.addItemFromInflater(pref2); 80 assertThat(group.getPreferenceCount()).isEqualTo(2); 81 } 82 83 @Test shouldGetPreference()84 public void shouldGetPreference() { 85 group.addPreference(pref1); 86 group.addPreference(pref2); 87 88 assertThat(group.getPreference(0)).isSameInstanceAs(pref1); 89 assertThat(group.getPreference(1)).isSameInstanceAs(pref2); 90 } 91 92 @Test shouldGetPreferenceCount()93 public void shouldGetPreferenceCount() { 94 assertThat(group.getPreferenceCount()).isEqualTo(0); 95 group.addPreference(pref1); 96 assertThat(group.getPreferenceCount()).isEqualTo(1); 97 group.addPreference(pref2); 98 assertThat(group.getPreferenceCount()).isEqualTo(2); 99 } 100 101 @Test shouldRemovePreference()102 public void shouldRemovePreference() { 103 group.addPreference(pref1); 104 group.addPreference(pref2); 105 assertThat(group.getPreferenceCount()).isEqualTo(2); 106 107 // First remove succeeds 108 assertThat(group.removePreference(pref1)).isTrue(); 109 assertThat(group.getPreferenceCount()).isEqualTo(1); 110 111 // Dupe remove fails 112 assertThat(group.removePreference(pref1)).isFalse(); 113 assertThat(group.getPreferenceCount()).isEqualTo(1); 114 115 // Second remove succeeds 116 assertThat(group.removePreference(pref2)).isTrue(); 117 assertThat(group.getPreferenceCount()).isEqualTo(0); 118 } 119 120 @Test shouldRemoveAll()121 public void shouldRemoveAll() { 122 group.addPreference(pref1); 123 group.addPreference(pref2); 124 assertThat(group.getPreferenceCount()).isEqualTo(2); 125 126 group.removeAll(); 127 assertThat(group.getPreferenceCount()).isEqualTo(0); 128 } 129 130 @Test shouldFindPreference()131 public void shouldFindPreference() { 132 group.addPreference(pref1); 133 group.addPreference(pref2); 134 135 assertThat(group.findPreference(pref1.getKey())).isSameInstanceAs(pref1); 136 assertThat(group.findPreference(pref2.getKey())).isSameInstanceAs(pref2); 137 } 138 139 @Test shouldFindPreferenceRecursively()140 public void shouldFindPreferenceRecursively() { 141 TestPreferenceGroup group2 = new TestPreferenceGroup(activity, attrs); 142 shadowOf(group2).callOnAttachedToHierarchy(new PreferenceManager(activity, 0)); 143 group2.addPreference(pref2); 144 145 group.addPreference(pref1); 146 group.addPreference(group2); 147 148 assertThat(group.findPreference(pref2.getKey())).isSameInstanceAs(pref2); 149 } 150 151 @Test shouldSetEnabledRecursively()152 public void shouldSetEnabledRecursively() { 153 boolean[] values = {false, true}; 154 155 TestPreferenceGroup group2 = new TestPreferenceGroup(activity, attrs); 156 shadowOf(group2).callOnAttachedToHierarchy(new PreferenceManager(activity, 0)); 157 group2.addPreference(pref2); 158 159 group.addPreference(pref1); 160 group.addPreference(group2); 161 162 for (boolean enabled : values) { 163 group.setEnabled(enabled); 164 165 assertThat(group.isEnabled()).isEqualTo(enabled); 166 assertThat(group2.isEnabled()).isEqualTo(enabled); 167 assertThat(pref1.isEnabled()).isEqualTo(enabled); 168 assertThat(pref2.isEnabled()).isEqualTo(enabled); 169 } 170 } 171 172 private static class TestPreferenceGroup extends PreferenceGroup { TestPreferenceGroup(Context context, AttributeSet attrs)173 public TestPreferenceGroup(Context context, AttributeSet attrs) { 174 super(context, attrs); 175 } 176 } 177 } 178