import android.app.Activity;
import android.content.Context;
+import android.net.Uri;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
+import android.view.KeyEvent;
+import android.webkit.ValueCallback;
import android.webkit.WebResourceResponse;
import java.io.InputStream;
import junit.framework.Assert;
-import org.chromium.content.browser.LoadUrlParams;
+import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content.browser.test.util.CallbackHelper;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
-import org.xwalk.core.XWalkClient;
+import org.xwalk.core.XWalkJavascriptResult;
import org.xwalk.core.XWalkNavigationHistory;
+import org.xwalk.core.XWalkNavigationItem;
import org.xwalk.core.XWalkResourceClient;
-import org.xwalk.core.XWalkSettings;
+import org.xwalk.core.XWalkUIClient;
import org.xwalk.core.XWalkView;
-import org.xwalk.core.XWalkWebChromeClient;
public class XWalkViewTestBase
extends ActivityInstrumentationTestCase2<XWalkViewTestRunnerActivity> {
protected final static int WAIT_TIMEOUT_SECONDS = 15;
+ protected final static long WAIT_TIMEOUT_MS = 2000;
+ private final static int CHECK_INTERVAL = 100;
private final static String TAG = "XWalkViewTestBase";
private XWalkView mXWalkView;
final TestHelperBridge mTestHelperBridge = new TestHelperBridge();
- class TestXWalkClientBase extends XWalkClient {
+ class TestXWalkUIClientBase extends XWalkUIClient {
TestHelperBridge mInnerContentsClient;
- public TestXWalkClientBase(TestHelperBridge client) {
+ public TestXWalkUIClientBase(TestHelperBridge client) {
super(getXWalkView());
mInnerContentsClient = client;
}
@Override
- public void onPageStarted(XWalkView view, String url) {
+ public void onPageLoadStarted(XWalkView view, String url) {
mInnerContentsClient.onPageStarted(url);
}
@Override
- public void onPageFinished(XWalkView view, String url) {
- mInnerContentsClient.onPageFinished(url);
+ public void onPageLoadStopped(XWalkView view, String url, LoadStatus status) {
+ mInnerContentsClient.onPageFinished(url, status);
}
- }
- class TestXWalkClient extends TestXWalkClientBase {
- public TestXWalkClient() {
- super(mTestHelperBridge);
+ @Override
+ public void onReceivedTitle(XWalkView view, String title) {
+ mInnerContentsClient.onTitleChanged(title);
}
- }
- class TestXWalkWebChromeClientBase extends XWalkWebChromeClient {
- TestHelperBridge mInnerContentsClient;
- public TestXWalkWebChromeClientBase(TestHelperBridge client) {
- super(getXWalkView());
- mInnerContentsClient = client;
+ @Override
+ public void onJavascriptCloseWindow(XWalkView view) {
+ mInnerContentsClient.onJavascriptCloseWindow();
}
@Override
- public void onReceivedTitle(XWalkView view, String title) {
- mInnerContentsClient.onTitleChanged(title);
+ public void onScaleChanged(XWalkView view, float oldScale, float newScale) {
+ mInnerContentsClient.onScaleChanged(newScale);
+ }
+
+ @Override
+ public void onRequestFocus(XWalkView view) {
+ mInnerContentsClient.onRequestFocus();
+ }
+
+ @Override
+ public boolean onJavascriptModalDialog(XWalkView view,
+ XWalkUIClient.JavascriptMessageType type, String url, String message,
+ String defaultValue, XWalkJavascriptResult result) {
+ return mInnerContentsClient.onJavascriptModalDialog(message);
+ }
+
+ @Override
+ public void openFileChooser(XWalkView view, ValueCallback<Uri> uploadFile,
+ String acceptType, String capture) {
+ mInnerContentsClient.openFileChooser(uploadFile);
+ }
+
+ @Override
+ public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) {
+ mInnerContentsClient.onFullscreenToggled(enterFullscreen);
+ }
+
+ @Override
+ public boolean shouldOverrideKeyEvent(XWalkView view, KeyEvent event) {
+ return mInnerContentsClient.overrideOrUnhandledKeyEvent(event);
}
}
- class TestXWalkWebChromeClient extends TestXWalkWebChromeClientBase {
- public TestXWalkWebChromeClient() {
+ class TestXWalkUIClient extends TestXWalkUIClientBase {
+ public TestXWalkUIClient() {
super(mTestHelperBridge);
}
}
@Override
public void onLoadStarted(XWalkView view, String url) {
- mTestHelperBridge.onLoadStarted(url);
+ mInnerContentsClient.onLoadStarted(url);
}
@Override
public void onReceivedLoadError(XWalkView view, int errorCode, String description, String failingUrl) {
- mTestHelperBridge.onReceivedLoadError(errorCode, description, failingUrl);
+ mInnerContentsClient.onReceivedLoadError(errorCode, description, failingUrl);
}
@Override
public WebResourceResponse shouldInterceptLoadRequest(XWalkView view,
String url) {
- return mTestHelperBridge.shouldInterceptLoadRequest(url);
+ return mInnerContentsClient.shouldInterceptLoadRequest(url);
+ }
+
+ @Override
+ public void onProgressChanged(XWalkView view, int progressInPercent) {
+ mTestHelperBridge.onProgressChanged(progressInPercent);
+ }
+
+ @Override
+ public boolean shouldOverrideUrlLoading(XWalkView view, String url) {
+ return mTestHelperBridge.shouldOverrideUrlLoading(url);
}
}
}
}
- void setXWalkClient(final XWalkClient client) {
- getInstrumentation().runOnMainSync(new Runnable() {
- @Override
- public void run() {
- getXWalkView().setXWalkClient(client);
- }
- });
- }
-
- void setXWalkWebChromeClient(final XWalkWebChromeClient client) {
+ void setUIClient(final XWalkUIClient client) {
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
- getXWalkView().setXWalkWebChromeClient(client);
+ getXWalkView().setUIClient(client);
}
});
}
});
}
- static class ViewPair {
- private final XWalkView content0;
- private final TestHelperBridge client0;
- private final XWalkView content1;
- private final TestHelperBridge client1;
-
- ViewPair(XWalkView content0, TestHelperBridge client0,
- XWalkView content1, TestHelperBridge client1) {
- this.content0 = content0;
- this.client0 = client0;
- this.content1 = content1;
- this.client1 = client1;
- }
-
- XWalkView getContent0() {
- return content0;
- }
-
- TestHelperBridge getClient0() {
- return client0;
- }
-
- XWalkView getContent1() {
- return content1;
- }
-
- TestHelperBridge getClient1() {
- return client1;
- }
- }
-
public XWalkViewTestBase() {
super(XWalkViewTestRunnerActivity.class);
}
public void run() {
mXWalkView = new XWalkView(activity, activity);
getActivity().addView(mXWalkView);
+ mXWalkView.setUIClient(new TestXWalkUIClient());
+ mXWalkView.setResourceClient(new TestXWalkResourceClient());
// mXWalkView.getXWalkViewContentForTest().installWebContentsObserverForTest(mTestHelperBridge);
}
});
});
}
- protected XWalkSettings getXWalkSettingsOnUiThreadByContent(
- final XWalkView xwalkContent) throws Exception {
- return runTestOnUiThreadAndGetResult(new Callable<XWalkSettings>() {
- @Override
- public XWalkSettings call() throws Exception {
- return xwalkContent.getSettings();
- }
- });
- }
-
protected XWalkView createXWalkViewContainerOnMainSync(
final Context context,
- final XWalkClient client,
- final XWalkResourceClient resourceClient,
- final XWalkWebChromeClient webChromeClient) throws Exception {
+ final XWalkUIClient uiClient,
+ final XWalkResourceClient resourceClient) throws Exception {
final AtomicReference<XWalkView> xWalkViewContainer =
new AtomicReference<XWalkView>();
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
xWalkViewContainer.set(new XWalkView(context, getActivity()));
getActivity().addView(xWalkViewContainer.get());
- xWalkViewContainer.get().setXWalkClient(client);
+ xWalkViewContainer.get().setUIClient(uiClient);
xWalkViewContainer.get().setResourceClient(resourceClient);
- xWalkViewContainer.get().setXWalkWebChromeClient(webChromeClient);
}
});
return xWalkViewContainer.get();
}
- protected ViewPair createViewsOnMainSync(final TestHelperBridge helperBridge0,
- final TestHelperBridge helperBridge1,
- final XWalkClient client0,
- final XWalkClient client1,
- final XWalkResourceClient resourceClient0,
- final XWalkResourceClient resourceClient1,
- final XWalkWebChromeClient chromeClient0,
- final XWalkWebChromeClient chromeClient1,
- final Context context) throws Throwable {
- final XWalkView walkView0 = createXWalkViewContainerOnMainSync(context,
- client0, resourceClient0, chromeClient0);
- final XWalkView walkView1 = createXWalkViewContainerOnMainSync(context,
- client1, resourceClient1, chromeClient1);
- final AtomicReference<ViewPair> viewPair = new AtomicReference<ViewPair>();
-
- getInstrumentation().runOnMainSync(new Runnable() {
- @Override
- public void run() {
- viewPair.set(new ViewPair(walkView0, helperBridge0, walkView1, helperBridge1));
- }
- });
-
- return viewPair.get();
- }
-
protected void loadAssetFile(String fileName) throws Exception {
String fileContent = getFileContent(fileName);
loadDataSync(fileName, fileContent, "text/html", false);
});
}
+ protected int historySizeOnUiThread() throws Throwable {
+ return runTestOnUiThreadAndGetResult(new Callable<Integer>() {
+ @Override
+ public Integer call() {
+ return mXWalkView.getNavigationHistory().size();
+ }
+ });
+ }
+
+ protected boolean hasItemAtOnUiThread(final int index) throws Throwable {
+ return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
+ @Override
+ public Boolean call() {
+ return mXWalkView.getNavigationHistory().hasItemAt(index);
+ }
+ });
+ }
+
+ protected XWalkNavigationItem getItemAtOnUiThread(final int index) throws Throwable {
+ return runTestOnUiThreadAndGetResult(new Callable<XWalkNavigationItem>() {
+ @Override
+ public XWalkNavigationItem call() {
+ return mXWalkView.getNavigationHistory().getItemAt(index);
+ }
+ });
+ }
+
+ protected XWalkNavigationItem getCurrentItemOnUiThread() throws Throwable {
+ return runTestOnUiThreadAndGetResult(new Callable<XWalkNavigationItem>() {
+ @Override
+ public XWalkNavigationItem call() {
+ return mXWalkView.getNavigationHistory().getCurrentItem();
+ }
+ });
+ }
+
protected String executeJavaScriptAndWaitForResult(final String code) throws Exception {
final TestHelperBridge.OnEvaluateJavaScriptResultHelper helper =
return helper.getJsonResultAndClear();
}
- protected ViewPair createViews() throws Throwable {
- TestHelperBridge helperBridge0 = new TestHelperBridge();
- TestHelperBridge helperBridge1 = new TestHelperBridge();
- TestXWalkClientBase viewClient0 = new TestXWalkClientBase(helperBridge0);
- TestXWalkClientBase viewClient1 = new TestXWalkClientBase(helperBridge1);
- TestXWalkWebChromeClientBase chromeClient0 =
- new TestXWalkWebChromeClientBase(helperBridge0);
- TestXWalkWebChromeClientBase chromeClient1 =
- new TestXWalkWebChromeClientBase(helperBridge1);
- TestXWalkResourceClientBase resourceClient0 =
- new TestXWalkResourceClientBase(helperBridge0);
- TestXWalkResourceClientBase resourceClient1 =
- new TestXWalkResourceClientBase(helperBridge1);
- ViewPair viewPair =
- createViewsOnMainSync(helperBridge0, helperBridge1, viewClient0, viewClient1,
- resourceClient0, resourceClient1, chromeClient0, chromeClient1,
- getActivity());
-
- return viewPair;
+ protected String getUrlOnUiThread() throws Exception {
+ return runTestOnUiThreadAndGetResult(new Callable<String>() {
+ @Override
+ public String call() throws Exception {
+ return mXWalkView.getUrl();
+ }
+ });
+ }
+
+ protected void clearCacheOnUiThread(final boolean includeDiskFiles) throws Exception {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mXWalkView.clearCache(includeDiskFiles);
+ }
+ });
+ }
+
+ protected String getAPIVersionOnUiThread() throws Exception {
+ return runTestOnUiThreadAndGetResult(new Callable<String>() {
+ @Override
+ public String call() throws Exception {
+ return mXWalkView.getAPIVersion();
+ }
+ });
+ }
+
+ protected String getXWalkVersionOnUiThread() throws Exception {
+ return runTestOnUiThreadAndGetResult(new Callable<String>() {
+ @Override
+ public String call() throws Exception {
+ return mXWalkView.getXWalkVersion();
+ }
+ });
+ }
+
+ public void clickOnElementId(final String id, String frameName) throws Exception {
+ String str;
+ if (frameName != null) {
+ str = "top.window." + frameName + ".document.getElementById('" + id + "')";
+ } else {
+ str = "document.getElementById('" + id + "')";
+ }
+ final String script1 = str + " != null";
+ final String script2 = str + ".dispatchEvent(evObj);";
+ Assert.assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ try {
+ String idIsNotNull = executeJavaScriptAndWaitForResult(script1);
+ return idIsNotNull.equals("true");
+ } catch (Throwable t) {
+ t.printStackTrace();
+ Assert.fail("Failed to check if DOM is loaded: " + t.toString());
+ return false;
+ }
+ }
+ }, WAIT_TIMEOUT_MS, CHECK_INTERVAL));
+
+ try {
+ loadJavaScriptUrl("javascript:var evObj = document.createEvent('Events'); " +
+ "evObj.initEvent('click', true, false); " +
+ script2 +
+ "console.log('element with id [" + id + "] clicked');");
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+
+ public void simulateKeyAction(final int action) {
+ new Thread(new Runnable() {
+ public void run() {
+ try {
+ getInstrumentation().sendKeySync(new KeyEvent(action,
+ KeyEvent.KEYCODE_DPAD_CENTER));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+
+ protected void stopLoading() throws Exception {
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mXWalkView.stopLoading();
+ }
+ });
}
}