Index: components/web_restrictions/browser/junit/src/org/chromium/components/webrestrictions/WebRestrictionsClientTest.java |
diff --git a/components/web_restrictions/browser/junit/src/org/chromium/components/webrestrictions/WebRestrictionsClientTest.java b/components/web_restrictions/browser/junit/src/org/chromium/components/webrestrictions/WebRestrictionsClientTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b4ad0a9aa5197d52aa5abf3c66f130e872b02938 |
--- /dev/null |
+++ b/components/web_restrictions/browser/junit/src/org/chromium/components/webrestrictions/WebRestrictionsClientTest.java |
@@ -0,0 +1,123 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.components.webrestrictions; |
+ |
+import static org.hamcrest.CoreMatchers.is; |
+import static org.hamcrest.CoreMatchers.nullValue; |
+import static org.junit.Assert.assertThat; |
+import static org.mockito.Matchers.any; |
+import static org.mockito.Matchers.anyLong; |
+import static org.mockito.Matchers.anyString; |
+import static org.mockito.Mockito.verify; |
+import static org.mockito.Mockito.when; |
+ |
+import android.content.ContentProvider; |
+import android.content.ContentResolver; |
+import android.content.ContentValues; |
+import android.database.Cursor; |
+import android.net.Uri; |
+ |
+import org.chromium.base.ContextUtils; |
+import org.chromium.testing.local.LocalRobolectricTestRunner; |
+import org.junit.Before; |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+import org.mockito.Mockito; |
+import org.robolectric.Robolectric; |
+import org.robolectric.annotation.Config; |
+import org.robolectric.shadows.ShadowContentResolver; |
+ |
+/** |
+ * Tests of WebRestrictionsClient. |
+ */ |
+@RunWith(LocalRobolectricTestRunner.class) |
+@Config(manifest = Config.NONE) |
+public class WebRestrictionsClientTest { |
+ private static final String TEST_CONTENT_PROVIDER = "example.com"; |
+ private WebRestrictionsClient mTestClient; |
+ ContentProvider mProvider; |
+ |
+ @Before |
+ public void setUp() { |
+ ContextUtils.initApplicationContextForJUnitTests(Robolectric.application); |
+ mTestClient = Mockito.spy(new WebRestrictionsClient()); |
+ Mockito.doNothing().when(mTestClient).nativeNotifyWebRestrictionsChanged(anyLong()); |
+ mProvider = Mockito.mock(ContentProvider.class); |
+ |
+ mTestClient.init(TEST_CONTENT_PROVIDER, 1234L); |
+ } |
+ |
+ @Test |
+ public void testSupportsRequest() { |
+ assertThat(mTestClient.supportsRequest(), is(false)); |
+ |
+ ShadowContentResolver.registerProvider(TEST_CONTENT_PROVIDER, mProvider); |
+ |
+ when(mProvider.getType(any(Uri.class))).thenReturn(null); |
+ assertThat(mTestClient.supportsRequest(), is(false)); |
+ |
+ when(mProvider.getType(any(Uri.class))).thenReturn("dummy"); |
+ assertThat(mTestClient.supportsRequest(), is(true)); |
+ } |
+ |
+ @Test |
+ public void testShouldProceed() { |
+ ShadowContentResolver.registerProvider(TEST_CONTENT_PROVIDER, mProvider); |
+ |
+ when(mProvider.query(any(Uri.class), any(String[].class), anyString(), any(String[].class), |
+ anyString())) |
+ .thenReturn(null); |
+ WebRestrictionsClient.ShouldProceedResult result = |
+ mTestClient.shouldProceed("http://example.com"); |
+ verify(mProvider).query(Uri.parse("content://" + TEST_CONTENT_PROVIDER + "/authorized"), |
+ null, "url = 'http://example.com'", null, null); |
+ assertThat(result.shouldProceed(), is(true)); |
+ assertThat(result.getErrorPage(), is(nullValue())); |
+ |
+ Cursor cursor = Mockito.mock(Cursor.class); |
+ when(cursor.getInt(0)).thenReturn(1); |
+ when(cursor.getString(1)).thenReturn("No error"); |
+ when(mProvider.query(any(Uri.class), any(String[].class), anyString(), any(String[].class), |
+ anyString())) |
+ .thenReturn(cursor); |
+ result = mTestClient.shouldProceed("http://example.com"); |
+ assertThat(result.shouldProceed(), is(true)); |
+ assertThat(result.getErrorPage(), is(nullValue())); |
+ |
+ when(cursor.getInt(0)).thenReturn(0); |
+ when(cursor.getString(1)).thenReturn("Error"); |
+ when(mProvider.query(any(Uri.class), any(String[].class), anyString(), any(String[].class), |
+ anyString())) |
+ .thenReturn(cursor); |
+ result = mTestClient.shouldProceed("http://example.com"); |
+ assertThat(result.shouldProceed(), is(false)); |
+ assertThat(result.getErrorPage(), is("Error")); |
+ } |
+ |
+ @Test |
+ public void testRequestPermission() { |
+ ShadowContentResolver.registerProvider(TEST_CONTENT_PROVIDER, mProvider); |
+ |
+ ContentValues expectedValues = new ContentValues(); |
+ expectedValues.put("url", "http://example.com"); |
+ when(mProvider.insert(any(Uri.class), any(ContentValues.class))).thenReturn(null); |
+ assertThat(mTestClient.requestPermission("http://example.com"), is(false)); |
+ verify(mProvider).insert( |
+ Uri.parse("content://" + TEST_CONTENT_PROVIDER + "/requested"), expectedValues); |
+ |
+ when(mProvider.insert(any(Uri.class), any(ContentValues.class))) |
+ .thenReturn(Uri.parse("content://example.com/xxx")); |
+ assertThat(mTestClient.requestPermission("http://example.com"), is(true)); |
+ } |
+ |
+ @Test |
+ public void testNotifyChange() { |
+ ShadowContentResolver.registerProvider(TEST_CONTENT_PROVIDER, mProvider); |
+ |
+ ContentResolver resolver = Robolectric.application.getContentResolver(); |
+ resolver.notifyChange(Uri.parse("content://" + TEST_CONTENT_PROVIDER), null); |
+ verify(mTestClient).nativeNotifyWebRestrictionsChanged(1234L); |
+ } |
+} |