diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index e51fcf5172f..96cb3684e4d 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -312266,6 +312266,11 @@ {} ] ], + "tools/wptrunner/wptrunner/executors/runner.js": [ + [ + {} + ] + ], "tools/wptrunner/wptrunner/executors/testharness_servodriver.js": [ [ {} @@ -657253,7 +657258,7 @@ "support" ], "tools/wptrunner/docs/design.rst": [ - "bf108a0087da0c6ec123169c71586f6ce3bfba72", + "056c0d8663292b0de3fee6e430ca011d08965731", "support" ], "tools/wptrunner/docs/expectation.rst": [ @@ -657541,7 +657546,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executormarionette.py": [ - "8aea59cc8f6ceb9adc57ca42a91cefea6f321b5c", + "4ab7bf3dde9c76fe160597bccc2df772199750a0", "support" ], "tools/wptrunner/wptrunner/executors/executoropera.py": [ @@ -657553,7 +657558,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executorselenium.py": [ - "0792774d65cfc4cd27dedcd6c2eb63bab8bfce07", + "c1d66b5706eb7a6803707c51253f8f5874690dbe", "support" ], "tools/wptrunner/wptrunner/executors/executorservo.py": [ @@ -657565,7 +657570,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executorwebdriver.py": [ - "be6ed8d9d070bb717bca1c6fae82225957b10cff", + "879bd68d522f949426d5b8d4a6599c2e40efe3e8", "support" ], "tools/wptrunner/wptrunner/executors/executorwebkit.py": [ @@ -657600,16 +657605,20 @@ "5bd5c609cbd5e799787c93bac673fb8e392a7c30", "support" ], + "tools/wptrunner/wptrunner/executors/runner.js": [ + "8b800036756d016d8c020d53e02c5709fb03043f", + "support" + ], "tools/wptrunner/wptrunner/executors/testharness_servodriver.js": [ "d731cc04d7011759ce63079fbd1242fd6426603b", "support" ], "tools/wptrunner/wptrunner/executors/testharness_webdriver.js": [ - "7f00050fa7ed6daf89ce6af7a0e610d0e5ddc42b", + "9e2e6049bdc3c01987ec989b6783fdcdc267ed74", "support" ], "tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js": [ - "7a2df98ed4e73bf4618b169aa297f0c075ff8a19", + "4692e4931ccab292a12dd5fba28fc88f3b569a45", "support" ], "tools/wptrunner/wptrunner/expected.py": [ diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini index 8b9ad0ff2b6..5f219ddc85f 100644 --- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini +++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini @@ -65,9 +65,9 @@ [left intermediate] expected: FAIL - [bottom intermediate] - expected: FAIL - [text-indent intermediate] expected: FAIL + [border-top-width end] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini index 3951cd266d5..0d630fb814a 100644 --- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini +++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini @@ -1,4 +1,5 @@ [fetch-in-iframe.html] + expected: CRASH [Untitled] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini new file mode 100644 index 00000000000..385376c7321 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_4.html] + [Multiple history traversals, last would be aborted] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini new file mode 100644 index 00000000000..dc2e45516de --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_5.html] + [Multiple history traversals, last would be aborted] + expected: FAIL + diff --git a/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini new file mode 100644 index 00000000000..a9677391662 --- /dev/null +++ b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini @@ -0,0 +1,4 @@ +[DOMContentLoaded-defer.html] + [The end: DOMContentLoaded and defer scripts] + expected: FAIL + diff --git a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini new file mode 100644 index 00000000000..c7e9c7434f5 --- /dev/null +++ b/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini @@ -0,0 +1,283 @@ +[limited-quirks.html] + [top: -\\31 .5] + expected: FAIL + + [bottom: -1A] + expected: FAIL + + [bottom: -1a] + expected: FAIL + + [top: @1] + expected: FAIL + + [top: "1a"] + expected: FAIL + + [top: @a] + expected: FAIL + + [bottom: "1"] + expected: FAIL + + [bottom: -/**/1] + expected: FAIL + + [top: +/**/1] + expected: FAIL + + [bottom: @1a] + expected: FAIL + + [top: 1\\31 ] + expected: FAIL + + [top: url('1')] + expected: FAIL + + [bottom: -\\31 ] + expected: FAIL + + [top: calc(1)] + expected: FAIL + + [top: \\31 ] + expected: FAIL + + [bottom: +1\\31 ] + expected: FAIL + + [bottom: 1\\31 .5] + expected: FAIL + + [bottom: #0001] + expected: FAIL + + [top: calc(2 * 2px)] + expected: FAIL + + [bottom: 1a] + expected: FAIL + + [bottom: A] + expected: FAIL + + [bottom: #01] + expected: FAIL + + [top: +\\31 .5] + expected: FAIL + + [bottom: #1] + expected: FAIL + + [top: -/**/1] + expected: FAIL + + [bottom: +\\31 .5] + expected: FAIL + + [bottom: \\31 ] + expected: FAIL + + [bottom: calc(1)] + expected: FAIL + + [top: #001] + expected: FAIL + + [top: +\\31 ] + expected: FAIL + + [bottom: +\\31 ] + expected: FAIL + + [top: +1.5] + expected: FAIL + + [top: +1\\31 ] + expected: FAIL + + [bottom: @a] + expected: FAIL + + [bottom: @1] + expected: FAIL + + [top: #1] + expected: FAIL + + [top: 1a] + expected: FAIL + + [bottom: +1a] + expected: FAIL + + [bottom: +1A] + expected: FAIL + + [bottom: "a"] + expected: FAIL + + [top: #00001] + expected: FAIL + + [bottom: -1\\31 .5] + expected: FAIL + + [top: "1"] + expected: FAIL + + [bottom: 1.5] + expected: FAIL + + [bottom: -\\31 .5] + expected: FAIL + + [bottom: url('1')] + expected: FAIL + + [bottom: -1.5] + expected: FAIL + + [top: \\31 .5] + expected: FAIL + + [bottom: "1a"] + expected: FAIL + + [bottom: calc(2 * 2px)] + expected: FAIL + + [bottom: +1\\31 .5] + expected: FAIL + + [bottom: 1\\31 ] + expected: FAIL + + [bottom: +/**/1] + expected: FAIL + + [bottom: #00001] + expected: FAIL + + [top: url(1)] + expected: FAIL + + [bottom: #001] + expected: FAIL + + [top: +1\\31 .5] + expected: FAIL + + [top: -1a] + expected: FAIL + + [top: -1A] + expected: FAIL + + [bottom: url(1)] + expected: FAIL + + [top: a] + expected: FAIL + + [top: A] + expected: FAIL + + [top: #000001] + expected: FAIL + + [top: 1] + expected: FAIL + + [top: 1\\31 .5] + expected: FAIL + + [bottom: a] + expected: FAIL + + [bottom: 1] + expected: FAIL + + [bottom: +1] + expected: FAIL + + [bottom: #000001] + expected: FAIL + + [bottom: +a] + expected: FAIL + + [bottom: +A] + expected: FAIL + + [top: 1.5] + expected: FAIL + + [top: +A] + expected: FAIL + + [top: +a] + expected: FAIL + + [top: +1] + expected: FAIL + + [top: -1.5] + expected: FAIL + + [top: -1\\31 .5] + expected: FAIL + + [top: +1a] + expected: FAIL + + [top: +1A] + expected: FAIL + + [top: @1a] + expected: FAIL + + [bottom: \\31 .5] + expected: FAIL + + [top: "a"] + expected: FAIL + + [top: #01] + expected: FAIL + + [bottom: +1.5] + expected: FAIL + + [bottom: -A] + expected: FAIL + + [bottom: -a] + expected: FAIL + + [bottom: -1\\31 ] + expected: FAIL + + [top: #0001] + expected: FAIL + + [bottom: -1] + expected: FAIL + + [top: -\\31 ] + expected: FAIL + + [top: -A] + expected: FAIL + + [top: -a] + expected: FAIL + + [top: -1] + expected: FAIL + + [top: -1\\31 ] + expected: FAIL + diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini index 9a0741283f2..86cf34ce8de 100644 --- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini +++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini @@ -2,9 +2,6 @@ [response.formData() with input: a&b&c] expected: FAIL - [request.formData() with input: a&b&c] - expected: FAIL - [response.formData() with input: _charset_=windows-1252&test=%C2x] expected: FAIL @@ -14,13 +11,10 @@ [request.formData() with input: _charset_=windows-1252&test=%C2x] expected: FAIL - [response.formData() with input: a=b&c=d&] + [request.formData() with input: &&&a=b&&&&c=d&] expected: FAIL - [request.formData() with input: a=b&c=d] - expected: FAIL - - [request.formData() with input: a=b&c=d&] + [response.formData() with input: a=b&c=d] expected: FAIL @@ -28,15 +22,15 @@ [request.formData() with input: a&b&c] expected: FAIL - [response.formData() with input: _charset_=windows-1252&test=%C2x] - expected: FAIL - [response.formData() with input: a=b&c=d&] expected: FAIL - [response.formData() with input: a=b&c=d] - expected: FAIL - [request.formData() with input: a=b&c=d&] expected: FAIL + [response.formData() with input: a&b&c] + expected: FAIL + + [request.formData() with input: &&&a=b&&&&c=d&] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini index bf2a1d61bab..bfd4d6dd2d6 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini @@ -1,4 +1,5 @@ [import-in-moduleworker.html] + expected: ERROR [Base URL in module dedicated workers: import] expected: FAIL diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst b/tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst index bf108a0087d..056c0d86632 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst +++ b/tests/wpt/web-platform-tests/tools/wptrunner/docs/design.rst @@ -15,7 +15,7 @@ requirements: of an ``iframe`` test container. * It must be possible to deal with all kinds of behaviour of the - browser runder test, for example, crashing, hanging, etc. + browser under test, for example, crashing, hanging, etc. * It should be possible to add support for new platforms and browsers with minimal code changes. diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py index 8aea59cc8f6..4ab7bf3dde9 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -109,6 +109,8 @@ class MarionetteTestharnessProtocolPart(TestharnessProtocolPart): def __init__(self, parent): super(MarionetteTestharnessProtocolPart, self).__init__(parent) self.runner_handle = None + with open(os.path.join(here, "runner.js")) as f: + self.runner_script = f.read() def setup(self): self.marionette = self.parent.marionette @@ -129,8 +131,8 @@ class MarionetteTestharnessProtocolPart(TestharnessProtocolPart): "that your firewall rules or network setup does not " "prevent access.\e%s" % (url, traceback.format_exc(e))) raise - self.parent.base.execute_script( - "document.title = '%s'" % threading.current_thread().name.replace("'", '"')) + format_map = {"title": threading.current_thread().name.replace("'", '"')} + self.parent.base.execute_script(self.runner_script % format_map) def close_old_windows(self, url_protocol): handles = self.marionette.window_handles diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py index 0792774d65c..c1d66b5706e 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorselenium.py @@ -72,14 +72,16 @@ class SeleniumBaseProtocolPart(BaseProtocolPart): class SeleniumTestharnessProtocolPart(TestharnessProtocolPart): def setup(self): self.webdriver = self.parent.webdriver + with open(os.path.join(here, "runner.js")) as f: + self.runner_script = f.read() def load_runner(self, url_protocol): url = urlparse.urljoin(self.parent.executor.server_url(url_protocol), "/testharness_runner.html") self.logger.debug("Loading %s" % url) self.webdriver.get(url) - self.webdriver.execute_script("document.title = '%s'" % - threading.current_thread().name.replace("'", '"')) + format_map = {"title": threading.current_thread().name.replace("'", '"')} + self.parent.base.execute_script(self.runner_script % format_map) def close_old_windows(self): exclude = self.webdriver.current_window_handle diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py index be6ed8d9d07..879bd68d522 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py @@ -52,7 +52,7 @@ class WebDriverBaseProtocolPart(BaseProtocolPart): while True: try: self.webdriver.execute_async_script("") - except client.TimeoutException: + except (client.TimeoutException, client.ScriptTimeoutException): pass except (socket.timeout, client.NoSuchWindowException, client.UnknownErrorException, IOError): @@ -65,6 +65,8 @@ class WebDriverBaseProtocolPart(BaseProtocolPart): class WebDriverTestharnessProtocolPart(TestharnessProtocolPart): def setup(self): self.webdriver = self.parent.webdriver + with open(os.path.join(here, "runner.js")) as f: + self.runner_script = f.read() def load_runner(self, url_protocol): url = urlparse.urljoin(self.parent.executor.server_url(url_protocol), @@ -72,8 +74,8 @@ class WebDriverTestharnessProtocolPart(TestharnessProtocolPart): self.logger.debug("Loading %s" % url) self.webdriver.url = url - self.webdriver.execute_script("document.title = '%s'" % - threading.current_thread().name.replace("'", '"')) + format_map = {"title": threading.current_thread().name.replace("'", '"')} + self.parent.base.execute_script(self.runner_script % format_map) def close_old_windows(self): exclude = self.webdriver.window_handle @@ -125,6 +127,7 @@ class WebDriverClickProtocolPart(ClickProtocolPart): self.webdriver = self.parent.webdriver def element(self, element): + self.logger.info("click " + repr(element)) return element.click() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/runner.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/runner.js new file mode 100644 index 00000000000..8b800036756 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/runner.js @@ -0,0 +1,59 @@ +document.title = '%(title)s'; + +window.addEventListener( + "message", + function(event) { + window.message_queue.push(event); + window.process_next_event(); + }, + false +); + + +window.process_next_event = function() { + /* This function handles the next testdriver event. The presence of + window.testdriver_callback is used as a switch; when that function + is present we are able to handle the next event and when is is not + present we must wait. Therefore to drive the event processing, this + function must be called in two circumstances: + * Every time there is a new event that we may be able to handle + * Every time we set the callback function + This function unsets the callback, so no further testdriver actions + will be run until it is reset, which wptrunner does after it has + completed handling the current action. + */ + if (!window.testdriver_callback) { + return; + } + var event = window.message_queue.shift(); + if (!event) { + return; + } + var data = event.data; + + var payload = undefined; + + switch(data.type) { + case "complete": + var tests = event.data.tests; + var status = event.data.status; + + var subtest_results = tests.map(function(x) { + return [x.name, x.status, x.message, x.stack]; + }); + payload = [status.status, + status.message, + status.stack, + subtest_results]; + clearTimeout(window.timer); + break; + case "action": + payload = data; + break; + default: + return; + } + var callback = window.testdriver_callback; + window.testdriver_callback = null; + callback([window.url, data.type, payload]); +}; diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js index 7f00050fa7e..9e2e6049bdc 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver.js @@ -1,21 +1,9 @@ window.timeout_multiplier = %(timeout_multiplier)d; +window.url = "%(url)s"; +window.win = window.open("%(abs_url)s", "%(window_id)s"); window.message_queue = []; - -window.setMessageListener = function(func) { - window.current_listener = func; - window.addEventListener( - "message", - func, - false - ); -}; - -window.setMessageListener(function(event) { - window.message_queue.push(event); -}); - -window.win = window.open("%(abs_url)s", "%(window_id)s"); +window.testdriver_callback = null; if (%(timeout)s != null) { window.timer = setTimeout(function() { diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js index 7a2df98ed4e..4692e4931cc 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/testharness_webdriver_resume.js @@ -1,46 +1,3 @@ var callback = arguments[arguments.length - 1]; - -function process_event(event) { - var data = event.data; - - var payload = undefined; - - switch(data.type) { - case "complete": - var tests = event.data.tests; - var status = event.data.status; - - var subtest_results = tests.map(function(x) { - return [x.name, x.status, x.message, x.stack]; - }); - payload = [status.status, - status.message, - status.stack, - subtest_results]; - clearTimeout(window.timer); - break; - - case "action": - window.setMessageListener(function(event) { - window.message_queue.push(event); - }); - payload = data; - break; - default: - return; - } - - callback(["%(url)s", data.type, payload]); -} - -window.removeEventListener("message", window.current_listener); -if (window.message_queue.length) { - var next = window.message_queue.shift(); - process_event(next); -} else { - window.addEventListener( - "message", function f(event) { - window.removeEventListener("message", f); - process_event(event); - }, false); -} +window.testdriver_callback = callback; +window.process_next_event();