| Index: chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
|
| similarity index 16%
|
| rename from chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
|
| rename to chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
|
| index 6e198514367aabc27a69adf542952eb522689ffc..f64216f030ba9845d45702eca92558125e0eb142 100644
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
|
| +++ b/chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
|
| @@ -4,118 +4,108 @@
|
|
|
| package org.chromium.chrome.browser.preferences.privacy;
|
|
|
| +import static org.mockito.Mockito.mock;
|
| +import static org.mockito.Mockito.when;
|
| +
|
| import android.content.Context;
|
| -import android.support.test.filters.SmallTest;
|
| -import android.test.InstrumentationTestCase;
|
| -import android.test.UiThreadTest;
|
| +import android.net.ConnectivityManager;
|
| +import android.net.NetworkInfo;
|
| +
|
| +import static org.junit.Assert.assertEquals;
|
| +
|
| +import org.junit.Test;
|
| +import org.junit.runner.RunWith;
|
| +import org.robolectric.RuntimeEnvironment;
|
| +import org.robolectric.annotation.Config;
|
|
|
| import org.chromium.base.CommandLine;
|
| import org.chromium.base.ContextUtils;
|
| -import org.chromium.base.test.util.AdvancedMockContext;
|
| -import org.chromium.base.test.util.Feature;
|
| +import org.chromium.testing.local.LocalRobolectricTestRunner;
|
|
|
| /**
|
| - * Tests "Usage and Crash reporting" preferences.
|
| + * junit tests for {@link PrivacyPreferencesManager}'s handling of "Usage and Crash reporting"
|
| + * preferences.
|
| */
|
| -public class PrivacyPreferencesManagerTest extends InstrumentationTestCase {
|
| -
|
| +@RunWith(LocalRobolectricTestRunner.class)
|
| +@Config(manifest = Config.NONE)
|
| +public class PrivacyPreferencesManagerTest {
|
| + // Parameters to simulate user- and network-permission state.
|
| private static final boolean CONNECTED = true;
|
| private static final boolean DISCONNECTED = false;
|
|
|
| - private static final boolean WIFI_ON = true;
|
| - private static final boolean WIFI_OFF = false;
|
| -
|
| - private static final boolean METRICS_UPLOAD_OK = true;
|
| - private static final boolean METRICS_UPLOAD_NOT_PERMITTED = false;
|
| + private static final boolean METERED = true;
|
| + private static final boolean UNMETERED = false;
|
|
|
| - private static final boolean CRASH_NETWORK_OK = true;
|
| - private static final boolean CRASH_NETWORK_NOT_PERMITTED = false;
|
| + private static final boolean METRICS_REPORTING_ENABLED = true;
|
| + private static final boolean METRICS_REPORTING_DISABLED = false;
|
|
|
| - private static final boolean METRIC_REPORTING_ENABLED = true;
|
| - private static final boolean METRIC_REPORTING_DISABLED = false;
|
| + // Used to set test expectations.
|
| + private static final boolean METRICS_UPLOAD_PERMITTED = true;
|
| + private static final boolean METRICS_UPLOAD_NOT_PERMITTED = false;
|
|
|
| - // Perform the same test a few times to make sure any sort of
|
| - // caching still works.
|
| - private static final int REPS = 3;
|
| + private static final boolean CRASH_NETWORK_AVAILABLE = true;
|
| + private static final boolean CRASH_NETWORK_UNAVAILABLE = false;
|
|
|
| - @SmallTest
|
| - @Feature({"Android-AppBase"})
|
| - @UiThreadTest
|
| - public void testAllowCrashDumpUploadNowCellDev() {
|
| + @Test
|
| + public void testUsageAndCrashReportingAccessors() {
|
| CommandLine.init(null);
|
| - runTest(CONNECTED, WIFI_ON, METRIC_REPORTING_ENABLED, METRICS_UPLOAD_OK, CRASH_NETWORK_OK);
|
| - runTest(CONNECTED, WIFI_OFF, METRIC_REPORTING_ENABLED, METRICS_UPLOAD_OK,
|
| - CRASH_NETWORK_NOT_PERMITTED);
|
| - runTest(DISCONNECTED, WIFI_OFF, METRIC_REPORTING_ENABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| - CRASH_NETWORK_NOT_PERMITTED);
|
| -
|
| - runTest(CONNECTED, WIFI_ON, METRIC_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| - CRASH_NETWORK_OK);
|
| - runTest(CONNECTED, WIFI_OFF, METRIC_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| - CRASH_NETWORK_NOT_PERMITTED);
|
| - runTest(DISCONNECTED, WIFI_OFF, METRIC_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| - CRASH_NETWORK_NOT_PERMITTED);
|
| +
|
| + // TODO(yolandyan): Use Junit4 parameters to clean up this test structure.
|
| + runTest(CONNECTED, UNMETERED, METRICS_REPORTING_ENABLED, METRICS_UPLOAD_PERMITTED,
|
| + CRASH_NETWORK_AVAILABLE);
|
| + runTest(CONNECTED, METERED, METRICS_REPORTING_ENABLED, METRICS_UPLOAD_PERMITTED,
|
| + CRASH_NETWORK_UNAVAILABLE);
|
| + runTest(DISCONNECTED, UNMETERED, METRICS_REPORTING_ENABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| + CRASH_NETWORK_UNAVAILABLE);
|
| +
|
| + runTest(CONNECTED, UNMETERED, METRICS_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| + CRASH_NETWORK_AVAILABLE);
|
| + runTest(CONNECTED, METERED, METRICS_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| + CRASH_NETWORK_UNAVAILABLE);
|
| + runTest(DISCONNECTED, UNMETERED, METRICS_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
|
| + CRASH_NETWORK_UNAVAILABLE);
|
| }
|
|
|
| - private void runTest(boolean isConnected, boolean wifiOn, boolean isMetricsReportingEnabled,
|
| + private void runTest(boolean isConnected, boolean isMetered, boolean isMetricsReportingEnabled,
|
| boolean expectedMetricsUploadPermitted,
|
| boolean expectedNetworkAvailableForCrashUploads) {
|
| - PermissionContext context = new PermissionContext(getInstrumentation().getTargetContext());
|
| - ContextUtils.initApplicationContextForTests(context.getApplicationContext());
|
| - PrivacyPreferencesManager preferenceManager = new MockPrivacyPreferencesManager(
|
| - context, isConnected, wifiOn, isMetricsReportingEnabled);
|
| -
|
| - for (int i = 0; i < REPS; i++) {
|
| - String state = String.format("[connected = %b, wifi = %b, reporting = %b]", isConnected,
|
| - wifiOn, isMetricsReportingEnabled);
|
| - String msg = String.format("Metrics reporting should be %1$b for %2$s",
|
| - expectedMetricsUploadPermitted, state);
|
| - assertEquals(msg, expectedMetricsUploadPermitted,
|
| - preferenceManager.isMetricsUploadPermitted());
|
| -
|
| - msg = String.format("Crash reporting should be %1$b for wifi %2$s",
|
| - expectedNetworkAvailableForCrashUploads, wifiOn);
|
| - assertEquals(msg, expectedNetworkAvailableForCrashUploads,
|
| - preferenceManager.isNetworkAvailableForCrashUploads());
|
| - }
|
| + // Mock out the network info accessors.
|
| + NetworkInfo networkInfo = mock(NetworkInfo.class);
|
| + when(networkInfo.isConnected()).thenReturn(isConnected);
|
| +
|
| + ConnectivityManager connectivityManager = mock(ConnectivityManager.class);
|
| + when(connectivityManager.getActiveNetworkInfo()).thenReturn(networkInfo);
|
| + when(connectivityManager.isActiveNetworkMetered()).thenReturn(isMetered);
|
| +
|
| + Context context = mock(Context.class);
|
| + when(context.getSystemService(Context.CONNECTIVITY_SERVICE))
|
| + .thenReturn(connectivityManager);
|
| +
|
| + // Perform other setup.
|
| + ContextUtils.initApplicationContextForTests(RuntimeEnvironment.application);
|
| + PrivacyPreferencesManager preferenceManager = new TestPrivacyPreferencesManager(context);
|
| + preferenceManager.setUsageAndCrashReporting(isMetricsReportingEnabled);
|
| +
|
| + // Test the usage and crash reporting permission accessors!
|
| + String state = String.format("[connected = %b, metered = %b, reporting = %b]", isConnected,
|
| + isMetered, isMetricsReportingEnabled);
|
| + String msg = String.format(
|
| + "Metrics reporting should be %1$b for %2$s", expectedMetricsUploadPermitted, state);
|
| + assertEquals(
|
| + msg, expectedMetricsUploadPermitted, preferenceManager.isMetricsUploadPermitted());
|
| +
|
| + msg = String.format("Crash reporting should be %1$b for metered state %2$s",
|
| + expectedNetworkAvailableForCrashUploads, isMetered);
|
| + assertEquals(msg, expectedNetworkAvailableForCrashUploads,
|
| + preferenceManager.isNetworkAvailableForCrashUploads());
|
| }
|
|
|
| - private static class MockPrivacyPreferencesManager extends PrivacyPreferencesManager {
|
| - private final boolean mIsConnected;
|
| - private final boolean mIsWifi;
|
| -
|
| - MockPrivacyPreferencesManager(Context context, boolean isConnected, boolean isWifi,
|
| - boolean isMetricsReportingEnabled) {
|
| + private static class TestPrivacyPreferencesManager extends PrivacyPreferencesManager {
|
| + TestPrivacyPreferencesManager(Context context) {
|
| super(context);
|
| - mIsConnected = isConnected;
|
| - mIsWifi = isWifi;
|
| -
|
| - setUsageAndCrashReporting(isMetricsReportingEnabled);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isNetworkAvailable() {
|
| - return mIsConnected;
|
| }
|
|
|
| - @Override
|
| - public boolean isWiFiOrEthernetNetwork() {
|
| - return mIsWifi;
|
| - }
|
| - }
|
| -
|
| - private static class PermissionContext extends AdvancedMockContext {
|
| - public PermissionContext(Context targetContext) {
|
| - super(targetContext);
|
| - }
|
| -
|
| - @Override
|
| - public Object getSystemService(String name) {
|
| - if (Context.CONNECTIVITY_SERVICE.equals(name)) {
|
| - return null;
|
| - }
|
| - fail("Should not ask for any other service than the ConnectionManager.");
|
| - return super.getSystemService(name);
|
| - }
|
| + // Stub out this call, as it could otherwise call into native code.
|
| + public void syncUsageAndCrashReportingPrefs() {}
|
| }
|
| }
|
|
|