Commit 7e85f39a authored by Tao Bai's avatar Tao Bai Committed by Commit Bot

Add junit test for AutofillProviderImpl

Bug: 1064420
Change-Id: I5b02d5f7f8352285b0927f516c9cb8563915a7a1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2147846Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarChangwan Ryu <changwan@chromium.org>
Commit-Queue: Tao Bai <michaelbai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760583}
parent d956043b
......@@ -735,6 +735,7 @@ if (!is_ios && !is_fuchsia) {
if (is_android) {
junit_binary("components_junit_tests") {
deps = [
"//components/autofill/android/junit:components_autofill_junit_tests",
"//components/background_task_scheduler:components_background_task_scheduler_junit_tests",
"//components/embedder_support/android:components_embedder_support_junit_tests",
"//components/gcm_driver/android:components_gcm_driver_junit_tests",
......
......@@ -237,7 +237,7 @@ public class AutofillProviderImpl extends AutofillProvider {
this(containerView, new AutofillManagerWrapper(context), context, providerName);
}
@VisibleForTesting
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public AutofillProviderImpl(ViewGroup containerView, AutofillManagerWrapper manager,
Context context, String providerName) {
mProviderName = providerName;
......@@ -494,7 +494,8 @@ public class AutofillProviderImpl extends AutofillProvider {
for (int i = 0; i < mRequest.getFieldCount(); ++i) notifyVirtualValueChanged(i);
}
private Rect transformToWindowBounds(RectF rect) {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public Rect transformToWindowBounds(RectF rect) {
// Convert bounds to device pixel.
WindowAndroid windowAndroid = mWebContents.getTopLevelNativeWindow();
DisplayAndroid displayAndroid = windowAndroid.getDisplay();
......@@ -516,7 +517,8 @@ public class AutofillProviderImpl extends AutofillProvider {
*
* @param formData the form need to be transformed.
*/
private void transformFormFieldToContainViewCoordinates(FormData formData) {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public void transformFormFieldToContainViewCoordinates(FormData formData) {
WindowAndroid windowAndroid = mWebContents.getTopLevelNativeWindow();
DisplayAndroid displayAndroid = windowAndroid.getDisplay();
float dipScale = displayAndroid.getDipScale();
......
......@@ -4,6 +4,8 @@
package org.chromium.components.autofill;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
......@@ -36,7 +38,8 @@ public class FormData {
return fields;
}
private FormData(String name, String host, ArrayList<FormFieldData> fields) {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public FormData(String name, String host, ArrayList<FormFieldData> fields) {
mName = name;
mHost = host;
mFields = fields;
......
......@@ -7,6 +7,7 @@ package org.chromium.components.autofill;
import android.graphics.RectF;
import androidx.annotation.IntDef;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
......@@ -136,7 +137,8 @@ public class FormFieldData {
}
@CalledByNative
private static FormFieldData createFormFieldData(String name, String label, String value,
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public static FormFieldData createFormFieldData(String name, String label, String value,
String autocompleteAttr, boolean shouldAutocomplete, String placeholder, String type,
String id, String[] optionValues, String[] optionContents, boolean isCheckField,
boolean isChecked, int maxLength, String heuristicType, float left, float top,
......
# 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.
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
java_library("components_autofill_junit_tests") {
# Platform checks are broken for Robolectric. See https://crbug.com/1071638.
bypass_platform_checks = true
testonly = true
sources =
[ "src/org/chromium/components/autofill/AutofillProviderImplTest.java" ]
deps = [
"//base:base_java_test_support",
"//base:base_junit_test_support",
"//components/autofill/android:provider_java",
"//content/public/android:content_java",
"//ui/android:ui_java",
]
}
// 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.
package org.chromium.components.autofill;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.ViewGroup;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.robolectric.annotation.Config;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.display.DisplayAndroid;
import java.util.ArrayList;
/**
* The unit tests for AutofillProviderImpl.
*/
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class AutofillProviderImplTest {
private static final float EXPECTED_DIP_SCALE = 2;
private static final int SCROLL_X = 15;
private static final int SCROLL_Y = 155;
private static final int LOCATION_X = 25;
private static final int LOCATION_Y = 255;
private Context mContext;
private WindowAndroid mWindowAndroid;
private WebContents mWebContents;
private ViewGroup mContainerView;
private AutofillProviderImpl mAutofillProvider;
private DisplayAndroid mDisplayAndroid;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = Mockito.mock(Context.class);
mWindowAndroid = Mockito.mock(WindowAndroid.class);
mDisplayAndroid = Mockito.mock(DisplayAndroid.class);
mWebContents = Mockito.mock(WebContents.class);
mContainerView = Mockito.mock(ViewGroup.class);
mAutofillProvider =
new AutofillProviderImpl(mContext, mContainerView, "AutofillProviderImplTest");
mAutofillProvider.setWebContents(mWebContents);
when(mWebContents.getTopLevelNativeWindow()).thenReturn(mWindowAndroid);
when(mWindowAndroid.getDisplay()).thenReturn(mDisplayAndroid);
when(mDisplayAndroid.getDipScale()).thenReturn(EXPECTED_DIP_SCALE);
when(mContainerView.getScrollX()).thenReturn(SCROLL_X);
when(mContainerView.getScrollY()).thenReturn(SCROLL_Y);
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
int[] location = (int[]) args[0];
location[0] = LOCATION_X;
location[1] = LOCATION_Y;
return null;
}
})
.when(mContainerView)
.getLocationOnScreen(ArgumentMatchers.any());
}
@Test
public void testTransformFormFieldToContainViewCoordinates() {
ArrayList<FormFieldData> fields = new ArrayList<FormFieldData>(1);
fields.add(FormFieldData.createFormFieldData(null, null, null, null, false, null, null,
null, null, null, false, false, 0, null, 10 /* left */, 20 /* top */,
300 /* right */, 60 /*bottom*/));
fields.add(FormFieldData.createFormFieldData(null, null, null, null, false, null, null,
null, null, null, false, false, 0, null, 20 /* left */, 100 /* top */,
400 /* right */, 200 /*bottom*/));
FormData formData = new FormData(null, null, fields);
mAutofillProvider.transformFormFieldToContainViewCoordinates(formData);
RectF result = formData.mFields.get(0).getBoundsInContainerViewCoordinates();
assertEquals(10 * EXPECTED_DIP_SCALE + SCROLL_X, result.left, 0);
assertEquals(20 * EXPECTED_DIP_SCALE + SCROLL_Y, result.top, 0);
assertEquals(300 * EXPECTED_DIP_SCALE + SCROLL_X, result.right, 0);
assertEquals(60 * EXPECTED_DIP_SCALE + SCROLL_Y, result.bottom, 0);
result = formData.mFields.get(1).getBoundsInContainerViewCoordinates();
assertEquals(20 * EXPECTED_DIP_SCALE + SCROLL_X, result.left, 0);
assertEquals(100 * EXPECTED_DIP_SCALE + SCROLL_Y, result.top, 0);
assertEquals(400 * EXPECTED_DIP_SCALE + SCROLL_X, result.right, 0);
assertEquals(200 * EXPECTED_DIP_SCALE + SCROLL_Y, result.bottom, 0);
}
@Test
public void testTransformToWindowBounds() {
RectF source = new RectF(10, 20, 300, 400);
Rect result = mAutofillProvider.transformToWindowBounds(source);
assertEquals(10 * EXPECTED_DIP_SCALE + LOCATION_X, result.left, 0);
assertEquals(20 * EXPECTED_DIP_SCALE + LOCATION_Y, result.top, 0);
assertEquals(300 * EXPECTED_DIP_SCALE + LOCATION_X, result.right, 0);
assertEquals(400 * EXPECTED_DIP_SCALE + LOCATION_Y, result.bottom, 0);
}
}
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