From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sat, 19 Aug 2023 17:06:27 -0600 Subject: [PATCH] Add Ladybird WebDriver runner Co-Authored-By: Andrew Kaster --- tools/wpt/browser.py | 21 ++++++++ tools/wpt/run.py | 12 ++++- .../wptrunner/wptrunner/browsers/__init__.py | 3 +- .../wptrunner/wptrunner/browsers/ladybird.py | 49 +++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 tools/wptrunner/wptrunner/browsers/ladybird.py diff --git a/tools/wpt/browser.py b/tools/wpt/browser.py index 5e8bfdab160137cab305c8f124195724deddc069..c57f5db26f1275a899413276a9518517d2ee07ff 100644 --- a/tools/wpt/browser.py +++ b/tools/wpt/browser.py @@ -1918,6 +1918,27 @@ class WebKit(Browser): def version(self, binary=None, webdriver_binary=None): return None +class Ladybird(Browser): + product = "ladybird" + requirements = None + + def download(self, dest=None, channel=None, rename=None): + raise NotImplementedError + + def install(self, dest=None, channel=None): + raise NotImplementedError + + def find_binary(self, venv_path=None, channel=None): + return which("ladybird") + + def find_webdriver(self, venv_path=None, channel=None): + return which("WebDriver") + + def install_webdriver(self, dest=None, channel=None, browser_binary=None): + raise NotImplementedError + + def version(self, binary=None, webdriver_binary=None): + return None class WebKitTestRunner(Browser): """Interface for WebKitTestRunner. diff --git a/tools/wpt/run.py b/tools/wpt/run.py index 15be2af2d3d7a969910deb3a83365c733354dd1e..9faed6b737ca26b49d64c7aed517b76a995a1d6c 100644 --- a/tools/wpt/run.py +++ b/tools/wpt/run.py @@ -110,7 +110,7 @@ otherwise install OpenSSL and ensure that it's on your $PATH.""") def check_environ(product): if product not in ("android_weblayer", "android_webview", "chrome", "chrome_android", "chrome_ios", "content_shell", - "firefox", "firefox_android", "servo", "wktr"): + "firefox", "firefox_android", "servo", "wktr", "ladybird"): config_builder = serve.build_config(os.path.join(wpt_root, "config.json")) # Override the ports to avoid looking for free ports config_builder.ssl = {"type": "none"} @@ -692,6 +692,15 @@ class WebKit(BrowserSetup): def setup_kwargs(self, kwargs): pass +class Ladybird(BrowserSetup): + name = "ladybird" + browser_cls = browser.Ladybird + + def install(self, channel=None): + raise NotImplementedError + + def setup_kwargs(self, kwargs): + pass class WebKitTestRunner(BrowserSetup): name = "wktr" @@ -782,6 +791,7 @@ product_setup = { "wktr": WebKitTestRunner, "webkitgtk_minibrowser": WebKitGTKMiniBrowser, "epiphany": Epiphany, + "ladybird": Ladybird } diff --git a/tools/wptrunner/wptrunner/browsers/__init__.py b/tools/wptrunner/wptrunner/browsers/__init__.py index 9724bb957b5e3c7d1a9e1506c7e710742038c916..4d10457699d5abd9e1cb5e02a2b58e825be1b417 100644 --- a/tools/wptrunner/wptrunner/browsers/__init__.py +++ b/tools/wptrunner/wptrunner/browsers/__init__.py @@ -43,4 +43,5 @@ product_list = ["android_weblayer", "webkit", "webkitgtk_minibrowser", "wktr", - "epiphany"] + "epiphany", + "ladybird"] diff --git a/tools/wptrunner/wptrunner/browsers/ladybird.py b/tools/wptrunner/wptrunner/browsers/ladybird.py new file mode 100644 index 0000000000000000000000000000000000000000..5c9e68e4719a3b59e14f745c49a64604bee3b940 --- /dev/null +++ b/tools/wptrunner/wptrunner/browsers/ladybird.py @@ -0,0 +1,49 @@ +from .base import WebDriverBrowser, require_arg +from .base import get_timeout_multiplier +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401 + WebDriverRefTestExecutor, # noqa: F401 + WebDriverCrashtestExecutor) # noqa: F401 +from ..executors.base import WdspecExecutor + +__wptrunner__ = { + "product": "ladybird", + "check_args": "check_args", + "browser": "LadybirdBrowser", + "browser_kwargs": "browser_kwargs", + "executor_kwargs": "executor_kwargs", + "env_options": "env_options", + "env_extras": "env_extras", + "timeout_multiplier": "get_timeout_multiplier", + "executor": { + # "testharness": "WebDriverTestharnessExecutor", + "reftest": "WebDriverRefTestExecutor", + # "wdspec": "WdspecExecutor", + # "crashtest": "WebDriverCrashtestExecutor" + } +} + +def check_args(**kwargs): + require_arg(kwargs, "webdriver_binary") + + +def browser_kwargs(logger, test_type, run_info_data, config, **kwargs): + return {"binary": kwargs["binary"], + "webdriver_binary": kwargs["webdriver_binary"], + "webdriver_args": kwargs.get("webdriver_args")} + +def executor_kwargs(logger, test_type, test_environment, run_info_data, + **kwargs): + executor_kwargs = base_executor_kwargs(test_type, test_environment, run_info_data, **kwargs) + executor_kwargs["capabilities"] = {} + return executor_kwargs + +def env_options(): + return {} + +def env_extras(**kwargs): + return [] + +class LadybirdBrowser(WebDriverBrowser): + def make_command(self): + return [self.webdriver_binary, "--port", str(self.port)] + self.webdriver_args