Upstream version 10.39.233.0
[platform/framework/web/crosswalk.git] / src / xwalk / test / android / core / javatests / src / org / xwalk / core / xwview / test / XWalkViewTestBase.java
index 5555902..c3eedf9 100644 (file)
@@ -7,8 +7,11 @@ package org.xwalk.core.xwview.test;
 
 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;
@@ -20,64 +23,90 @@ import java.util.concurrent.TimeUnit;
 
 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);
         }
     }
@@ -91,18 +120,28 @@ public class XWalkViewTestBase
 
         @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);
         }
     }
 
@@ -112,20 +151,11 @@ public class XWalkViewTestBase
         }
     }
 
-    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);
             }
         });
     }
@@ -139,37 +169,6 @@ public class XWalkViewTestBase
         });
     }
 
-    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);
     }
@@ -185,6 +184,8 @@ public class XWalkViewTestBase
             public void run() {
                 mXWalkView = new XWalkView(activity, activity);
                 getActivity().addView(mXWalkView);
+                mXWalkView.setUIClient(new TestXWalkUIClient());
+                mXWalkView.setResourceClient(new TestXWalkResourceClient());
                 // mXWalkView.getXWalkViewContentForTest().installWebContentsObserverForTest(mTestHelperBridge);
             }
         });
@@ -312,21 +313,10 @@ public class XWalkViewTestBase
         });
     }
 
-    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() {
@@ -334,40 +324,14 @@ public class XWalkViewTestBase
             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);
@@ -467,6 +431,42 @@ public class XWalkViewTestBase
         });
     }
 
+    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 =
@@ -482,24 +482,94 @@ public class XWalkViewTestBase
         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();
+            }
+        });
     }
 }