diff --git a/.gitignore b/.gitignore index 5cbae5037da5124630eb42cfceabf872f259e029..1ffa1209dd3c3b326515d2e4c8187e182274a3cd 100644 --- a/.gitignore +++ b/.gitignore @@ -90,6 +90,9 @@ GPATH # Git clone directory for updating web-platform-tests testing/web-platform/sync/ +# Third party metadata for web-platform-tests +testing/web-platform/products/ + # Android Gradle artifacts. mobile/android/gradle/.gradle diff --git a/.hgignore b/.hgignore index 9948907586c2ebaa7b5b8b28aceb49477af4ff4a..a79e9f56435d6ef11d350a8d83c497153d06090d 100644 --- a/.hgignore +++ b/.hgignore @@ -98,6 +98,9 @@ GPATH # Git clone directory for updating web-platform-tests ^testing/web-platform/sync/ +# Third party metadata for web-platform-tests +^testing/web-platform/products/ + # Android Gradle artifacts. ^mobile/android/gradle/.gradle diff --git a/testing/web-platform/README.md b/testing/web-platform/README.md index b8e353dcf5aefc8838a84344b080a326b5ac9227..4ed178870ec445ab23d03ef4c22ec2a2201933a5 100644 --- a/testing/web-platform/README.md +++ b/testing/web-platform/README.md @@ -235,45 +235,14 @@ Running Tests In Other Browsers web-platform-tests is cross browser, and the runner is compatible with multiple browsers. Therefore it's possible to check the behaviour of -tests in other browsers. This is somewhat more involved than running -them in Firefox since extra dependencies may be required. For example -to test in Chrome: +tests in other browsers. By default Chrome, Edge and Servo are +supported. In order to run the tests in these browsers use the +`--product` argument to wptrunner: -1. Download the chromedriver binary and place it somewhere sensible - e.g. `~/bin` + mach wpt --product chrome dom/historical.html -2. In your gecko source tree activate the virtualenv created by mach, - since this has most dependencies already installed. This is typically - in objdir/_virtualenv and is activated via e.g. - - source objdir/_virtualenv/bin/activate - -3. Install the extra requirements: - - cd testing/web-platform/harness - pip install -r requirements_chrome.txt - -4. Edit the config file `testing/web-platform/wptrunner.ini` so that - Chrome support is enabled by changing the section that reads: - - [products] - firefox = - - to read - - [products] - firefox = - chrome = - - (alternatively create a new config file elsewhere and use the - `--config` option to `runtests.py` to point wptrunner at this config - file). - -5. Run `runtests.py` using the location of chromedriver as - the binary: - - cd testing/web-platform - python runtests.py --product=chrome --binary=~/bin/chromedriver --log-mach=- - -By default this will use the same test checkout and metadata as are in -the Gecko tree, so it's easy to compare behaviour relative to Firefox. +By default these browsers run without expectation metadata, but it can +be added in the `testing/web-platform/products/<product>` +directory. To run with the same metadata as for Firefox (so that +differences are reported as unexpected results), pass `--meta +testing/web-platform/meta` to the mach command. diff --git a/testing/web-platform/mach_commands.py b/testing/web-platform/mach_commands.py index 0f85d1eb7b9fb9c6d7678218f2b956ad824d6d4d..3826b2494e3dc74fe1b67e0c4ec63aa385f4321c 100644 --- a/testing/web-platform/mach_commands.py +++ b/testing/web-platform/mach_commands.py @@ -28,7 +28,7 @@ class InvalidTestPathError(Exception): class WebPlatformTestsRunner(MozbuildObject): """Run web platform tests.""" - def setup_kwargs(self, kwargs): + def setup_kwargs_firefox(self, kwargs): from wptrunner import wptcommandline build_path = os.path.join(self.topobjdir, 'build') @@ -67,10 +67,50 @@ class WebPlatformTestsRunner(MozbuildObject): kwargs = wptcommandline.check_args(kwargs) + def setup_kwargs_wptrun(self, kwargs): + from wptrunner import wptcommandline + here = os.path.join(self.topsrcdir, 'testing', 'web-platform') + + sys.path.insert(0, os.path.join(here, "tests", "tools")) + + import wptrun + + setup_func = { + "chrome": wptrun.setup_chrome, + "edge": wptrun.setup_edge, + "servo": wptrun.setup_servo, + }[kwargs["product"]] + + setup_func(wptrun.virtualenv.Virtualenv(self.virtualenv_manager.virtualenv_root), + kwargs, + True) + + kwargs["tests_root"] = os.path.join(here, "tests") + + if kwargs["metadata_root"] is None: + metadir = os.path.join(here, "products", kwargs["product"]) + if not os.path.exists(metadir): + os.makedirs(metadir) + kwargs["metadata_root"] = metadir + + src_manifest = os.path.join(here, "meta", "MANIFEST.json") + dest_manifest = os.path.join(kwargs["metadata_root"], "MANIFEST.json") + + if not os.path.exists(dest_manifest) and os.path.exists(src_manifest): + with open(src_manifest) as src, open(dest_manifest, "w") as dest: + dest.write(src.read()) + + kwargs = wptcommandline.check_args(kwargs) + def run_tests(self, **kwargs): from wptrunner import wptrunner - self.setup_kwargs(kwargs) + if kwargs["product"] in ["firefox", None]: + self.setup_kwargs_firefox(kwargs) + elif kwargs["product"] in ("chrome", "edge", "servo"): + self.setup_kwargs_wptrun(kwargs) + else: + raise ValueError("Unknown product %s" % kwargs["product"]) logger = wptrunner.setup_logging(kwargs, {"mach": sys.stdout}) result = wptrunner.run_tests(**kwargs) @@ -258,7 +298,7 @@ class WPTManifestUpdater(MozbuildObject): def create_parser_wpt(): from wptrunner import wptcommandline - return wptcommandline.create_parser(["firefox"]) + return wptcommandline.create_parser(["firefox", "chrome", "edge", "servo"]) def create_parser_update(): from update import updatecommandline diff --git a/testing/web-platform/products/README b/testing/web-platform/products/README new file mode 100644 index 0000000000000000000000000000000000000000..81a111472e7313478ad6ca11f664b8d8baa2cb1d --- /dev/null +++ b/testing/web-platform/products/README @@ -0,0 +1,3 @@ +This directory is for storing metadata files when running +web-platform-tests with non-firefox browsers. By default all +subdirectories here are ignored in VCS. \ No newline at end of file diff --git a/testing/web-platform/tests/tools/wptrunner/requirements_firefox.txt b/testing/web-platform/tests/tools/wptrunner/requirements_firefox.txt index 379e522acc458db2804d72ec86b436ad15aa3b25..d8d268f127bd13ff203eca329531c8a0ea81bdd1 100644 --- a/testing/web-platform/tests/tools/wptrunner/requirements_firefox.txt +++ b/testing/web-platform/tests/tools/wptrunner/requirements_firefox.txt @@ -3,3 +3,4 @@ mozprofile >= 0.21 mozprocess >= 0.19 mozcrash >= 0.13 mozrunner >= 6.7 +mozleak >= 0.1 diff --git a/testing/web-platform/wptrunner.ini b/testing/web-platform/wptrunner.ini index 08c0d551c854a980822e6eaa59a69c5849c9d0fd..2d403ccebbe24cac7597e7fcc592b639ed8b2d16 100644 --- a/testing/web-platform/wptrunner.ini +++ b/testing/web-platform/wptrunner.ini @@ -1,5 +1,8 @@ [products] firefox = +chrome = +edge = +servo = [web-platform-tests] remote_url = https://github.com/w3c/web-platform-tests.git