VulpesOS/gaia/tests/python/gaia-ui-tests/gaiatest/runtests.py
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

94 lines
3.4 KiB
Python
Executable file

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import json
import os
from marionette import (BaseMarionetteArguments,
MarionetteTextTestRunner,
MarionetteTestResult,
BaseMarionetteTestRunner)
from marionette.runtests import cli
import mozlog
from gaiatest import __name__
from gaiatest import (GaiaTestCase,
GaiaArguments,
GaiaTestRunnerMixin,
GaiaImageCompareArguments)
from version import __version__
class GaiaTestArguments(BaseMarionetteArguments):
def __init__(self, **kwargs):
BaseMarionetteArguments.__init__(self, **kwargs)
self.register_argument_container(GaiaArguments())
self.register_argument_container(GaiaImageCompareArguments())
class GaiaTestResult(MarionetteTestResult):
pass
class GaiaTextTestRunner(MarionetteTextTestRunner):
resultclass = GaiaTestResult
class GaiaTestRunner(BaseMarionetteTestRunner, GaiaTestRunnerMixin):
textrunnerclass = GaiaTextTestRunner
def __init__(self, **kwargs):
# if no server root is specified, use the packaged resources
if not kwargs.get('server_root'):
kwargs['server_root'] = os.path.abspath(os.path.join(
os.path.dirname(__file__), 'resources'))
def gather_debug(test, status):
rv = {}
marionette = test._marionette_weakref()
# In the event we're gathering debug without starting a session, skip marionette commands
if marionette.session is not None:
try:
marionette.switch_to_frame()
marionette.push_permission('settings-read', True)
marionette.push_permission('settings-api-read', True)
rv['settings'] = json.dumps(marionette.execute_async_script("""
var req = window.navigator.mozSettings.createLock().get('*');
req.onsuccess = function() {
marionetteScriptFinished(req.result);
}""", sandbox='system'), sort_keys=True, indent=4, separators=(',', ': '))
except:
logger = mozlog.structured.get_default_logger()
if not logger:
logger = mozlog.unstructured.getLogger('gaiatest')
logger.warning('Failed to gather test failure debug.', exc_info=True)
return rv
BaseMarionetteTestRunner.__init__(self, result_callbacks=[gather_debug], **kwargs)
GaiaTestRunnerMixin.__init__(self, **kwargs)
self.test_handlers = [GaiaTestCase]
def start_httpd(self, need_external_ip):
super(GaiaTestRunner, self).start_httpd(need_external_ip)
if self.httpd is not None:
self.httpd.urlhandlers.append({
'method': 'GET',
'path': '.*\.webapp',
'function': self.webapp_handler})
def webapp_handler(self, request):
with open(os.path.join(self.server_root, request.path[1:]), 'r') as f:
data = f.read()
return (200, {
'Content-type': 'application/x-web-app-manifest+json',
'Content-Length': len(data)}, data)
def main():
cli(runner_class=GaiaTestRunner, parser_class=GaiaTestArguments)