Commit 5583f942 authored by Michael Thiessen's avatar Michael Thiessen Committed by Commit Bot

Move ToolbarSecurityIconTest to unit_tests

In order to migrate java.net.URI to GURL the junit tests that rely on
java.net.URI need to be moved to a test apk that supports the native
library.

This change moves the ToolbarSecurityIconTestunittests from junit to
unit_tests (Android only). These tests should be just as fast as they
were as junit tests (and much faster than chrome_test_apk unit tests).

Bug: 783819
Change-Id: I9e397ff1260cce9fca375af212dbac9e360e31f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1997640
Commit-Queue: Michael Thiessen <mthiesse@chromium.org>
Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarEric Stevenson <estevenson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#732491}
parent dfdace44
This diff is collapsed.
...@@ -2846,6 +2846,7 @@ android_library("native_java_unittests_java") { ...@@ -2846,6 +2846,7 @@ android_library("native_java_unittests_java") {
":chrome_test_util_java", ":chrome_test_util_java",
"//base:base_java", "//base:base_java",
"//base:base_java_test_support", "//base:base_java_test_support",
"//base:jni_java",
"//base/test:test_support_java", "//base/test:test_support_java",
"//chrome/android:chrome_java", "//chrome/android:chrome_java",
"//chrome/browser/util:java", "//chrome/browser/util:java",
...@@ -2871,6 +2872,7 @@ android_library("native_java_unittests_java") { ...@@ -2871,6 +2872,7 @@ android_library("native_java_unittests_java") {
"native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java", "native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java",
"native_java_unittests/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java", "native_java_unittests/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java",
"native_java_unittests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreUnitTest.java", "native_java_unittests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreUnitTest.java",
"native_java_unittests/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java",
] ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
...@@ -2888,5 +2890,6 @@ generate_jni("native_j_unittests_jni_headers") { ...@@ -2888,5 +2890,6 @@ generate_jni("native_j_unittests_jni_headers") {
"native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java", "native_java_unittests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java",
"native_java_unittests/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java", "native_java_unittests/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java",
"native_java_unittests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreUnitTest.java", "native_java_unittests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreUnitTest.java",
"native_java_unittests/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java",
] ]
} }
...@@ -203,7 +203,6 @@ chrome_junit_test_java_sources = [ ...@@ -203,7 +203,6 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/tabstate/TabStateUnitTest.java", "junit/src/org/chromium/chrome/browser/tabstate/TabStateUnitTest.java",
"junit/src/org/chromium/chrome/browser/tasks/EngagementTimeUtilTest.java", "junit/src/org/chromium/chrome/browser/tasks/EngagementTimeUtilTest.java",
"junit/src/org/chromium/chrome/browser/tasks/JourneyManagerTest.java", "junit/src/org/chromium/chrome/browser/tasks/JourneyManagerTest.java",
"junit/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java",
"junit/src/org/chromium/chrome/browser/usage_stats/EventTrackerTest.java", "junit/src/org/chromium/chrome/browser/usage_stats/EventTrackerTest.java",
"junit/src/org/chromium/chrome/browser/usage_stats/PageViewObserverTest.java", "junit/src/org/chromium/chrome/browser/usage_stats/PageViewObserverTest.java",
"junit/src/org/chromium/chrome/browser/util/BitmapCacheTest.java", "junit/src/org/chromium/chrome/browser/util/BitmapCacheTest.java",
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.ssl; package org.chromium.chrome.browser.ssl;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.components.security_state.ConnectionSecurityLevel; import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
...@@ -39,7 +41,8 @@ public class SecurityStateModel { ...@@ -39,7 +41,8 @@ public class SecurityStateModel {
private SecurityStateModel() {} private SecurityStateModel() {}
@NativeMethods @NativeMethods
interface Natives { @VisibleForTesting
public interface Natives {
int getSecurityLevelForWebContents(WebContents webContents); int getSecurityLevelForWebContents(WebContents webContents);
boolean shouldShowDangerTriangleForWarningLevel(); boolean shouldShowDangerTriangleForWarningLevel();
} }
......
...@@ -4,38 +4,24 @@ ...@@ -4,38 +4,24 @@
package org.chromium.chrome.browser.toolbar; package org.chromium.chrome.browser.toolbar;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.Resetter;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.ContextUtils;
import org.chromium.base.test.util.JniMocker; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.CalledByNativeJavaTest;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.omnibox.LocationBarLayout; import org.chromium.chrome.browser.omnibox.LocationBarLayout;
import org.chromium.chrome.browser.ssl.SecurityStateModel; import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.ssl.SecurityStateModelJni;
import org.chromium.chrome.browser.tab.TabImpl; import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.components.security_state.ConnectionSecurityLevel; import org.chromium.components.security_state.ConnectionSecurityLevel;
/** /**
* Unit tests for {@link LocationBarLayout} class. * Unit tests for {@link LocationBarLayout} class.
*/ */
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE, shadows = {ToolbarSecurityIconTest.ShadowSecurityStateModel.class})
public final class ToolbarSecurityIconTest { public final class ToolbarSecurityIconTest {
private static final boolean IS_SMALL_DEVICE = true; private static final boolean IS_SMALL_DEVICE = true;
private static final boolean IS_OFFLINE_PAGE = true; private static final boolean IS_OFFLINE_PAGE = true;
...@@ -43,58 +29,31 @@ public final class ToolbarSecurityIconTest { ...@@ -43,58 +29,31 @@ public final class ToolbarSecurityIconTest {
private static final int[] SECURITY_LEVELS = new int[] {ConnectionSecurityLevel.NONE, private static final int[] SECURITY_LEVELS = new int[] {ConnectionSecurityLevel.NONE,
ConnectionSecurityLevel.WARNING, ConnectionSecurityLevel.DANGEROUS, ConnectionSecurityLevel.WARNING, ConnectionSecurityLevel.DANGEROUS,
ConnectionSecurityLevel.SECURE, ConnectionSecurityLevel.EV_SECURE}; ConnectionSecurityLevel.SECURE, ConnectionSecurityLevel.EV_SECURE};
private static final long NATIVE_PTR = 1;
@Rule
public JniMocker mocker = new JniMocker();
@Mock @Mock
private TabImpl mTab; private TabImpl mTab;
@Mock @Mock
private Context mContext; SecurityStateModel.Natives mSecurityStateMocks;
@Mock
private Resources mResources;
@Mock
LocationBarModel.Natives mNativeMocks;
private LocationBarModel mLocationBarModel; private LocationBarModel mLocationBarModel;
@Implements(SecurityStateModel.class) @CalledByNative
static class ShadowSecurityStateModel { private ToolbarSecurityIconTest() {}
private static boolean sShouldShowDangerTriangle;
@Resetter
public static void reset() {
sShouldShowDangerTriangle = false;
}
@Implementation
public static boolean shouldShowDangerTriangleForWarningLevel() {
return sShouldShowDangerTriangle;
}
public static void setShouldShowDangerTriangleForWarningLevel(
boolean shouldShowDangerTriangleValue) {
sShouldShowDangerTriangle = shouldShowDangerTriangleValue;
}
}
@Before @CalledByNative
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mocker.mock(LocationBarModelJni.TEST_HOOKS, mNativeMocks); SecurityStateModelJni.TEST_HOOKS.setInstanceForTesting(mSecurityStateMocks);
doReturn(mResources).when(mContext).getResources(); mLocationBarModel = new LocationBarModel(ContextUtils.getApplicationContext());
when(mNativeMocks.init(any())).thenReturn(NATIVE_PTR);
mLocationBarModel = new LocationBarModel(mContext);
mLocationBarModel.initializeWithNative(); mLocationBarModel.initializeWithNative();
} }
@After @CalledByNative
public void tearDown() { public void tearDown() {
ShadowSecurityStateModel.reset(); SecurityStateModelJni.TEST_HOOKS.setInstanceForTesting(null);
} }
@Test @CalledByNativeJavaTest
public void testGetSecurityLevel() { public void testGetSecurityLevel() {
assertEquals(ConnectionSecurityLevel.NONE, assertEquals(ConnectionSecurityLevel.NONE,
LocationBarModel.getSecurityLevel(null, !IS_OFFLINE_PAGE, null)); LocationBarModel.getSecurityLevel(null, !IS_OFFLINE_PAGE, null));
...@@ -123,8 +82,9 @@ public final class ToolbarSecurityIconTest { ...@@ -123,8 +82,9 @@ public final class ToolbarSecurityIconTest {
LocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, null)); LocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, null));
} }
@Test @CalledByNativeJavaTest
public void testGetSecurityIconResource() { public void testGetSecurityIconResource() {
when(mSecurityStateMocks.shouldShowDangerTriangleForWarningLevel()).thenReturn(false);
for (int securityLevel : SECURITY_LEVELS) { for (int securityLevel : SECURITY_LEVELS) {
assertEquals("Wrong phone resource for security level " + securityLevel, assertEquals("Wrong phone resource for security level " + securityLevel,
R.drawable.ic_offline_pin_24dp, R.drawable.ic_offline_pin_24dp,
...@@ -189,8 +149,9 @@ public final class ToolbarSecurityIconTest { ...@@ -189,8 +149,9 @@ public final class ToolbarSecurityIconTest {
!IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW)); !IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW));
} }
@Test @CalledByNativeJavaTest
public void testGetSecurityIconResourceForMarkHttpAsDangerWarning() { public void testGetSecurityIconResourceForMarkHttpAsDangerWarning() {
when(mSecurityStateMocks.shouldShowDangerTriangleForWarningLevel()).thenReturn(false);
assertEquals(0, assertEquals(0,
mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.NONE, mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.NONE,
IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW)); IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW));
...@@ -198,7 +159,7 @@ public final class ToolbarSecurityIconTest { ...@@ -198,7 +159,7 @@ public final class ToolbarSecurityIconTest {
mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.NONE, mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.NONE,
!IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW)); !IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW));
ShadowSecurityStateModel.setShouldShowDangerTriangleForWarningLevel(true); when(mSecurityStateMocks.shouldShowDangerTriangleForWarningLevel()).thenReturn(true);
assertEquals(R.drawable.omnibox_not_secure_warning, assertEquals(R.drawable.omnibox_not_secure_warning,
mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.WARNING, mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.WARNING,
IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW)); IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW));
......
// Copyright 2020 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.
#include "base/android/jni_android.h"
#include "chrome/android/native_j_unittests_jni_headers/ToolbarSecurityIconTest_jni.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::android::AttachCurrentThread;
class ToolbarSecurityIconTest : public ::testing::Test {
public:
ToolbarSecurityIconTest()
: j_test_(
Java_ToolbarSecurityIconTest_Constructor(AttachCurrentThread())) {}
void SetUp() override {
Java_ToolbarSecurityIconTest_setUp(AttachCurrentThread(), j_test_);
}
void TearDown() override {
Java_ToolbarSecurityIconTest_tearDown(AttachCurrentThread(), j_test_);
}
const base::android::ScopedJavaGlobalRef<jobject>& j_test() {
return j_test_;
}
private:
base::android::ScopedJavaGlobalRef<jobject> j_test_;
};
JAVA_TESTS(ToolbarSecurityIconTest, j_test())
...@@ -3759,6 +3759,7 @@ test("unit_tests") { ...@@ -3759,6 +3759,7 @@ test("unit_tests") {
"../browser/permissions/permission_request_notification_android_unittest.cc", "../browser/permissions/permission_request_notification_android_unittest.cc",
"../browser/permissions/permission_request_notification_handler_unittest.cc", "../browser/permissions/permission_request_notification_handler_unittest.cc",
"../browser/tabmodel/tab_persistent_store_unittest.cc", "../browser/tabmodel/tab_persistent_store_unittest.cc",
"../browser/toolbar/toolbar_security_icon_unittest.cc",
"../browser/touch_to_fill/touch_to_fill_controller_unittest.cc", "../browser/touch_to_fill/touch_to_fill_controller_unittest.cc",
"../browser/translate/translate_manager_render_view_host_android_unittest.cc", "../browser/translate/translate_manager_render_view_host_android_unittest.cc",
"../browser/updates/update_notification_config_unittest.cc", "../browser/updates/update_notification_config_unittest.cc",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment