TestableSettingsProviderTest.java revision f06a317039a6502252c2b4b1a878520d166a38c6
1f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk/*
2f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk * Copyright (C) 2017 The Android Open Source Project
3f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk *
4f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk * except in compliance with the License. You may obtain a copy of the License at
6f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk *
7f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
8f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk *
9f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the
10f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk * KIND, either express or implied. See the License for the specific language governing
12f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk * permissions and limitations under the License.
13f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk */
14f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
15f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkpackage android.testing;
16f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
17f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport android.content.ContentResolver;
18f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport android.provider.Settings;
19f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport android.provider.Settings.Global;
20f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport android.provider.Settings.Secure;
21f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport android.support.test.InstrumentationRegistry;
22f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport android.support.test.runner.AndroidJUnit4;
23f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport org.junit.Before;
24f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport org.junit.Rule;
25f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport org.junit.Test;
26f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport org.junit.runner.RunWith;
27f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
28f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkimport static org.junit.Assert.*;
29f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
30f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk@RunWith(AndroidJUnit4.class)
31f06a317039a6502252c2b4b1a878520d166a38c6Jason Monkpublic class TestableSettingsProviderTest {
32f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
33f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public static final String NONEXISTENT_SETTING = "nonexistent_setting";
34f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    private static final String TAG = "TestableSettingsProviderTest";
35f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    private ContentResolver mContentResolver;
36f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Rule
37f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public final TestableContext mContext =
38f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk            new TestableContext(InstrumentationRegistry.getContext());
39f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
40f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Before
41f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public void setup() {
42f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        mContentResolver = mContext.getContentResolver();
43f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        Settings.Secure.putString(mContentResolver, NONEXISTENT_SETTING, null);
44f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        Settings.Global.putString(mContentResolver, NONEXISTENT_SETTING, "initial value");
45f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        Settings.Global.putString(mContentResolver, Global.DEVICE_PROVISIONED, null);
46f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    }
47f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
48f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Test
49f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public void testInitialValueSecure() {
50f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        String value = Secure.getString(mContentResolver, NONEXISTENT_SETTING);
51f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertNull(value);
52f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    }
53f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
54f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Test
55f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public void testInitialValueGlobal() {
56f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        String value = Global.getString(mContentResolver, NONEXISTENT_SETTING);
57f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertEquals("initial value", value);
58f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    }
59f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
60f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Test
61f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public void testSeparateTables() {
62f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        Secure.putString(mContentResolver, NONEXISTENT_SETTING, "something");
63f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        Global.putString(mContentResolver, NONEXISTENT_SETTING, "else");
64f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertEquals("something", Secure.getString(mContentResolver, NONEXISTENT_SETTING));
65f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertEquals("else", Global.getString(mContentResolver, NONEXISTENT_SETTING));
66f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    }
67f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
68f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Test
69f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public void testPassThrough() {
70f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        // Grab the value of a setting that is not overridden.
71f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertTrue(Secure.getInt(mContentResolver, Secure.USER_SETUP_COMPLETE, 0) != 0);
72f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    }
73f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
74f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Test
75f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public void testOverrideExisting() {
76f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        // Grab the value of a setting that is overridden and will be different than the actual
77f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        // value.
78f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertNull(Global.getString(mContentResolver, Global.DEVICE_PROVISIONED));
79f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    }
80f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk
81f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    @Test
82f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    public void testRelease() {
83f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        // Verify different value.
84f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertNull(Global.getString(mContentResolver, Global.DEVICE_PROVISIONED));
85f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        mContext.getSettingsProvider().clearValuesAndCheck(mContext);
86f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        // Verify actual value after release.
87f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk        assertEquals("1", Global.getString(mContentResolver, Global.DEVICE_PROVISIONED));
88f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk    }
89f06a317039a6502252c2b4b1a878520d166a38c6Jason Monk}
90