From 72d0da9899800036be2af7a990fe0505f6e949bf Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Sun, 5 Jun 2016 02:20:29 +0900 Subject: [PATCH] Add a FakeSettingsProvider and use it in ConnectivityServiceTest. This class makes it easier to test code that uses Settings: 1. Real device or emulator settings don't affect the code under test; all settings always start off empty. 2. It's possible to change settings from the test without affecting system settings. 3. No changes are needed to the code under test. The changes to the tests are simple: just add a fake ContentResolver to whatever mock Context is already used by the test, and make that ContentResolver use the fake provider. Bug: 23113288 Change-Id: I5e7e5a87571444ae49ccf551705620675a36cd17 --- .../android/server/ConnectivityServiceTest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java index 4fae4a732a..00ba06988d 100644 --- a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.mock; import android.app.PendingIntent; import android.content.BroadcastReceiver; +import android.content.ContentResolver; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; @@ -61,12 +62,15 @@ import android.os.Messenger; import android.os.MessageQueue.IdleHandler; import android.os.Process; import android.os.SystemClock; +import android.provider.Settings; import android.test.AndroidTestCase; +import android.test.mock.MockContentResolver; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; import android.util.LogPrinter; +import com.android.internal.util.FakeSettingsProvider; import com.android.internal.util.WakeupMessage; import com.android.server.connectivity.NetworkAgentInfo; import com.android.server.connectivity.NetworkMonitor; @@ -118,8 +122,12 @@ public class ConnectivityServiceTest extends AndroidTestCase { } private class MockContext extends BroadcastInterceptingContext { + private final MockContentResolver mContentResolver; + MockContext(Context base) { super(base); + mContentResolver = new MockContentResolver(); + mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); } @Override @@ -135,10 +143,15 @@ public class ConnectivityServiceTest extends AndroidTestCase { } @Override - public Object getSystemService (String name) { + public Object getSystemService(String name) { if (name == Context.CONNECTIVITY_SERVICE) return mCm; return super.getSystemService(name); } + + @Override + public ContentResolver getContentResolver() { + return mContentResolver; + } } /**