PreferencePersistTest.java revision e936153a610c7ee933409fe4e1e9fdcc521d6e6f
1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.support.v7.preference.tests;
18
19import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
20import static org.junit.Assert.assertEquals;
21import static org.junit.Assert.assertFalse;
22import static org.junit.Assert.assertNull;
23import static org.junit.Assert.assertThat;
24import static org.junit.Assert.assertTrue;
25
26import android.content.Context;
27import android.content.SharedPreferences;
28import android.support.test.InstrumentationRegistry;
29import android.support.test.annotation.UiThreadTest;
30import android.support.test.espresso.core.deps.guava.collect.ImmutableSet;
31import android.support.test.filters.SmallTest;
32import android.support.test.runner.AndroidJUnit4;
33import android.support.v7.preference.PreferenceManager;
34import android.support.v7.preference.PreferenceScreen;
35import android.support.v7.preference.tests.helpers.PreferenceWrapper;
36
37import org.junit.Before;
38import org.junit.Test;
39import org.junit.runner.RunWith;
40
41import java.util.Set;
42
43/**
44 * Tests for {@link android.support.v7.preference.Preference} persist / retrieve logic.
45 */
46@SmallTest
47@RunWith(AndroidJUnit4.class)
48public class PreferencePersistTest {
49
50    private static final String KEY = "TestPrefKey";
51
52    private static final float FLOAT_PRECISION = 0.01f;
53
54    private static final Set<String> TEST_STR_SET = ImmutableSet.of("a", "b");
55    private static final Set<String> TEST_STR_SET2 = ImmutableSet.of("c", "d");
56    private static final Set<String> TEST_DEFAULT_STR_SET = ImmutableSet.of("e");
57
58    private PreferenceWrapper mPreference;
59    private SharedPreferences mSharedPref;
60
61    @Before
62    @UiThreadTest
63    public void setup() {
64        Context context = InstrumentationRegistry.getTargetContext();
65        PreferenceManager manager = new PreferenceManager(context);
66        mSharedPref = manager.getSharedPreferences();
67
68        mPreference = new PreferenceWrapper(context);
69        mPreference.setKey(KEY);
70
71        PreferenceScreen screen = manager.createPreferenceScreen(context);
72        screen.addPreference(mPreference);
73
74        // Make sure that the key is not present in SharedPreferences to ensure tests
75        // correctness.
76        mSharedPref.edit().remove(KEY).apply();
77        assertNull(mSharedPref.getString(KEY, null));
78    }
79
80    @Test
81    @UiThreadTest
82    public void string_retrieveWhenEmpty_returnsDefault() {
83        final String expected = "Default";
84
85        String result = mPreference.getString(expected);
86
87        assertEquals(expected, result);
88    }
89
90    @Test
91    @UiThreadTest
92    public void string_persist_getsStoredToSharedPrefs() {
93        final String expected = "Test";
94
95        boolean wasPersisted = mPreference.putString(expected);
96
97        assertTrue(wasPersisted);
98        assertEquals(expected, mSharedPref.getString(KEY, null));
99    }
100
101    @Test
102    @UiThreadTest
103    public void string_persistWhileDisabled_notPersisted() {
104        mPreference.setPersistent(false);
105
106        boolean wasPersisted = mPreference.putString("Test");
107
108        assertFalse(wasPersisted);
109        assertNull(mSharedPref.getString(KEY, null));
110    }
111
112    @Test
113    @UiThreadTest
114    public void string_persistAndRetrieve_returnsPersistedValue() {
115        final String expected = "Test";
116
117        mPreference.putString(expected);
118        String result = mPreference.getString("Default");
119
120        assertEquals(expected, result);
121    }
122
123    @Test
124    @UiThreadTest
125    public void string_persistTwiceAndRetrieve_returnsSecondValue() {
126        final String expected = "Second";
127
128        mPreference.putString("First");
129        mPreference.putString(expected);
130        String result = mPreference.getString("Default");
131
132        assertEquals(expected, result);
133    }
134
135
136    @Test
137    @UiThreadTest
138    public void stringSet_retrieveWhenEmpty_returnsDefault() {
139        final Set<String> expected = TEST_DEFAULT_STR_SET;
140
141        Set<String> result = mPreference.getStringSet(expected);
142
143        assertThat(result, containsInAnyOrder(expected.toArray()));
144    }
145
146    @Test
147    @UiThreadTest
148    public void stringSet_persist_getsStoredToSharedPrefs() {
149        boolean wasPersisted = mPreference.putStringSet(TEST_DEFAULT_STR_SET);
150
151        assertTrue(wasPersisted);
152        assertThat(mSharedPref.getStringSet(KEY, null),
153                containsInAnyOrder(TEST_DEFAULT_STR_SET.toArray()));
154    }
155
156    @Test
157    @UiThreadTest
158    public void stringSet_persistWhileDisabled_notPersisted() {
159        mPreference.setPersistent(false);
160
161        boolean wasPersisted = mPreference.putStringSet(TEST_STR_SET);
162
163        assertFalse(wasPersisted);
164        assertNull(mSharedPref.getString(KEY, null));
165    }
166
167    @Test
168    @UiThreadTest
169    public void stringSet_persistAndRetrieve_returnsPersistedValue() {
170        final Set<String> expected = TEST_STR_SET;
171
172        mPreference.putStringSet(expected);
173        Set<String> result = mPreference.getStringSet(TEST_DEFAULT_STR_SET);
174
175        assertThat(result, containsInAnyOrder(expected.toArray()));
176    }
177
178    @Test
179    @UiThreadTest
180    public void stringSet_persistTwiceAndRetrieve_returnsSecondValue() {
181        final Set<String> expected = TEST_STR_SET2;
182
183        mPreference.putStringSet(TEST_STR_SET);
184        mPreference.putStringSet(expected);
185        Set<String> result = mPreference.getStringSet(TEST_DEFAULT_STR_SET);
186
187        assertThat(result, containsInAnyOrder(expected.toArray()));
188    }
189
190
191    @Test
192    @UiThreadTest
193    public void int_retrieveWhenEmpty_returnsDefault() {
194        final int expected = 1;
195        int result = mPreference.getInt(expected);
196
197        assertEquals(expected, result);
198    }
199
200    @Test
201    @UiThreadTest
202    public void int_persist_getsStoredToSharedPrefs() {
203        final int expected = 1;
204
205        boolean wasPersisted = mPreference.putInt(expected);
206
207        assertTrue(wasPersisted);
208        assertEquals(expected, mSharedPref.getInt(KEY, -1));
209    }
210
211    @Test
212    @UiThreadTest
213    public void int_persistWhileDisabled_notPersisted() {
214        mPreference.setPersistent(false);
215
216        boolean wasPersisted = mPreference.putInt(1);
217
218        assertFalse(wasPersisted);
219        assertEquals(-1, mSharedPref.getLong(KEY, -1));
220    }
221
222    @Test
223    @UiThreadTest
224    public void int_persistAndRetrieve_returnsPersistedValue() {
225        final int expected = 1;
226
227        mPreference.putInt(expected);
228        int result = mPreference.getInt(-1);
229
230        assertEquals(expected, result);
231    }
232
233    @Test
234    @UiThreadTest
235    public void int_persistTwiceAndRetrieve_returnsSecondValue() {
236        final int expected = 2;
237
238        mPreference.putInt(1);
239        mPreference.putInt(expected);
240        int result = mPreference.getInt(-1);
241
242        assertEquals(expected, result);
243    }
244
245
246    @Test
247    @UiThreadTest
248    public void long_retrieveWhenEmpty_returnsDefault() {
249        assertEquals(1, mPreference.getLong(1));
250    }
251
252    @Test
253    @UiThreadTest
254    public void long_persist_getsStoredToSharedPrefs() {
255        final long expected = 1;
256
257        boolean wasPersisted = mPreference.putLong(expected);
258
259        assertTrue(wasPersisted);
260        assertEquals(expected, mSharedPref.getLong(KEY, -1));
261    }
262
263    @Test
264    @UiThreadTest
265    public void long_persistWhileDisabled_notPersisted() {
266        mPreference.setPersistent(false);
267
268        boolean wasPersisted = mPreference.putLong(1);
269
270        assertFalse(wasPersisted);
271        assertEquals(-1, mSharedPref.getLong(KEY, -1));
272    }
273
274    @Test
275    @UiThreadTest
276    public void long_persistAndRetrieve_returnsPersistedValue() {
277        final long expected = 1;
278
279        mPreference.putLong(expected);
280        long result = mPreference.getLong(-1);
281
282        assertEquals(expected, result);
283    }
284
285    @Test
286    @UiThreadTest
287    public void long_persistTwiceAndRetrieve_returnsSecondValue() {
288        final long expected = 2;
289
290        mPreference.putLong(1);
291        mPreference.putLong(expected);
292        long result = mPreference.getLong(-1);
293
294        assertEquals(expected, result);
295    }
296
297
298    @Test
299    @UiThreadTest
300    public void float_retrieveWhenEmpty_returnsDefault() {
301        assertEquals(1, mPreference.getFloat(1), FLOAT_PRECISION);
302    }
303
304    @Test
305    @UiThreadTest
306    public void float_persist_getsStoredToSharedPrefs() {
307        final float expected = 1;
308
309        boolean wasPersisted = mPreference.putFloat(expected);
310
311        assertTrue(wasPersisted);
312        assertEquals(expected, mSharedPref.getFloat(KEY, -1), FLOAT_PRECISION);
313    }
314
315    @Test
316    @UiThreadTest
317    public void float_persistWhileDisabled_notPersisted() {
318        mPreference.setPersistent(false);
319
320        boolean wasPersisted = mPreference.putFloat(1);
321
322        assertFalse(wasPersisted);
323        assertEquals(-1, mSharedPref.getFloat(KEY, -1), FLOAT_PRECISION);
324    }
325
326    @Test
327    @UiThreadTest
328    public void float_persistAndRetrieve_returnsPersistedValue() {
329        final float expected = 1;
330
331        mPreference.putFloat(expected);
332        float result = mPreference.getFloat(-1);
333
334        assertEquals(expected, result, FLOAT_PRECISION);
335    }
336
337    @Test
338    @UiThreadTest
339    public void float_persistTwiceAndRetrieve_returnsSecondValue() {
340        final float expected = 2;
341
342        mPreference.putFloat(1);
343        mPreference.putFloat(expected);
344        float result = mPreference.getFloat(-1);
345
346        assertEquals(expected, result, FLOAT_PRECISION);
347    }
348
349
350    @Test
351    @UiThreadTest
352    public void boolean_retrieveWhenEmpty_returnsDefault() {
353        final boolean expected = true;
354
355        boolean result = mPreference.getBoolean(expected);
356
357        assertEquals(expected, result);
358    }
359
360    @Test
361    @UiThreadTest
362    public void boolean_persist_getsStoredToSharedPrefs() {
363        final boolean expected = true;
364
365        boolean wasPersisted = mPreference.putBoolean(expected);
366
367        assertTrue(wasPersisted);
368        assertEquals(expected, mSharedPref.getBoolean(KEY, !expected));
369    }
370
371    @Test
372    @UiThreadTest
373    public void boolean_persistWhileDisabled_notPersisted() {
374        mPreference.setPersistent(false);
375
376        boolean wasPersisted = mPreference.putBoolean(true);
377
378        assertFalse(wasPersisted);
379        assertEquals(false, mSharedPref.getBoolean(KEY, false));
380    }
381
382    @Test
383    @UiThreadTest
384    public void boolean_persistAndRetrieve_returnsPersistedValue() {
385        final boolean expected = true;
386
387        mPreference.putBoolean(expected);
388        boolean result = mPreference.getBoolean(!expected);
389
390        assertEquals(expected, result);
391    }
392
393    @Test
394    @UiThreadTest
395    public void boolean_persistTwiceAndRetrieve_returnsSecondValue() {
396        final boolean expected = false;
397
398        mPreference.putBoolean(!expected);
399        mPreference.putBoolean(expected);
400        boolean result = mPreference.getBoolean(!expected);
401
402        assertEquals(expected, result);
403    }
404
405}
406