17c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis/*
27c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * Copyright (C) 2017 The Android Open Source Project
37c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis *
47c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * Licensed under the Apache License, Version 2.0 (the "License");
57c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * you may not use this file except in compliance with the License.
67c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * You may obtain a copy of the License at
77c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis *
87c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis *      http://www.apache.org/licenses/LICENSE-2.0
97c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis *
107c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * Unless required by applicable law or agreed to in writing, software
117c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * distributed under the License is distributed on an "AS IS" BASIS,
127c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * See the License for the specific language governing permissions and
147c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * limitations under the License.
157c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis */
167c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
177c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlispackage android.support.v7.preference.tests;
187c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
197c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static junit.framework.TestCase.assertNotNull;
207c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
217c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.junit.Assert.assertEquals;
227c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.junit.Assert.assertNull;
234ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlisimport static org.junit.Assert.assertTrue;
24e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlisimport static org.mockito.AdditionalMatchers.or;
25963facb8fce35022f296c38fadafd9a959ab1655Aurimas Liutikasimport static org.mockito.ArgumentMatchers.nullable;
26e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlisimport static org.mockito.Matchers.any;
277c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Matchers.anyBoolean;
287c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Matchers.anyFloat;
297c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Matchers.anyInt;
307c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Matchers.anyLong;
317c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Matchers.anyString;
327c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Matchers.eq;
33e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlisimport static org.mockito.Matchers.isNull;
347c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Mockito.atLeast;
357c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Mockito.atLeastOnce;
367c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Mockito.mock;
377c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Mockito.verify;
387c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Mockito.verifyNoMoreInteractions;
397c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport static org.mockito.Mockito.verifyZeroInteractions;
404ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlisimport static org.mockito.Mockito.when;
417c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
427c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.content.Context;
437c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.content.SharedPreferences;
447c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.test.InstrumentationRegistry;
457c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.test.annotation.UiThreadTest;
467c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.test.filters.SmallTest;
477c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.test.runner.AndroidJUnit4;
484ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlisimport android.support.v7.preference.CheckBoxPreference;
497c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.v7.preference.Preference;
507c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.v7.preference.PreferenceDataStore;
517c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.v7.preference.PreferenceManager;
527c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport android.support.v7.preference.PreferenceScreen;
53e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlisimport android.support.v7.preference.tests.helpers.PreferenceWrapper;
547c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
557c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport org.junit.Before;
567c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport org.junit.Test;
577c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport org.junit.runner.RunWith;
587c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlisimport org.mockito.Mockito;
597c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
6083222b0ed2926aee15e5abdda3319089a8cc52baAurimas Liutikasimport java.util.Collections;
61e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlisimport java.util.HashSet;
62e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlisimport java.util.Set;
63e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
647c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis/**
657c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis * Tests for {@link PreferenceDataStore} API.
667c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis */
677c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis@SmallTest
687c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis@RunWith(AndroidJUnit4.class)
697c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlispublic class PreferenceDataStoreTest {
707c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
714ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    private Context mContext;
727c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private PreferenceWrapper mPreference;
737c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private PreferenceDataStore mDataStore;
747c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private PreferenceScreen mScreen;
757c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private PreferenceManager mManager;
767c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private SharedPreferences mSharedPref;
777c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
787c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private static final String KEY = "TestPrefKey";
797c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private static final String TEST_STR = "Test";
807c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private static final String TEST_DEFAULT_STR = "TestDefault";
817c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private static final String TEST_WRONG_STR = "TestFromSharedPref";
827c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
837c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Before
847c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
857c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void setup() {
864ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        mContext = InstrumentationRegistry.getTargetContext();
877c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mDataStore = mock(PreferenceDataStore.class);
887c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
894ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        mManager = new PreferenceManager(mContext);
907c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mSharedPref = mManager.getSharedPreferences();
914ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        mScreen = mManager.createPreferenceScreen(mContext);
924ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        mPreference = new PreferenceWrapper(mContext);
937c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setKey(KEY);
947c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
957c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        // Make sure that the key is not present in SharedPreferences to ensure test
967c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        // correctness.
977c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.getSharedPreferences().edit().remove(KEY).commit();
987c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
997c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
100e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
101e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testThatDataStoreIsNullByDefault() {
102e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        Preference preference = new Preference(mContext);
103e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mScreen.addPreference(preference);
104e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
105e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertNull(preference.getPreferenceDataStore());
106e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertNotNull(preference.getSharedPreferences());
107e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
108e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertNull(mManager.getPreferenceDataStore());
109e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertNotNull(mManager.getSharedPreferences());
110e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
111e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
112e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
113e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testSetGetOnPreference() {
114e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        Preference preference = new Preference(mContext);
115e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
116e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        preference.setPreferenceDataStore(mDataStore);
117e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
118e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertEquals(mDataStore, preference.getPreferenceDataStore());
119e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
120e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
121e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
122e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testSetGetOnPreferenceManager() {
123e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
124e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
125e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertEquals(mDataStore, mManager.getPreferenceDataStore());
126e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertNull(mManager.getSharedPreferences());
127e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
128e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
129e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
130e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testSetOnPreferenceManagerGetOnPreference() {
131e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        Preference preference = new Preference(mContext);
132e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mScreen.addPreference(preference);
133e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
134e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
135e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
136e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertEquals(mDataStore, preference.getPreferenceDataStore());
137e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertNull(preference.getSharedPreferences());
138e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
139e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
140e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
141e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @UiThreadTest
142e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testDataStoresHierarchy() {
143e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
144e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        PreferenceDataStore secondaryDataStore = mock(PreferenceDataStore.class,
145e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis                Mockito.CALLS_REAL_METHODS);
146e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mManager.setPreferenceDataStore(secondaryDataStore);
147e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mScreen.addPreference(mPreference);
148e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
149e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.putString(TEST_STR);
150e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
151e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        // Check that the Preference returns the correct data store.
152e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertEquals(mDataStore, mPreference.getPreferenceDataStore());
153e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
154e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        // Check that the secondary data store assigned to the manager was NOT used.
155e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verifyZeroInteractions(secondaryDataStore);
156e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
157e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        // Check that the primary data store assigned directly to the preference was used.
158e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verify(mDataStore, atLeastOnce()).putString(eq(KEY), anyString());
159e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
160e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
1614ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    /**
1624ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis     * Test that the initial value is taken from the data store (before the preference gets assigned
1634ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis     * to the preference hierarchy).
1644ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis     */
1654ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    @Test
1664ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    @UiThreadTest
167e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testInitialValueIsFromDataStoreOnPreference() {
1684ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        when(mDataStore.getBoolean(anyString(), anyBoolean())).thenReturn(true);
1694ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
1704ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        CheckBoxPreference pref = new CheckBoxPreference(mContext);
1714ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        pref.setKey("CheckboxTestPref");
1724ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        pref.setPreferenceDataStore(mDataStore);
1734ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
1744ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        mScreen.addPreference(pref);
1754ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
1764ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        assertTrue(pref.isChecked());
1774ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    }
1784ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
1794ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    /**
1804ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis     * Test that the initial value is taken from the data store (before the preference gets assigned
1814ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis     * to the preference hierarchy).
1824ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis     */
1834ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    @Test
1844ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    @UiThreadTest
185e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testInitialValueIsFromDataStoreOnPreferenceManager() {
1864ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        when(mDataStore.getBoolean(anyString(), anyBoolean())).thenReturn(true);
1874ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
188e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
1894ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        CheckBoxPreference pref = new CheckBoxPreference(mContext);
1904ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        pref.setKey("CheckboxTestPref");
1914ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
1924ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        mScreen.addPreference(pref);
1934ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
1944ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis        assertTrue(pref.isChecked());
1954ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis    }
1964ef4b7446ef5802eeb5ae3adf450de46cc724ea7Filip Pavlis
1977c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
1987c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
1997c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutStringWithDataStoreOnPref() {
2007c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
2017c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
2027c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putStringTestCommon();
2037c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
2047c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
2057c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
2067c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
2077c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutStringWithDataStoreOnMgr() {
2087c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
2097c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
2107c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putStringTestCommon();
2117c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
2127c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
2137c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private void putStringTestCommon() {
2147c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.putString(TEST_STR);
2157c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
216963facb8fce35022f296c38fadafd9a959ab1655Aurimas Liutikas        verify(mDataStore, atLeast(0)).getString(eq(KEY), nullable(String.class));
2177c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).putString(eq(KEY), anyString());
2187c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verifyNoMoreInteractions(mDataStore);
2197c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
2207c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        // Test that the value was NOT propagated to SharedPreferences.
2217c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertNull(mSharedPref.getString(KEY, null));
2227c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
2237c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
2247c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
2257c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
2267c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetStringWithDataStoreOnPref() {
2277c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
2287c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
229e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
2307c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getString(TEST_STR);
231e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
2327c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getString(eq(KEY), eq(TEST_STR));
2337c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
2347c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
2357c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
2367c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
2377c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetStringWithDataStoreOnMgr() {
2387c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
2397c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
240e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
2417c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getString(TEST_STR);
242e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
2437c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getString(eq(KEY), eq(TEST_STR));
2447c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
2457c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
2467c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    /**
2477c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * This test makes sure that when a default value is set to a preference that has a data store
2487c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * assigned that the default value is correctly propagated to
2497c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * {@link Preference#onSetInitialValue(boolean, Object)} instead of passing a value from
2507c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * {@link android.content.SharedPreferences}. We have this test only for String because the
2517c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * implementation is not dependent on value type so this coverage should be fine.
2527c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     */
2537c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
2547c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
2557c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testDefaultStringValue() {
2567c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
2577c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setDefaultValue(TEST_DEFAULT_STR);
2587c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mSharedPref.edit().putString(KEY, TEST_WRONG_STR).commit();
2597c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
2607c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mSharedPref.edit().remove(KEY).commit();
261e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertEquals(TEST_DEFAULT_STR, mPreference.getDefaultValue());
262e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
263e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
264e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
265e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @UiThreadTest
266e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testPutStringSetWithDataStoreOnPref() {
267e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
268e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mScreen.addPreference(mPreference);
269e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        putStringSetTestCommon();
270e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
271e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
272e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
273e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @UiThreadTest
274e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testPutStringSetWithDataStoreOnMgr() {
275e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
276e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mScreen.addPreference(mPreference);
277e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        putStringSetTestCommon();
278e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
279e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
280e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    private void putStringSetTestCommon() {
28183222b0ed2926aee15e5abdda3319089a8cc52baAurimas Liutikas        Set<String> testSet = Collections.singleton(TEST_STR);
282e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
283e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.putStringSet(testSet);
284e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
285e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verify(mDataStore, atLeast(0)).getStringSet(eq(KEY), or(isNull(Set.class), any(Set.class)));
286e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verify(mDataStore, atLeastOnce()).putStringSet(eq(KEY),
287e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis                or(isNull(Set.class), any(Set.class)));
288e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verifyNoMoreInteractions(mDataStore);
289e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
290e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        // Test that the value was NOT propagated to SharedPreferences.
291e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        assertNull(mSharedPref.getStringSet(KEY, null));
292e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
293e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
294e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
295e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @UiThreadTest
296e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testGetStringSetWithDataStoreOnPref() {
297e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
298e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mScreen.addPreference(mPreference);
299e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        Set<String> testSet = new HashSet<>();
300e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
301e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.getStringSet(testSet);
302e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
303e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verify(mDataStore, atLeastOnce()).getStringSet(eq(KEY), eq(testSet));
304e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    }
305e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
306e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @Test
307e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    @UiThreadTest
308e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis    public void testGetStringSetWithDataStoreOnMgr() {
309e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
310e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mScreen.addPreference(mPreference);
311e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        Set<String> testSet = new HashSet<>();
312e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
313e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.getStringSet(testSet);
314e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
315e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verify(mDataStore, atLeastOnce()).getStringSet(eq(KEY), eq(testSet));
3167c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3177c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3187c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
3197c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
3207c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutIntWithDataStoreOnPref() {
3217c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
3227c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
3237c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putIntTestCommon();
3247c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3257c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3267c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
3277c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
3287c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutIntWithDataStoreOnMgr() {
3297c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
3307c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
3317c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putIntTestCommon();
3327c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3337c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3347c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private void putIntTestCommon() {
3357c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.putInt(1);
3367c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3377c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeast(0)).getInt(eq(KEY), anyInt());
3387c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).putInt(eq(KEY), anyInt());
3397c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verifyNoMoreInteractions(mDataStore);
3407c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3417c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        // Test that the value was NOT propagated to SharedPreferences.
3427c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertEquals(-1, mSharedPref.getInt(KEY, -1));
3437c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3447c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3457c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
3467c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
3477c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetIntWithDataStoreOnPref() {
3487c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
3497c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
350e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
3517c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getInt(1);
352e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
3537c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getInt(eq(KEY), eq(1));
3547c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3557c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3567c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
3577c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
3587c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetIntWithDataStoreOnMgr() {
3597c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
3607c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
361e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
3627c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getInt(1);
363e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
3647c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getInt(eq(KEY), eq(1));
3657c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3667c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3677c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
3687c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
3697c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutLongWithDataStoreOnPref() {
3707c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
3717c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
3727c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putLongTestCommon();
3737c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3747c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3757c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
3767c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
3777c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutLongWithDataStoreOnMgr() {
3787c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
3797c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
3807c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putLongTestCommon();
3817c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3827c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3837c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private void putLongTestCommon() {
3847c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.putLong(1L);
3857c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3867c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeast(0)).getLong(eq(KEY), anyLong());
3877c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).putLong(eq(KEY), anyLong());
3887c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verifyNoMoreInteractions(mDataStore);
3897c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3907c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        // Test that the value was NOT propagated to SharedPreferences.
3917c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertEquals(-1, mSharedPref.getLong(KEY, -1L));
3927c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
3937c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
3947c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
3957c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
3967c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetLongWithDataStoreOnPref() {
3977c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
3987c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
399e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4007c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getLong(1L);
401e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4027c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getLong(eq(KEY), eq(1L));
4037c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4047c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4057c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4067c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4077c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetLongWithDataStoreOnMgr() {
4087c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
4097c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
410e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4117c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getLong(1L);
412e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4137c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getLong(eq(KEY), eq(1L));
4147c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4157c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4167c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4177c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4187c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutFloatWithDataStoreOnPref() {
4197c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
4207c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
4217c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putFloatTestCommon();
4227c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4237c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4247c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4257c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4267c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutFloatWithDataStoreOnMgr() {
4277c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
4287c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
4297c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putFloatTestCommon();
4307c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4317c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4327c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private void putFloatTestCommon() {
4337c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.putFloat(1f);
4347c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4357c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeast(0)).getFloat(eq(KEY), anyFloat());
4367c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).putFloat(eq(KEY), anyFloat());
4377c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verifyNoMoreInteractions(mDataStore);
4387c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4397c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        // Test that the value was NOT propagated to SharedPreferences.
4407c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertEquals(-1, mSharedPref.getFloat(KEY, -1f), 0.1f /* epsilon */);
4417c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4427c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4437c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4447c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4457c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetFloatWithDataStoreOnPref() {
4467c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
4477c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
448e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4497c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getFloat(1f);
450e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4517c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getFloat(eq(KEY), eq(1f));
4527c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4537c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4547c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4557c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4567c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetFloatWithDataStoreOnMgr() {
4577c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
4587c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
459e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4607c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getFloat(1f);
461e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4627c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getFloat(eq(KEY), eq(1f));
4637c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4647c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4657c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4667c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4677c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutBooleanWithDataStoreOnPref() {
4687c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
4697c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
4707c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putBooleanTestCommon();
4717c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4727c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4737c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4747c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4757c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testPutBooleanWithDataStoreOnMgr() {
4767c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
4777c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
4787c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        putBooleanTestCommon();
4797c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4807c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4817c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    private void putBooleanTestCommon() {
4827c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.putBoolean(true);
4837c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4847c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeast(0)).getBoolean(eq(KEY), anyBoolean());
4857c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).putBoolean(eq(KEY), anyBoolean());
4867c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verifyNoMoreInteractions(mDataStore);
4877c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4887c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        // Test that the value was NOT propagated to SharedPreferences.
4897c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertEquals(false, mSharedPref.getBoolean(KEY, false));
4907c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
4917c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
4927c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
4937c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
4947c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetBooleanWithDataStoreOnPref() {
4957c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
4967c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
497e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
4987c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.getBoolean(true);
499e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
5007c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        verify(mDataStore, atLeastOnce()).getBoolean(eq(KEY), eq(true));
5017c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
5027c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
5037c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
5047c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
5057c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testGetBooleanWithDataStoreOnMgr() {
5067c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
5077c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
5087c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
509e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        mPreference.getBoolean(true);
5107c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
511e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis        verify(mDataStore, atLeastOnce()).getBoolean(eq(KEY), eq(true));
5127c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
5137c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
5147c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    /**
5157c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * When {@link PreferenceDataStore} is NOT assigned, the getter for SharedPreferences must not
5167c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * return null for Preference.
5177c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     */
5187c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
5197c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
5207c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testSharedPrefNotNullIfNoDS() {
5217c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
522e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
5237c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertNotNull(mPreference.getSharedPreferences());
5247c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
5257c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
5267c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    /**
5277c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * When {@link PreferenceDataStore} is NOT assigned, the getter for SharedPreferences must not
5287c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * return null for PreferenceManager.
5297c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     */
5307c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
5317c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
5327c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testSharedPrefNotNullIfNoDSMgr() {
5337c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertNotNull(mManager.getSharedPreferences());
5347c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
5357c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
5367c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    /**
5377c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * When {@link PreferenceDataStore} is assigned, the getter for SharedPreferences has to return
5387c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * null for Preference.
5397c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     */
5407c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
5417c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
5427c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testSharedPrefNullIfWithDS() {
5437c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mScreen.addPreference(mPreference);
544e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
5457c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mPreference.setPreferenceDataStore(mDataStore);
546e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
5477c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertNull(mPreference.getSharedPreferences());
5487c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
5497c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
5507c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    /**
5517c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * When {@link PreferenceDataStore} is assigned, the getter for SharedPreferences has to return
5527c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     * null for PreferenceManager.
5537c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis     */
5547c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @Test
5557c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    @UiThreadTest
5567c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    public void testSharedPrefNullIfWithDSMgr() {
5577c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        mManager.setPreferenceDataStore(mDataStore);
558e936153a610c7ee933409fe4e1e9fdcc521d6e6fFilip Pavlis
5597c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis        assertNull(mManager.getSharedPreferences());
5607c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis    }
5617c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis
5627c67889a8c2d018fae37e30984873bcd984773cfFilip Pavlis}
563