blob: 7ae754c0dd802e56a0f67d62334cf31013655490 [file] [log] [blame]
// Copyright 2012 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.content.browser;
import android.net.Uri;
import org.chromium.base.test.util.UrlUtils;
import org.chromium.content.browser.test.util.DOMUtils;
import org.chromium.content.browser.test.util.TestCallbackHelperContainer;
import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnStartContentIntentHelper;
import org.chromium.content_shell_apk.ContentShellTestBase;
import java.util.concurrent.TimeUnit;
/**
* Base class for content detection test suites.
*/
public class ContentDetectionTestBase extends ContentShellTestBase {
private static final int WAIT_TIMEOUT_SECONDS = 10;
private TestCallbackHelperContainer mCallbackHelper;
/**
* Returns the TestCallbackHelperContainer associated with this ContentView,
* or creates it lazily.
*/
protected TestCallbackHelperContainer getTestCallbackHelperContainer() {
if (mCallbackHelper == null) {
mCallbackHelper = new TestCallbackHelperContainer(getContentView());
}
return mCallbackHelper;
}
/**
* Encodes the provided content string into an escaped url as intents do.
* @param content Content to escape into a url.
* @return Escaped url.
*/
protected String urlForContent(String content) {
return Uri.encode(content).replaceAll("%20", "+");
}
/**
* Checks if the provided test url is the current url in the content view.
* @param testUrl Test url to check.
* @return true if the test url is the current one, false otherwise.
*/
protected boolean isCurrentTestUrl(String testUrl) {
return UrlUtils.getTestFileUrl(testUrl).equals(getContentView().getUrl());
}
/**
* Scrolls to the node with the provided id, taps on it and waits for an intent to come.
* @param id Id of the node to scroll and tap.
* @return The content url of the received intent or null if none.
*/
protected String scrollAndTapExpectingIntent(String id) throws Throwable {
TestCallbackHelperContainer callbackHelperContainer = getTestCallbackHelperContainer();
OnStartContentIntentHelper onStartContentIntentHelper =
callbackHelperContainer.getOnStartContentIntentHelper();
int currentCallCount = onStartContentIntentHelper.getCallCount();
DOMUtils.scrollNodeIntoView(getContentView(), callbackHelperContainer, id);
DOMUtils.clickNode(this, getContentView(), callbackHelperContainer, id);
onStartContentIntentHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS,
TimeUnit.SECONDS);
getInstrumentation().waitForIdleSync();
return onStartContentIntentHelper.getIntentUrl();
}
/**
* Scrolls to the node with the provided id, taps on it and waits for a new page load to finish.
* Useful when tapping on links that take to other pages.
* @param id Id of the node to scroll and tap.
* @return The content url of the received intent or null if none.
*/
protected void scrollAndTapNavigatingOut(String id) throws Throwable {
TestCallbackHelperContainer callbackHelperContainer = getTestCallbackHelperContainer();
OnPageFinishedHelper onPageFinishedHelper =
callbackHelperContainer.getOnPageFinishedHelper();
int currentCallCount = onPageFinishedHelper.getCallCount();
DOMUtils.scrollNodeIntoView(getContentView(), callbackHelperContainer, id);
DOMUtils.clickNode(this, getContentView(), callbackHelperContainer, id);
onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS,
TimeUnit.SECONDS);
getInstrumentation().waitForIdleSync();
}
}