• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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