mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Update web-platform-tests to revision b0d2d2da21dfd03e86c5d710c926ae7df3b9f0d0
This commit is contained in:
parent
d048aa9c51
commit
1c9e136e8e
16 changed files with 402 additions and 91 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
||||
|
|
|
@ -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]);
|
||||
};
|
|
@ -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() {
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue