| Index: android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java
|
| diff --git a/android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java b/android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java
|
| deleted file mode 100644
|
| index 93276d20459f354f98341814ab4f56169b18bd37..0000000000000000000000000000000000000000
|
| --- a/android_webview/tools/WebViewShellTest/src/org/chromium/webview_shell/test/WebViewLayoutTest.java
|
| +++ /dev/null
|
| @@ -1,386 +0,0 @@
|
| -// Copyright 2015 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.webview_shell.test;
|
| -
|
| -import android.os.Environment;
|
| -import android.test.ActivityInstrumentationTestCase2;
|
| -import android.test.suitebuilder.annotation.MediumTest;
|
| -
|
| -import junit.framework.ComparisonFailure;
|
| -
|
| -import org.chromium.base.Log;
|
| -import org.chromium.webview_shell.WebViewLayoutTestActivity;
|
| -
|
| -import java.io.BufferedReader;
|
| -import java.io.File;
|
| -import java.io.FileInputStream;
|
| -import java.io.FileNotFoundException;
|
| -import java.io.FileOutputStream;
|
| -import java.io.IOException;
|
| -import java.io.InputStreamReader;
|
| -import java.util.HashMap;
|
| -import java.util.HashSet;
|
| -import java.util.concurrent.TimeUnit;
|
| -import java.util.concurrent.TimeoutException;
|
| -
|
| -/**
|
| - * Tests running end-to-end layout tests.
|
| - */
|
| -public class WebViewLayoutTest
|
| - extends ActivityInstrumentationTestCase2<WebViewLayoutTestActivity> {
|
| -
|
| - private static final String TAG = "WebViewLayoutTest";
|
| -
|
| - private static final String EXTERNAL_PREFIX =
|
| - Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
|
| - private static final String BASE_WEBVIEW_TEST_PATH = "android_webview/tools/WebViewShell/test/";
|
| - private static final String BASE_BLINK_TEST_PATH = "third_party/WebKit/LayoutTests/";
|
| - private static final String BASE_BLINK_STABLE_TEST_PATH =
|
| - BASE_BLINK_TEST_PATH + "virtual/stable/";
|
| - private static final String PATH_WEBVIEW_PREFIX = EXTERNAL_PREFIX + BASE_WEBVIEW_TEST_PATH;
|
| - private static final String PATH_BLINK_PREFIX = EXTERNAL_PREFIX + BASE_BLINK_TEST_PATH;
|
| - private static final String PATH_BLINK_STABLE_PREFIX =
|
| - EXTERNAL_PREFIX + BASE_BLINK_STABLE_TEST_PATH;
|
| -
|
| - private static final long TIMEOUT_SECONDS = 20;
|
| -
|
| - private WebViewLayoutTestActivity mTestActivity;
|
| -
|
| - public WebViewLayoutTest() {
|
| - super(WebViewLayoutTestActivity.class);
|
| - }
|
| -
|
| - @Override
|
| - protected void setUp() throws Exception {
|
| - super.setUp();
|
| - mTestActivity = (WebViewLayoutTestActivity) getActivity();
|
| - }
|
| -
|
| - @Override
|
| - protected void tearDown() throws Exception {
|
| - mTestActivity.finish();
|
| - super.tearDown();
|
| - }
|
| -
|
| - @Override
|
| - public WebViewLayoutTestRunner getInstrumentation() {
|
| - return (WebViewLayoutTestRunner) super.getInstrumentation();
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testSimple() throws Exception {
|
| - runWebViewLayoutTest("experimental/basic-logging.html",
|
| - "experimental/basic-logging-expected.txt");
|
| - }
|
| -
|
| - // This is a non-failing test because it tends to require frequent rebaselines.
|
| - @MediumTest
|
| - public void testGlobalInterfaceNoFail() throws Exception {
|
| - runBlinkLayoutTest("webexposed/global-interface-listing.html",
|
| - "webexposed/global-interface-listing-expected.txt", true);
|
| - }
|
| -
|
| - // This is a non-failing test to avoid 'blind' rebaselines by the sheriff
|
| - // (see crbug.com/564765).
|
| - @MediumTest
|
| - public void testNoUnexpectedInterfaces() throws Exception {
|
| - ensureJsTestCopied();
|
| - loadUrlWebViewAsync("file://" + PATH_BLINK_PREFIX
|
| - + "webexposed/global-interface-listing.html", mTestActivity);
|
| - String webviewExpected = readFile(PATH_WEBVIEW_PREFIX
|
| - + "webexposed/global-interface-listing-expected.txt");
|
| - mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS);
|
| - String result = mTestActivity.getTestResult();
|
| -
|
| - HashMap<String, HashSet<String>> webviewInterfacesMap = buildHashMap(result);
|
| - HashMap<String, HashSet<String>> webviewExpectedInterfacesMap =
|
| - buildHashMap(webviewExpected);
|
| - StringBuilder newInterfaces = new StringBuilder();
|
| -
|
| - // Check that each current webview interface is one of webview expected interfaces.
|
| - for (String interfaceS : webviewInterfacesMap.keySet()) {
|
| - if (webviewExpectedInterfacesMap.get(interfaceS) == null) {
|
| - newInterfaces.append(interfaceS + "\n");
|
| - }
|
| - }
|
| -
|
| - if (newInterfaces.length() > 0) {
|
| - Log.w(TAG, "Unexpected WebView interfaces found: " + newInterfaces.toString());
|
| - }
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testWebViewExcludedInterfaces() throws Exception {
|
| - ensureJsTestCopied();
|
| - loadUrlWebViewAsync("file://" + PATH_BLINK_PREFIX
|
| - + "webexposed/global-interface-listing.html", mTestActivity);
|
| - String blinkExpected = readFile(PATH_BLINK_PREFIX
|
| - + "webexposed/global-interface-listing-expected.txt");
|
| - String webviewExcluded = readFile(PATH_WEBVIEW_PREFIX
|
| - + "webexposed/not-webview-exposed.txt");
|
| - mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS);
|
| - String result = mTestActivity.getTestResult();
|
| -
|
| - HashMap<String, HashSet<String>> webviewExcludedInterfacesMap =
|
| - buildHashMap(webviewExcluded);
|
| - HashMap<String, HashSet<String>> webviewInterfacesMap = buildHashMap(result);
|
| - HashMap<String, HashSet<String>> blinkInterfacesMap = buildHashMap(blinkExpected);
|
| - StringBuilder unexpected = new StringBuilder();
|
| -
|
| - // Check that each excluded interface and its properties are present in blinkInterfaceMap
|
| - // but not in webviewInterfacesMap.
|
| - for (HashMap.Entry<String, HashSet<String>> entry :
|
| - webviewExcludedInterfacesMap.entrySet()) {
|
| - String interfaceS = entry.getKey();
|
| - HashSet<String> subsetBlink = blinkInterfacesMap.get(interfaceS);
|
| - assertNotNull("Interface " + interfaceS + " not exposed in blink", subsetBlink);
|
| -
|
| - HashSet<String> subsetWebView = webviewInterfacesMap.get(interfaceS);
|
| - HashSet<String> subsetExcluded = entry.getValue();
|
| - if (subsetExcluded.isEmpty() && subsetWebView != null) {
|
| - unexpected.append(interfaceS + "\n");
|
| - continue;
|
| - }
|
| -
|
| - for (String property : subsetExcluded) {
|
| - assertTrue("Interface " + interfaceS + "." + property + " not exposed in blink",
|
| - subsetBlink.contains(property));
|
| - if (subsetWebView != null && subsetWebView.contains(property)) {
|
| - unexpected.append(interfaceS + "." + property + "\n");
|
| - }
|
| - }
|
| - }
|
| - assertEquals("Unexpected webview interfaces found", "", unexpected.toString());
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testWebViewIncludedStableInterfaces() throws Exception {
|
| - ensureJsTestCopied();
|
| - loadUrlWebViewAsync("file://" + PATH_BLINK_PREFIX
|
| - + "webexposed/global-interface-listing.html", mTestActivity);
|
| - String blinkStableExpected = readFile(PATH_BLINK_STABLE_PREFIX
|
| - + "webexposed/global-interface-listing-expected.txt");
|
| - String webviewExcluded = readFile(PATH_WEBVIEW_PREFIX
|
| - + "webexposed/not-webview-exposed.txt");
|
| - mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS);
|
| - String result = mTestActivity.getTestResult();
|
| -
|
| - HashMap<String, HashSet<String>> webviewExcludedInterfacesMap =
|
| - buildHashMap(webviewExcluded);
|
| - HashMap<String, HashSet<String>> webviewInterfacesMap = buildHashMap(result);
|
| - HashMap<String, HashSet<String>> blinkStableInterfacesMap =
|
| - buildHashMap(blinkStableExpected);
|
| - StringBuilder missing = new StringBuilder();
|
| -
|
| - // Check that each stable blink interface and its properties are present in webview
|
| - // except the excluded interfaces/properties.
|
| - for (HashMap.Entry<String, HashSet<String>> entry : blinkStableInterfacesMap.entrySet()) {
|
| - String interfaceS = entry.getKey();
|
| - HashSet<String> subsetExcluded = webviewExcludedInterfacesMap.get(interfaceS);
|
| - if (subsetExcluded != null && subsetExcluded.isEmpty()) continue;
|
| -
|
| - HashSet<String> subsetBlink = entry.getValue();
|
| - HashSet<String> subsetWebView = webviewInterfacesMap.get(interfaceS);
|
| -
|
| - if (subsetWebView == null) {
|
| - // interface is missing completely
|
| - missing.append(interfaceS + "\n");
|
| - continue;
|
| - }
|
| -
|
| - for (String propertyBlink : subsetBlink) {
|
| - if (subsetExcluded != null && subsetExcluded.contains(propertyBlink)) continue;
|
| - if (!subsetWebView.contains(propertyBlink)) {
|
| - missing.append(interfaceS + "." + propertyBlink + "\n");
|
| - }
|
| - }
|
| - }
|
| - assertEquals("Missing webview interfaces found", "", missing.toString());
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testRequestMIDIAccess() throws Exception {
|
| - mTestActivity.setGrantPermission(true);
|
| - runWebViewLayoutTest("blink-apis/webmidi/requestmidiaccess.html",
|
| - "blink-apis/webmidi/requestmidiaccess-expected.txt");
|
| - mTestActivity.setGrantPermission(false);
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testRequestMIDIAccessDenyPermission() throws Exception {
|
| - runWebViewLayoutTest("blink-apis/webmidi/requestmidiaccess-permission-denied.html",
|
| - "blink-apis/webmidi/requestmidiaccess-permission-denied-expected.html");
|
| - }
|
| -
|
| - // Blink platform API tests
|
| -
|
| - @MediumTest
|
| - public void testGeolocationCallbacks() throws Exception {
|
| - runWebViewLayoutTest("blink-apis/geolocation/geolocation-permission-callbacks.html",
|
| - "blink-apis/geolocation/geolocation-permission-callbacks-expected.txt");
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testMediaStreamApiDenyPermission() throws Exception {
|
| - runWebViewLayoutTest("blink-apis/webrtc/mediastream-permission-denied-callbacks.html",
|
| - "blink-apis/webrtc/mediastream-permission-denied-callbacks-expected.txt");
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testMediaStreamApi() throws Exception {
|
| - mTestActivity.setGrantPermission(true);
|
| - runWebViewLayoutTest("blink-apis/webrtc/mediastream-callbacks.html",
|
| - "blink-apis/webrtc/mediastream-callbacks-expected.txt");
|
| - mTestActivity.setGrantPermission(false);
|
| - }
|
| -
|
| - @MediumTest
|
| - public void testBatteryApi() throws Exception {
|
| - runWebViewLayoutTest("blink-apis/battery-status/battery-callback.html",
|
| - "blink-apis/battery-status/battery-callback-expected.txt");
|
| - }
|
| -
|
| - // test helper methods
|
| -
|
| - private void runWebViewLayoutTest(final String fileName, final String fileNameExpected)
|
| - throws Exception {
|
| - runTest(PATH_WEBVIEW_PREFIX + fileName, PATH_WEBVIEW_PREFIX + fileNameExpected, false);
|
| - }
|
| -
|
| - private void runBlinkLayoutTest(final String fileName, final String fileNameExpected,
|
| - boolean noFail) throws Exception {
|
| - ensureJsTestCopied();
|
| - runTest(PATH_BLINK_PREFIX + fileName, PATH_WEBVIEW_PREFIX + fileNameExpected, noFail);
|
| - }
|
| -
|
| - private void runTest(final String fileName, final String fileNameExpected, boolean noFail)
|
| - throws FileNotFoundException, IOException, InterruptedException, TimeoutException {
|
| - loadUrlWebViewAsync("file://" + fileName, mTestActivity);
|
| -
|
| - if (getInstrumentation().isRebaseline()) {
|
| - // this is the rebaseline process
|
| - mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS);
|
| - String result = mTestActivity.getTestResult();
|
| - writeFile(fileNameExpected, result, true);
|
| - Log.i(TAG, "file: " + fileNameExpected + " --> rebaselined, length=" + result.length());
|
| - } else {
|
| - String expected = readFile(fileNameExpected);
|
| - mTestActivity.waitForFinish(TIMEOUT_SECONDS, TimeUnit.SECONDS);
|
| - String result = mTestActivity.getTestResult();
|
| - if (noFail && !expected.equals(result)) {
|
| - ComparisonFailure cf = new ComparisonFailure("Unexpected result", expected, result);
|
| - Log.e(TAG, cf.toString());
|
| - } else {
|
| - assertEquals(expected, result);
|
| - }
|
| - }
|
| - }
|
| -
|
| - private void loadUrlWebViewAsync(final String fileUrl,
|
| - final WebViewLayoutTestActivity activity) {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - activity.loadUrl(fileUrl);
|
| - }
|
| - });
|
| - }
|
| -
|
| - private static void ensureJsTestCopied() throws IOException {
|
| - File jsTestFile = new File(PATH_BLINK_PREFIX + "resources/js-test.js");
|
| - if (jsTestFile.exists()) return;
|
| - String original = readFile(PATH_WEBVIEW_PREFIX + "resources/js-test.js");
|
| - writeFile(PATH_BLINK_PREFIX + "resources/js-test.js", original, false);
|
| - }
|
| -
|
| - /**
|
| - * Reads a file and returns it's contents as string.
|
| - */
|
| - private static String readFile(String fileName) throws IOException {
|
| - FileInputStream inputStream = new FileInputStream(new File(fileName));
|
| - try {
|
| - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
|
| - try {
|
| - StringBuilder contents = new StringBuilder();
|
| - String line;
|
| -
|
| - while ((line = reader.readLine()) != null) {
|
| - contents.append(line);
|
| - contents.append("\n");
|
| - }
|
| - return contents.toString();
|
| - } finally {
|
| - reader.close();
|
| - }
|
| - } finally {
|
| - inputStream.close();
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Writes a file with the given fileName and contents. If overwrite is true overwrites any
|
| - * exisiting file with the same file name. If the file does not exist any intermediate
|
| - * required directories are created.
|
| - */
|
| - private static void writeFile(final String fileName, final String contents, boolean overwrite)
|
| - throws FileNotFoundException, IOException {
|
| - File fileOut = new File(fileName);
|
| -
|
| - if (fileOut.exists() && !overwrite) {
|
| - return;
|
| - }
|
| -
|
| - String absolutePath = fileOut.getAbsolutePath();
|
| - File filePath = new File(absolutePath.substring(0, absolutePath.lastIndexOf("/")));
|
| -
|
| - if (!filePath.exists()) {
|
| - if (!filePath.mkdirs())
|
| - throw new IOException("failed to create directories: " + filePath);
|
| - }
|
| -
|
| - FileOutputStream outputStream = new FileOutputStream(fileOut);
|
| - try {
|
| - outputStream.write(contents.getBytes());
|
| - } finally {
|
| - outputStream.close();
|
| - }
|
| - }
|
| -
|
| - private HashMap<String, HashSet<String>> buildHashMap(String contents) {
|
| - String[] lineByLine = contents.split("\\n");
|
| -
|
| - HashSet subset = null;
|
| - HashMap<String, HashSet<String>> interfaces = new HashMap<String, HashSet<String>>();
|
| - for (String line : lineByLine) {
|
| - String s = trimAndRemoveComments(line);
|
| - if (isInterfaceOrGlobalObject(s)) {
|
| - subset = interfaces.get(s);
|
| - if (subset == null) {
|
| - subset = new HashSet();
|
| - interfaces.put(s, subset);
|
| - }
|
| - } else if (isInterfaceProperty(s) && subset != null) {
|
| - subset.add(s);
|
| - }
|
| - }
|
| - return interfaces;
|
| - }
|
| -
|
| - private String trimAndRemoveComments(String line) {
|
| - String s = line.trim();
|
| - int commentIndex = s.indexOf("#"); // remove any potential comments
|
| - return (commentIndex >= 0) ? s.substring(0, commentIndex).trim() : s;
|
| - }
|
| -
|
| - private boolean isInterfaceOrGlobalObject(String s) {
|
| - return s.startsWith("interface") || s.startsWith("[GLOBAL OBJECT]");
|
| - }
|
| -
|
| - private boolean isInterfaceProperty(String s) {
|
| - return s.startsWith("getter") || s.startsWith("setter")
|
| - || s.startsWith("method") || s.startsWith("attribute");
|
| - }
|
| -
|
| -}
|
|
|