зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 5f2252c9e774 (bug 1668458) for wpt failures CLOSED TREE
This commit is contained in:
Родитель
b5c3417177
Коммит
50effb1629
|
@ -174,8 +174,6 @@ class WebPlatformTest(TestingMixin, MercurialScript, CodeCoverageMixin, AndroidM
|
||||||
dirs['abs_test_bin_dir'] = os.path.join(dirs['abs_test_install_dir'], 'bin')
|
dirs['abs_test_bin_dir'] = os.path.join(dirs['abs_test_install_dir'], 'bin')
|
||||||
dirs["abs_wpttest_dir"] = os.path.join(dirs['abs_test_install_dir'], "web-platform")
|
dirs["abs_wpttest_dir"] = os.path.join(dirs['abs_test_install_dir'], "web-platform")
|
||||||
dirs['abs_blob_upload_dir'] = os.path.join(abs_dirs['abs_work_dir'], 'blobber_upload_dir')
|
dirs['abs_blob_upload_dir'] = os.path.join(abs_dirs['abs_work_dir'], 'blobber_upload_dir')
|
||||||
dirs['abs_test_extensions_dir'] = os.path.join(dirs['abs_test_install_dir'],
|
|
||||||
'extensions')
|
|
||||||
if self.is_android:
|
if self.is_android:
|
||||||
dirs['abs_xre_dir'] = os.path.join(abs_dirs['abs_work_dir'], 'hostutils')
|
dirs['abs_xre_dir'] = os.path.join(abs_dirs['abs_work_dir'], 'hostutils')
|
||||||
if self.is_emulator:
|
if self.is_emulator:
|
||||||
|
@ -251,10 +249,7 @@ class WebPlatformTest(TestingMixin, MercurialScript, CodeCoverageMixin, AndroidM
|
||||||
"--stackfix-dir=%s" % os.path.join(dirs["abs_test_install_dir"], "bin"),
|
"--stackfix-dir=%s" % os.path.join(dirs["abs_test_install_dir"], "bin"),
|
||||||
"--no-pause-after-test",
|
"--no-pause-after-test",
|
||||||
"--instrument-to-file=%s" % os.path.join(dirs["abs_blob_upload_dir"],
|
"--instrument-to-file=%s" % os.path.join(dirs["abs_blob_upload_dir"],
|
||||||
"wpt_instruments.txt"),
|
"wpt_instruments.txt")]
|
||||||
"--specialpowers-path=%s" % os.path.join(dirs['abs_test_extensions_dir'],
|
|
||||||
"specialpowers@mozilla.org.xpi"),
|
|
||||||
]
|
|
||||||
|
|
||||||
is_windows_7 = mozinfo.info["os"] == "win" and mozinfo.info["os_version"] == "6.1"
|
is_windows_7 = mozinfo.info["os"] == "win" and mozinfo.info["os_version"] == "6.1"
|
||||||
|
|
||||||
|
@ -367,7 +362,6 @@ class WebPlatformTest(TestingMixin, MercurialScript, CodeCoverageMixin, AndroidM
|
||||||
extract_dirs=["mach",
|
extract_dirs=["mach",
|
||||||
"bin/*",
|
"bin/*",
|
||||||
"config/*",
|
"config/*",
|
||||||
"extensions/*",
|
|
||||||
"mozbase/*",
|
"mozbase/*",
|
||||||
"marionette/*",
|
"marionette/*",
|
||||||
"tools/*",
|
"tools/*",
|
||||||
|
|
|
@ -82,13 +82,6 @@ FAQ
|
||||||
[testdriver](https://web-platform-tests.org/writing-tests/testdriver.html)
|
[testdriver](https://web-platform-tests.org/writing-tests/testdriver.html)
|
||||||
API.
|
API.
|
||||||
|
|
||||||
For Gecko-specific testharness tests, the specialPowers extension is
|
|
||||||
available. Note that this should only be used when no other approach
|
|
||||||
works; such tests can't be shared with other browsers. If you're
|
|
||||||
using specialPowers for something that could be tested in other
|
|
||||||
browsers if we extended testdriver or added test-only APIs, please
|
|
||||||
file a bug.
|
|
||||||
|
|
||||||
Writing tests
|
Writing tests
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|
|
@ -41,13 +41,6 @@ class WebPlatformTestsRunnerSetup(MozbuildObject):
|
||||||
"""Setup kwargs relevant for all browser products"""
|
"""Setup kwargs relevant for all browser products"""
|
||||||
|
|
||||||
tests_src_path = os.path.join(self._here, "tests")
|
tests_src_path = os.path.join(self._here, "tests")
|
||||||
|
|
||||||
if (kwargs["product"] in {"firefox", "firefox_android"} and
|
|
||||||
kwargs["specialpowers_path"] is None):
|
|
||||||
kwargs["specialpowers_path"] = os.path.join(self.distdir,
|
|
||||||
"xpi-stage",
|
|
||||||
"specialpowers@mozilla.org.xpi")
|
|
||||||
|
|
||||||
if kwargs["product"] == "firefox_android":
|
if kwargs["product"] == "firefox_android":
|
||||||
# package_name may be different in the future
|
# package_name may be different in the future
|
||||||
package_name = kwargs["package_name"]
|
package_name = kwargs["package_name"]
|
||||||
|
@ -94,9 +87,9 @@ class WebPlatformTestsRunnerSetup(MozbuildObject):
|
||||||
|
|
||||||
def kwargs_firefox(self, kwargs):
|
def kwargs_firefox(self, kwargs):
|
||||||
"""Setup kwargs specific to running Firefox and other gecko browsers"""
|
"""Setup kwargs specific to running Firefox and other gecko browsers"""
|
||||||
|
|
||||||
import mozinfo
|
import mozinfo
|
||||||
from wptrunner import wptcommandline
|
from wptrunner import wptcommandline
|
||||||
|
|
||||||
kwargs = self.kwargs_common(kwargs)
|
kwargs = self.kwargs_common(kwargs)
|
||||||
|
|
||||||
if kwargs["binary"] is None:
|
if kwargs["binary"] is None:
|
||||||
|
@ -132,6 +125,7 @@ class WebPlatformTestsRunnerSetup(MozbuildObject):
|
||||||
|
|
||||||
def kwargs_wptrun(self, kwargs):
|
def kwargs_wptrun(self, kwargs):
|
||||||
"""Setup kwargs for wpt-run which is only used for non-gecko browser products"""
|
"""Setup kwargs for wpt-run which is only used for non-gecko browser products"""
|
||||||
|
|
||||||
from tools.wpt import run
|
from tools.wpt import run
|
||||||
|
|
||||||
kwargs = self.kwargs_common(kwargs)
|
kwargs = self.kwargs_common(kwargs)
|
||||||
|
@ -351,11 +345,9 @@ class MachCommands(MachCommandBase):
|
||||||
parser=create_parser_wpt)
|
parser=create_parser_wpt)
|
||||||
def run_web_platform_tests(self, **params):
|
def run_web_platform_tests(self, **params):
|
||||||
self.setup()
|
self.setup()
|
||||||
if params["product"] is None:
|
if conditions.is_android(self) and params["product"] != "firefox_android":
|
||||||
if conditions.is_android(self):
|
if params["product"] is None:
|
||||||
params["product"] = "firefox_android"
|
params["product"] = "firefox_android"
|
||||||
else:
|
|
||||||
params["product"] = "firefox"
|
|
||||||
if "test_objects" in params:
|
if "test_objects" in params:
|
||||||
include = []
|
include = []
|
||||||
test_types = set()
|
test_types = set()
|
||||||
|
|
|
@ -33,7 +33,7 @@ class WebPlatformTestsRunner(object):
|
||||||
self.update_manifest(logger)
|
self.update_manifest(logger)
|
||||||
kwargs["manifest_update"] = False
|
kwargs["manifest_update"] = False
|
||||||
|
|
||||||
if kwargs["product"] == "firefox":
|
if kwargs["product"] in ["firefox", None]:
|
||||||
try:
|
try:
|
||||||
kwargs = self.setup.kwargs_firefox(kwargs)
|
kwargs = self.setup.kwargs_firefox(kwargs)
|
||||||
except BinaryNotFoundException as e:
|
except BinaryNotFoundException as e:
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
<title>Check specialPowers is available in gecko-only tests</title>
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
test(() => assert_equals(SpecialPowers.sanityCheck(), "foo"))
|
|
||||||
</script>
|
|
|
@ -126,12 +126,6 @@ class Browser(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def settings(self, test):
|
def settings(self, test):
|
||||||
"""Dictionary of metadata that is constant for a specific launch of a browser.
|
|
||||||
|
|
||||||
This is used to determine when the browser instance configuration changes, requiring
|
|
||||||
a relaunch of the browser. The test runner calls this method for each test, and if the
|
|
||||||
returned value differs from that for the previous test, the browser is relaunched.
|
|
||||||
"""
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
|
|
@ -101,8 +101,7 @@ def browser_kwargs(test_type, run_info_data, config, **kwargs):
|
||||||
"config": config,
|
"config": config,
|
||||||
"browser_channel": kwargs["browser_channel"],
|
"browser_channel": kwargs["browser_channel"],
|
||||||
"headless": kwargs["headless"],
|
"headless": kwargs["headless"],
|
||||||
"preload_browser": kwargs["preload_browser"],
|
"preload_browser": kwargs["preload_browser"]}
|
||||||
"specialpowers_path": kwargs["specialpowers_path"]}
|
|
||||||
|
|
||||||
|
|
||||||
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
||||||
|
@ -541,16 +540,12 @@ class ProfileCreator(object):
|
||||||
self.certutil_binary = certutil_binary
|
self.certutil_binary = certutil_binary
|
||||||
self.ca_certificate_path = ca_certificate_path
|
self.ca_certificate_path = ca_certificate_path
|
||||||
|
|
||||||
def create(self, **kwargs):
|
def create(self):
|
||||||
"""Create a Firefox profile and return the mozprofile Profile object pointing at that
|
"""Create a Firefox profile and return the mozprofile Profile object pointing at that
|
||||||
profile
|
profile"""
|
||||||
|
|
||||||
:param kwargs: Additional arguments to pass into the profile constructor
|
|
||||||
"""
|
|
||||||
preferences = self._load_prefs()
|
preferences = self._load_prefs()
|
||||||
|
|
||||||
profile = FirefoxProfile(preferences=preferences,
|
profile = FirefoxProfile(preferences=preferences)
|
||||||
**kwargs)
|
|
||||||
self._set_required_prefs(profile)
|
self._set_required_prefs(profile)
|
||||||
if self.ca_certificate_path is not None:
|
if self.ca_certificate_path is not None:
|
||||||
self._setup_ssl(profile)
|
self._setup_ssl(profile)
|
||||||
|
@ -675,6 +670,7 @@ class ProfileCreator(object):
|
||||||
certutil("-L", "-d", cert_db_path)
|
certutil("-L", "-d", cert_db_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class FirefoxBrowser(Browser):
|
class FirefoxBrowser(Browser):
|
||||||
init_timeout = 70
|
init_timeout = 70
|
||||||
|
|
||||||
|
@ -683,8 +679,7 @@ class FirefoxBrowser(Browser):
|
||||||
ca_certificate_path=None, e10s=False, enable_webrender=False, enable_fission=False,
|
ca_certificate_path=None, e10s=False, enable_webrender=False, enable_fission=False,
|
||||||
stackfix_dir=None, binary_args=None, timeout_multiplier=None, leak_check=False,
|
stackfix_dir=None, binary_args=None, timeout_multiplier=None, leak_check=False,
|
||||||
asan=False, stylo_threads=1, chaos_mode_flags=None, config=None,
|
asan=False, stylo_threads=1, chaos_mode_flags=None, config=None,
|
||||||
browser_channel="nightly", headless=None, preload_browser=False,
|
browser_channel="nightly", headless=None, preload_browser=False, **kwargs):
|
||||||
specialpowers_path=None, **kwargs):
|
|
||||||
Browser.__init__(self, logger)
|
Browser.__init__(self, logger)
|
||||||
|
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
|
@ -693,7 +688,6 @@ class FirefoxBrowser(Browser):
|
||||||
self.init_timeout = self.init_timeout * timeout_multiplier
|
self.init_timeout = self.init_timeout * timeout_multiplier
|
||||||
|
|
||||||
self.instance = None
|
self.instance = None
|
||||||
self._settings = None
|
|
||||||
|
|
||||||
self.stackfix_dir = stackfix_dir
|
self.stackfix_dir = stackfix_dir
|
||||||
self.symbols_path = symbols_path
|
self.symbols_path = symbols_path
|
||||||
|
@ -702,8 +696,6 @@ class FirefoxBrowser(Browser):
|
||||||
self.asan = asan
|
self.asan = asan
|
||||||
self.leak_check = leak_check
|
self.leak_check = leak_check
|
||||||
|
|
||||||
self.specialpowers_path = specialpowers_path
|
|
||||||
|
|
||||||
profile_creator = ProfileCreator(logger,
|
profile_creator = ProfileCreator(logger,
|
||||||
prefs_root,
|
prefs_root,
|
||||||
config,
|
config,
|
||||||
|
@ -734,15 +726,14 @@ class FirefoxBrowser(Browser):
|
||||||
symbols_path,
|
symbols_path,
|
||||||
asan)
|
asan)
|
||||||
|
|
||||||
|
|
||||||
def settings(self, test):
|
def settings(self, test):
|
||||||
self._settings = {"check_leaks": self.leak_check and not test.leaks,
|
return {"check_leaks": self.leak_check and not test.leaks,
|
||||||
"lsan_disabled": test.lsan_disabled,
|
"lsan_disabled": test.lsan_disabled,
|
||||||
"lsan_allowed": test.lsan_allowed,
|
"lsan_allowed": test.lsan_allowed,
|
||||||
"lsan_max_stack_depth": test.lsan_max_stack_depth,
|
"lsan_max_stack_depth": test.lsan_max_stack_depth,
|
||||||
"mozleak_allowed": self.leak_check and test.mozleak_allowed,
|
"mozleak_allowed": self.leak_check and test.mozleak_allowed,
|
||||||
"mozleak_thresholds": self.leak_check and test.mozleak_threshold,
|
"mozleak_thresholds": self.leak_check and test.mozleak_threshold}
|
||||||
"special_powers": self.specialpowers_path and test.url_base == "/_mozilla/"}
|
|
||||||
return self._settings
|
|
||||||
|
|
||||||
def start(self, group_metadata=None, **kwargs):
|
def start(self, group_metadata=None, **kwargs):
|
||||||
self.instance = self.instance_manager.get()
|
self.instance = self.instance_manager.get()
|
||||||
|
@ -765,11 +756,7 @@ class FirefoxBrowser(Browser):
|
||||||
|
|
||||||
def executor_browser(self):
|
def executor_browser(self):
|
||||||
assert self.instance is not None
|
assert self.instance is not None
|
||||||
extensions = []
|
return ExecutorBrowser, {"marionette_port": self.instance.marionette_port}
|
||||||
if self._settings.get("special_powers", False):
|
|
||||||
extensions.append(self.specialpowers_path)
|
|
||||||
return ExecutorBrowser, {"marionette_port": self.instance.marionette_port,
|
|
||||||
"extensions": extensions}
|
|
||||||
|
|
||||||
def check_crash(self, process, test):
|
def check_crash(self, process, test):
|
||||||
dump_dir = os.path.join(self.instance.runner.profile.profile, "minidumps")
|
dump_dir = os.path.join(self.instance.runner.profile.profile, "minidumps")
|
||||||
|
|
|
@ -62,8 +62,7 @@ def browser_kwargs(test_type, run_info_data, config, **kwargs):
|
||||||
"chaos_mode_flags": kwargs["chaos_mode_flags"],
|
"chaos_mode_flags": kwargs["chaos_mode_flags"],
|
||||||
"config": config,
|
"config": config,
|
||||||
"install_fonts": kwargs["install_fonts"],
|
"install_fonts": kwargs["install_fonts"],
|
||||||
"tests_root": config.doc_root,
|
"tests_root": config.doc_root}
|
||||||
"specialpowers_path": kwargs["specialpowers_path"]}
|
|
||||||
|
|
||||||
|
|
||||||
def env_extras(**kwargs):
|
def env_extras(**kwargs):
|
||||||
|
@ -120,6 +119,7 @@ class ProfileCreator(FirefoxProfileCreator):
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class FirefoxAndroidBrowser(Browser):
|
class FirefoxAndroidBrowser(Browser):
|
||||||
init_timeout = 300
|
init_timeout = 300
|
||||||
shutdown_timeout = 60
|
shutdown_timeout = 60
|
||||||
|
@ -130,7 +130,7 @@ class FirefoxAndroidBrowser(Browser):
|
||||||
ca_certificate_path=None, e10s=False, enable_webrender=False, stackfix_dir=None,
|
ca_certificate_path=None, e10s=False, enable_webrender=False, stackfix_dir=None,
|
||||||
binary_args=None, timeout_multiplier=None, leak_check=False, asan=False,
|
binary_args=None, timeout_multiplier=None, leak_check=False, asan=False,
|
||||||
stylo_threads=1, chaos_mode_flags=None, config=None, browser_channel="nightly",
|
stylo_threads=1, chaos_mode_flags=None, config=None, browser_channel="nightly",
|
||||||
install_fonts=False, tests_root=None, specialpowers_path=None, **kwargs):
|
install_fonts=False, tests_root=None, **kwargs):
|
||||||
|
|
||||||
super(FirefoxAndroidBrowser, self).__init__(logger)
|
super(FirefoxAndroidBrowser, self).__init__(logger)
|
||||||
self.prefs_root = prefs_root
|
self.prefs_root = prefs_root
|
||||||
|
@ -155,7 +155,6 @@ class FirefoxAndroidBrowser(Browser):
|
||||||
self.browser_channel = browser_channel
|
self.browser_channel = browser_channel
|
||||||
self.install_fonts = install_fonts
|
self.install_fonts = install_fonts
|
||||||
self.tests_root = tests_root
|
self.tests_root = tests_root
|
||||||
self.specialpowers_path = specialpowers_path
|
|
||||||
|
|
||||||
self.profile_creator = ProfileCreator(logger,
|
self.profile_creator = ProfileCreator(logger,
|
||||||
prefs_root,
|
prefs_root,
|
||||||
|
@ -171,23 +170,19 @@ class FirefoxAndroidBrowser(Browser):
|
||||||
self.marionette_port = None
|
self.marionette_port = None
|
||||||
self.profile = None
|
self.profile = None
|
||||||
self.runner = None
|
self.runner = None
|
||||||
self._settings = {}
|
|
||||||
|
|
||||||
def settings(self, test):
|
def settings(self, test):
|
||||||
self._settings = {"check_leaks": self.leak_check and not test.leaks,
|
return {"check_leaks": self.leak_check and not test.leaks,
|
||||||
"lsan_allowed": test.lsan_allowed,
|
"lsan_allowed": test.lsan_allowed,
|
||||||
"lsan_max_stack_depth": test.lsan_max_stack_depth,
|
"lsan_max_stack_depth": test.lsan_max_stack_depth,
|
||||||
"mozleak_allowed": self.leak_check and test.mozleak_allowed,
|
"mozleak_allowed": self.leak_check and test.mozleak_allowed,
|
||||||
"mozleak_thresholds": self.leak_check and test.mozleak_threshold,
|
"mozleak_thresholds": self.leak_check and test.mozleak_threshold}
|
||||||
"special_powers": self.specialpowers_path and test.url_base == "/_mozilla/"}
|
|
||||||
return self._settings
|
|
||||||
|
|
||||||
def start(self, **kwargs):
|
def start(self, **kwargs):
|
||||||
if self.marionette_port is None:
|
if self.marionette_port is None:
|
||||||
self.marionette_port = get_free_port()
|
self.marionette_port = get_free_port()
|
||||||
|
|
||||||
addons = [self.specialpowers_path] if self._settings.get("special_powers") else None
|
self.profile = self.profile_creator.create()
|
||||||
self.profile = self.profile_creator.create(addons=addons)
|
|
||||||
self.profile.set_preferences({"marionette.port": self.marionette_port})
|
self.profile.set_preferences({"marionette.port": self.marionette_port})
|
||||||
|
|
||||||
if self.install_fonts:
|
if self.install_fonts:
|
||||||
|
@ -278,10 +273,7 @@ class FirefoxAndroidBrowser(Browser):
|
||||||
self.stop(force)
|
self.stop(force)
|
||||||
|
|
||||||
def executor_browser(self):
|
def executor_browser(self):
|
||||||
return ExecutorBrowser, {"marionette_port": self.marionette_port,
|
return ExecutorBrowser, {"marionette_port": self.marionette_port}
|
||||||
# We never want marionette to install extensions because
|
|
||||||
# that doesn't work on Android; instead they are in the profile
|
|
||||||
"extensions": []}
|
|
||||||
|
|
||||||
def check_crash(self, process, test):
|
def check_crash(self, process, test):
|
||||||
if not os.environ.get("MINIDUMP_STACKWALK", "") and self.stackwalk_binary:
|
if not os.environ.get("MINIDUMP_STACKWALK", "") and self.stackwalk_binary:
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
import tempfile
|
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -47,10 +45,15 @@ from ..webdriver_server import GeckoDriverServer
|
||||||
|
|
||||||
|
|
||||||
def do_delayed_imports():
|
def do_delayed_imports():
|
||||||
global errors, marionette, Addons
|
global errors, marionette
|
||||||
|
|
||||||
from marionette_driver import marionette, errors
|
# Marionette client used to be called marionette, recently it changed
|
||||||
from marionette_driver.addons import Addons
|
# to marionette_driver for unfathomable reasons
|
||||||
|
try:
|
||||||
|
import marionette
|
||||||
|
from marionette import errors
|
||||||
|
except ImportError:
|
||||||
|
from marionette_driver import marionette, errors
|
||||||
|
|
||||||
|
|
||||||
def _switch_to_window(marionette, handle):
|
def _switch_to_window(marionette, handle):
|
||||||
|
@ -714,6 +717,7 @@ class MarionetteProtocol(Protocol):
|
||||||
|
|
||||||
|
|
||||||
class ExecuteAsyncScriptRun(TimedRunner):
|
class ExecuteAsyncScriptRun(TimedRunner):
|
||||||
|
|
||||||
def set_timeout(self):
|
def set_timeout(self):
|
||||||
timeout = self.timeout
|
timeout = self.timeout
|
||||||
|
|
||||||
|
@ -786,8 +790,6 @@ class MarionetteTestharnessExecutor(TestharnessExecutor):
|
||||||
self.window_id = str(uuid.uuid4())
|
self.window_id = str(uuid.uuid4())
|
||||||
self.debug = debug
|
self.debug = debug
|
||||||
|
|
||||||
self.install_extensions = browser.extensions
|
|
||||||
|
|
||||||
self.original_pref_values = {}
|
self.original_pref_values = {}
|
||||||
|
|
||||||
if marionette is None:
|
if marionette is None:
|
||||||
|
@ -795,11 +797,6 @@ class MarionetteTestharnessExecutor(TestharnessExecutor):
|
||||||
|
|
||||||
def setup(self, runner):
|
def setup(self, runner):
|
||||||
super(MarionetteTestharnessExecutor, self).setup(runner)
|
super(MarionetteTestharnessExecutor, self).setup(runner)
|
||||||
for extension_path in self.install_extensions:
|
|
||||||
self.logger.info("Installing extension from %s" % extension_path)
|
|
||||||
addons = Addons(self.protocol.marionette)
|
|
||||||
addons.install(extension_path)
|
|
||||||
|
|
||||||
self.protocol.testharness.load_runner(self.last_environment["protocol"])
|
self.protocol.testharness.load_runner(self.last_environment["protocol"])
|
||||||
|
|
||||||
def is_alive(self):
|
def is_alive(self):
|
||||||
|
|
|
@ -98,12 +98,7 @@ class TestRunner(object):
|
||||||
def run(self):
|
def run(self):
|
||||||
"""Main loop accepting commands over the pipe and triggering
|
"""Main loop accepting commands over the pipe and triggering
|
||||||
the associated methods"""
|
the associated methods"""
|
||||||
try:
|
self.setup()
|
||||||
self.setup()
|
|
||||||
except Exception:
|
|
||||||
self.logger.warning("An error occured during executor setup:\n%s" %
|
|
||||||
traceback.format_exc())
|
|
||||||
raise
|
|
||||||
commands = {"run_test": self.run_test,
|
commands = {"run_test": self.run_test,
|
||||||
"reset": self.reset,
|
"reset": self.reset,
|
||||||
"stop": self.stop,
|
"stop": self.stop,
|
||||||
|
|
|
@ -284,8 +284,6 @@ scheme host and port.""")
|
||||||
help="Disable fission in Gecko.")
|
help="Disable fission in Gecko.")
|
||||||
gecko_group.add_argument("--stackfix-dir", dest="stackfix_dir", action="store",
|
gecko_group.add_argument("--stackfix-dir", dest="stackfix_dir", action="store",
|
||||||
help="Path to directory containing assertion stack fixing scripts")
|
help="Path to directory containing assertion stack fixing scripts")
|
||||||
gecko_group.add_argument("--specialpowers-path", action="store",
|
|
||||||
help="Path to specialPowers extension xpi file")
|
|
||||||
gecko_group.add_argument("--setpref", dest="extra_prefs", action='append',
|
gecko_group.add_argument("--setpref", dest="extra_prefs", action='append',
|
||||||
default=[], metavar="PREF=VALUE",
|
default=[], metavar="PREF=VALUE",
|
||||||
help="Defines an extra user preference (overrides those in prefs_root)")
|
help="Defines an extra user preference (overrides those in prefs_root)")
|
||||||
|
|
|
@ -157,19 +157,15 @@ class Test(object):
|
||||||
default_timeout = 10 # seconds
|
default_timeout = 10 # seconds
|
||||||
long_timeout = 60 # seconds
|
long_timeout = 60 # seconds
|
||||||
|
|
||||||
def __init__(self, url_base, tests_root, url, inherit_metadata, test_metadata,
|
def __init__(self, tests_root, url, inherit_metadata, test_metadata,
|
||||||
timeout=None, path=None, protocol="http", quic=False):
|
timeout=None, path=None, protocol="http", quic=False):
|
||||||
self.url_base = url_base
|
|
||||||
self.tests_root = tests_root
|
self.tests_root = tests_root
|
||||||
self.url = url
|
self.url = url
|
||||||
self._inherit_metadata = inherit_metadata
|
self._inherit_metadata = inherit_metadata
|
||||||
self._test_metadata = test_metadata
|
self._test_metadata = test_metadata
|
||||||
self.timeout = timeout if timeout is not None else self.default_timeout
|
self.timeout = timeout if timeout is not None else self.default_timeout
|
||||||
self.path = path
|
self.path = path
|
||||||
self.environment = {"url_base": url_base,
|
self.environment = {"protocol": protocol, "prefs": self.prefs, "quic": quic}
|
||||||
"protocol": protocol,
|
|
||||||
"prefs": self.prefs,
|
|
||||||
"quic": quic}
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
if not isinstance(other, Test):
|
if not isinstance(other, Test):
|
||||||
|
@ -188,8 +184,7 @@ class Test(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_manifest(cls, manifest_file, manifest_item, inherit_metadata, test_metadata):
|
def from_manifest(cls, manifest_file, manifest_item, inherit_metadata, test_metadata):
|
||||||
timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout
|
timeout = cls.long_timeout if manifest_item.timeout == "long" else cls.default_timeout
|
||||||
return cls(manifest_file.url_base,
|
return cls(manifest_file.tests_root,
|
||||||
manifest_file.tests_root,
|
|
||||||
manifest_item.url,
|
manifest_item.url,
|
||||||
inherit_metadata,
|
inherit_metadata,
|
||||||
test_metadata,
|
test_metadata,
|
||||||
|
@ -398,10 +393,10 @@ class TestharnessTest(Test):
|
||||||
subtest_result_cls = TestharnessSubtestResult
|
subtest_result_cls = TestharnessSubtestResult
|
||||||
test_type = "testharness"
|
test_type = "testharness"
|
||||||
|
|
||||||
def __init__(self, url_base, tests_root, url, inherit_metadata, test_metadata,
|
def __init__(self, tests_root, url, inherit_metadata, test_metadata,
|
||||||
timeout=None, path=None, protocol="http", testdriver=False,
|
timeout=None, path=None, protocol="http", testdriver=False,
|
||||||
jsshell=False, scripts=None, quic=False):
|
jsshell=False, scripts=None, quic=False):
|
||||||
Test.__init__(self, url_base, tests_root, url, inherit_metadata, test_metadata, timeout,
|
Test.__init__(self, tests_root, url, inherit_metadata, test_metadata, timeout,
|
||||||
path, protocol, quic)
|
path, protocol, quic)
|
||||||
|
|
||||||
self.testdriver = testdriver
|
self.testdriver = testdriver
|
||||||
|
@ -417,8 +412,7 @@ class TestharnessTest(Test):
|
||||||
script_metadata = manifest_item.script_metadata or []
|
script_metadata = manifest_item.script_metadata or []
|
||||||
scripts = [v for (k, v) in script_metadata
|
scripts = [v for (k, v) in script_metadata
|
||||||
if k == "script"]
|
if k == "script"]
|
||||||
return cls(manifest_file.url_base,
|
return cls(manifest_file.tests_root,
|
||||||
manifest_file.tests_root,
|
|
||||||
manifest_item.url,
|
manifest_item.url,
|
||||||
inherit_metadata,
|
inherit_metadata,
|
||||||
test_metadata,
|
test_metadata,
|
||||||
|
@ -458,10 +452,10 @@ class ReftestTest(Test):
|
||||||
result_cls = ReftestResult
|
result_cls = ReftestResult
|
||||||
test_type = "reftest"
|
test_type = "reftest"
|
||||||
|
|
||||||
def __init__(self, url_base, tests_root, url, inherit_metadata, test_metadata, references,
|
def __init__(self, tests_root, url, inherit_metadata, test_metadata, references,
|
||||||
timeout=None, path=None, viewport_size=None, dpi=None, fuzzy=None, protocol="http",
|
timeout=None, path=None, viewport_size=None, dpi=None, fuzzy=None, protocol="http",
|
||||||
quic=False):
|
quic=False):
|
||||||
Test.__init__(self, url_base, tests_root, url, inherit_metadata, test_metadata, timeout,
|
Test.__init__(self, tests_root, url, inherit_metadata, test_metadata, timeout,
|
||||||
path, protocol, quic)
|
path, protocol, quic)
|
||||||
|
|
||||||
for _, ref_type in references:
|
for _, ref_type in references:
|
||||||
|
@ -492,8 +486,7 @@ class ReftestTest(Test):
|
||||||
|
|
||||||
url = manifest_test.url
|
url = manifest_test.url
|
||||||
|
|
||||||
node = cls(manifest_file.url_base,
|
node = cls(manifest_file.tests_root,
|
||||||
manifest_file.tests_root,
|
|
||||||
manifest_test.url,
|
manifest_test.url,
|
||||||
inherit_metadata,
|
inherit_metadata,
|
||||||
test_metadata,
|
test_metadata,
|
||||||
|
@ -612,7 +605,7 @@ class ReftestTest(Test):
|
||||||
class PrintReftestTest(ReftestTest):
|
class PrintReftestTest(ReftestTest):
|
||||||
test_type = "print-reftest"
|
test_type = "print-reftest"
|
||||||
|
|
||||||
def __init__(self, url_base, tests_root, url, inherit_metadata, test_metadata, references,
|
def __init__(self, tests_root, url, inherit_metadata, test_metadata, references,
|
||||||
timeout=None, path=None, viewport_size=None, dpi=None, fuzzy=None,
|
timeout=None, path=None, viewport_size=None, dpi=None, fuzzy=None,
|
||||||
page_ranges=None, protocol="http", quic=False):
|
page_ranges=None, protocol="http", quic=False):
|
||||||
super(PrintReftestTest, self).__init__(tests_root, url, inherit_metadata, test_metadata,
|
super(PrintReftestTest, self).__init__(tests_root, url, inherit_metadata, test_metadata,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче