diff options
author | Lais Andrade <lsandrade@google.com> | 2020-11-30 11:40:28 +0800 |
---|---|---|
committer | raylinhsu <raylinhsu@google.com> | 2020-12-01 19:30:17 +0800 |
commit | f9d9f7796b6e159c824246687c05cc97fc8b4a24 (patch) | |
tree | 2b6e945396a1337e1224abe620699f300e4158f6 /tests | |
parent | 62fd1c3ab2f18e55adb68d4f2dbae1337e4e916d (diff) |
Add FakeSettingsProviderRule class
Bug: 166581675
Change-Id: Idf081e662aa218e93a38cd3262a1357e2e3faf0d
Merged-In: Idf081e662aa218e93a38cd3262a1357e2e3faf0d
Diffstat (limited to 'tests')
-rw-r--r-- | tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProvider.java | 8 | ||||
-rw-r--r-- | tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProviderRule.java | 76 |
2 files changed, 84 insertions, 0 deletions
diff --git a/tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProvider.java b/tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProvider.java index e482708e385b..a0a5a293f2e4 100644 --- a/tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProvider.java +++ b/tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProvider.java @@ -92,6 +92,14 @@ public class FakeSettingsProvider extends MockContentProvider { } /** + * Creates a {@link org.junit.rules.TestRule} that makes sure {@link #clearSettingsProvider()} + * is triggered before and after each test. + */ + public static FakeSettingsProviderRule rule() { + return new FakeSettingsProviderRule(); + } + + /** * This needs to be called before and after using the FakeSettingsProvider class. */ public static void clearSettingsProvider() { diff --git a/tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProviderRule.java b/tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProviderRule.java new file mode 100644 index 000000000000..c4e9545dfde2 --- /dev/null +++ b/tests/utils/testutils/java/com/android/internal/util/test/FakeSettingsProviderRule.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util.test; + +import android.content.Context; +import android.provider.Settings; +import android.test.mock.MockContentResolver; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +/** + * JUnit Rule helps keeping test {@link FakeSettingsProvider} clean. + * + * <p>It clears {@link FakeSettingsProvider} before and after each test. Example use: + * <pre class="code"><code class="java"> + * public class ExampleTest { + * + * @Rule public FakeSettingsProviderRule rule = FakeSettingsProvider.rule(); + * + * @Test + * public void shouldDoSomething() { + * ContextResolver cr = rule.mockContentResolver(mContext); + * Settings.Global.putInt(cr, "my_setting_name", 1); + * // Test code relying on my_setting_name value using cr + * } + * } + * </code></pre> + * + * @see FakeSettingsProvider + */ +public final class FakeSettingsProviderRule implements TestRule { + + /** Prevent initialization outside {@link FakeSettingsProvider}. */ + FakeSettingsProviderRule() { + } + + /** + * Creates a {@link MockContentResolver} that uses the {@link FakeSettingsProvider} as the + * {@link Settings#AUTHORITY} provider. + */ + public MockContentResolver mockContentResolver(Context context) { + MockContentResolver contentResolver = new MockContentResolver(context); + contentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); + return contentResolver; + } + + @Override + public Statement apply(Statement base, Description description) { + return new Statement() { + public void evaluate() throws Throwable { + FakeSettingsProvider.clearSettingsProvider(); + try { + base.evaluate(); + } finally { + FakeSettingsProvider.clearSettingsProvider(); + } + } + }; + } +} |