Commit e4c904eb authored by Friedrich Horschig's avatar Friedrich Horschig Committed by Commit Bot

[Passwords TTF] Add integration tests

This CL adds a few integration tests. They stop at the bridge since the
execution of native code slows the tests down, introduces flakiness and
most-likely doesn't work on Kitkat.

Bug: 957532
Change-Id: I291c50ef7b8772198c89109bbe3acd885a43d054
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1845372
Commit-Queue: Friedrich [CET] <fhorschig@chromium.org>
Reviewed-by: default avatarJan Wilken Dörrie <jdoerrie@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703368}
parent 39bf5775
...@@ -60,7 +60,10 @@ junit_binary("touch_to_fill_junit_tests") { ...@@ -60,7 +60,10 @@ junit_binary("touch_to_fill_junit_tests") {
android_library("test_java") { android_library("test_java") {
testonly = true testonly = true
java_files = [ "javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java" ] java_files = [
"javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillIntegrationTest.java",
"javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java",
]
deps = [ deps = [
":public_java", ":public_java",
...@@ -73,6 +76,7 @@ android_library("test_java") { ...@@ -73,6 +76,7 @@ android_library("test_java") {
"//chrome/test/android:chrome_java_test_support", "//chrome/test/android:chrome_java_test_support",
"//content/public/test/android:content_java_test_support", "//content/public/test/android:content_java_test_support",
"//third_party/android_deps:com_android_support_recyclerview_v7_java", "//third_party/android_deps:com_android_support_recyclerview_v7_java",
"//third_party/espresso:espresso_all_java",
"//third_party/hamcrest:hamcrest_java", "//third_party/hamcrest:hamcrest_java",
"//third_party/junit", "//third_party/junit",
"//third_party/mockito:mockito_java", "//third_party/mockito:mockito_java",
......
// Copyright 2019 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.chrome.browser.touch_to_fill;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
import static org.chromium.content_public.browser.test.util.CriteriaHelper.pollUiThread;
import static org.chromium.content_public.browser.test.util.TestThreadUtils.runOnUiThreadBlocking;
import android.support.test.espresso.Espresso;
import android.support.test.filters.MediumTest;
import android.widget.ListView;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.base.test.util.ScalableTimeout;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.touch_to_fill.data.Credential;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.SheetState;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TouchCommon;
import java.util.Arrays;
/**
* Integration tests for the Touch To Fill component check that the calls to the Touch To Fill API
* end up rendering a View.
*/
@RunWith(ChromeJUnit4ClassRunner.class)
@RetryOnFailure
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public class TouchToFillIntegrationTest {
private static final String EXAMPLE_URL = "www.example.xyz";
private static final String MOBILE_URL = "m.example.xyz";
private static final Credential ANA = new Credential("Ana", "S3cr3t", EXAMPLE_URL, false);
private static final Credential BOB = new Credential("Bob", "*****", MOBILE_URL, true);
private final TouchToFillComponent mTouchToFill = new TouchToFillCoordinator();
@Mock
private TouchToFillComponent.Delegate mMockBridge;
@Rule
public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
public TouchToFillIntegrationTest() {
MockitoAnnotations.initMocks(this);
}
@Before
public void setUp() throws InterruptedException {
mActivityTestRule.startMainActivityOnBlankPage();
runOnUiThreadBlocking(() -> {
mTouchToFill.initialize(mActivityTestRule.getActivity(),
mActivityTestRule.getActivity().getBottomSheetController(), mMockBridge);
});
}
@Test
@MediumTest
public void testClickingSuggestionsTriggersCallback() {
runOnUiThreadBlocking(
() -> { mTouchToFill.showCredentials(EXAMPLE_URL, Arrays.asList(ANA, BOB)); });
pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
pollUiThread(() -> getCredentials().getChildAt(1) != null);
TouchCommon.singleClickView(getCredentials().getChildAt(1));
waitForEvent(mMockBridge).onCredentialSelected(BOB);
verify(mMockBridge, never()).onDismissed();
}
@Test
@MediumTest
public void testBackDismissesAndCallsCallback() {
runOnUiThreadBlocking(
() -> { mTouchToFill.showCredentials(EXAMPLE_URL, Arrays.asList(ANA, BOB)); });
pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
Espresso.pressBack();
waitForEvent(mMockBridge).onDismissed();
verify(mMockBridge, never()).onCredentialSelected(any());
}
private ListView getCredentials() {
return mActivityTestRule.getActivity().findViewById(R.id.credential_list);
}
public static <T> T waitForEvent(T mock) {
return verify(mock,
timeout(ScalableTimeout.scaleTimeout(CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL)));
}
private @SheetState int getBottomSheetState() {
pollUiThread(() -> mActivityTestRule.getActivity().getBottomSheet() != null);
return mActivityTestRule.getActivity().getBottomSheet().getSheetState();
}
}
\ No newline at end of file
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