--- a/testing/web-platform/mach_commands.py
+++ b/testing/web-platform/mach_commands.py
@@ -3,18 +3,20 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Integrates the web-platform-tests test runner with mach.
from __future__ import absolute_import, unicode_literals, print_function
import os
import sys
+import textwrap
from mozbuild.base import (
+ BuildEnvironmentNotFoundException,
MachCommandBase,
MachCommandConditions as conditions,
MozbuildObject,
)
from mach.decorators import (
CommandProvider,
Command,
@@ -27,42 +29,56 @@ class InvalidTestPathError(Exception):
class WebPlatformTestsRunner(MozbuildObject):
"""Run web platform tests."""
def setup_kwargs(self, kwargs):
from wptrunner import wptcommandline
build_path = os.path.join(self.topobjdir, 'build')
- if build_path not in sys.path:
- sys.path.append(build_path)
+ if os.path.exists(build_path):
+ have_objdir_build = True
+ if build_path not in sys.path:
+ sys.path.append(build_path)
+ else:
+ have_objdir_build = False
+
+ if have_objdir_build:
+ if kwargs["binary"] is None:
+ kwargs["binary"] = self.get_binary_path('app')
+
+ if kwargs["certutil_binary"] is None:
+ kwargs["certutil_binary"] = self.get_binary_path('certutil')
+ else:
+ if kwargs["binary"] is None or kwargs["certutil_binary"] is None:
+ print(textwrap.fill("No build found. Either run |mach build|, "
+ "or provide the path to a binary and "
+ "certutil explicitly using --binary and "
+ "--certutil-binary"))
+ sys.exit(1)
+
+ src_base = os.path.join(self.topsrcdir, 'testing', 'web-platform')
if kwargs["config"] is None:
- kwargs["config"] = os.path.join(self.topsrcdir, 'testing', 'web-platform', 'wptrunner.ini')
-
- if kwargs["binary"] is None:
- kwargs["binary"] = self.get_binary_path('app')
+ kwargs["config"] = os.path.join(src_base, 'wptrunner.ini')
if kwargs["prefs_root"] is None:
- kwargs["prefs_root"] = os.path.join(self.topobjdir, '_tests', 'web-platform', "prefs")
-
- if kwargs["certutil_binary"] is None:
- kwargs["certutil_binary"] = self.get_binary_path('certutil')
+ kwargs["prefs_root"] = os.path.join(self.topsrcdir, 'testing', 'profiles')
here = os.path.split(__file__)[0]
if kwargs["ssl_type"] in (None, "pregenerated"):
if kwargs["ca_cert_path"] is None:
- kwargs["ca_cert_path"] = os.path.join(here, "certs", "cacert.pem")
+ kwargs["ca_cert_path"] = os.path.join(src_base, "certs", "cacert.pem")
if kwargs["host_key_path"] is None:
- kwargs["host_key_path"] = os.path.join(here, "certs", "web-platform.test.key")
+ kwargs["host_key_path"] = os.path.join(src_base, "certs", "web-platform.test.key")
if kwargs["host_cert_path"] is None:
- kwargs["host_cert_path"] = os.path.join(here, "certs", "web-platform.test.pem")
+ kwargs["host_cert_path"] = os.path.join(src_base, "certs", "web-platform.test.pem")
kwargs["capture_stdio"] = True
kwargs = wptcommandline.check_args(kwargs)
def run_tests(self, **kwargs):
from wptrunner import wptrunner
@@ -288,17 +304,16 @@ def create_parser_manifest_update():
@CommandProvider
class MachCommands(MachCommandBase):
def setup(self):
self._activate_virtualenv()
@Command("web-platform-tests",
category="testing",
- conditions=[conditions.is_firefox],
parser=create_parser_wpt)
def run_web_platform_tests(self, **params):
self.setup()
if "test_objects" in params:
for item in params["test_objects"]:
params["include"].append(item["name"])
del params["test_objects"]
@@ -307,17 +322,16 @@ class MachCommands(MachCommandBase):
if params["list_test_groups"]:
return wpt_runner.list_test_groups(**params)
else:
return wpt_runner.run_tests(**params)
@Command("wpt",
category="testing",
- conditions=[conditions.is_firefox],
parser=create_parser_wpt)
def run_wpt(self, **params):
return self.run_web_platform_tests(**params)
@Command("web-platform-tests-update",
category="testing",
parser=create_parser_update)
def update_web_platform_tests(self, **params):