mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 02:47:31 +09:00
103 lines
3.5 KiB
Python
103 lines
3.5 KiB
Python
# 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 os
|
|
import sys
|
|
|
|
import mozlog
|
|
|
|
from manifestparser import read_ini
|
|
from marionette_harness import (
|
|
BaseMarionetteTestRunner,
|
|
BaseMarionetteArguments,
|
|
BrowserMobProxyArguments,
|
|
)
|
|
from marionette_harness.runtests import MarionetteHarness, cli as mn_cli
|
|
|
|
import external_media_tests
|
|
from testcase import MediaTestCase
|
|
from external_media_tests.media_utils.video_puppeteer import debug_script
|
|
|
|
|
|
class MediaTestArgumentsBase(object):
|
|
name = 'Firefox Media Tests'
|
|
args = [
|
|
[['--urls'], {
|
|
'help': 'ini file of urls to make available to all tests',
|
|
'default': os.path.join(external_media_tests.urls, 'default.ini'),
|
|
}],
|
|
]
|
|
|
|
def verify_usage_handler(self, args):
|
|
if args.urls:
|
|
if not os.path.isfile(args.urls):
|
|
raise ValueError('--urls must provide a path to an ini file')
|
|
else:
|
|
path = os.path.abspath(args.urls)
|
|
args.video_urls = MediaTestArgumentsBase.get_urls(path)
|
|
if not args.video_urls:
|
|
raise ValueError('list of video URLs cannot be empty')
|
|
|
|
def parse_args_handler(self, args):
|
|
if not args.tests:
|
|
args.tests = [external_media_tests.manifest]
|
|
|
|
|
|
@staticmethod
|
|
def get_urls(manifest):
|
|
with open(manifest, 'r'):
|
|
return [line[0] for line in read_ini(manifest)]
|
|
|
|
|
|
class MediaTestArguments(BaseMarionetteArguments):
|
|
def __init__(self, **kwargs):
|
|
BaseMarionetteArguments.__init__(self, **kwargs)
|
|
self.register_argument_container(MediaTestArgumentsBase())
|
|
self.register_argument_container(BrowserMobProxyArguments())
|
|
|
|
|
|
class MediaTestRunner(BaseMarionetteTestRunner):
|
|
def __init__(self, **kwargs):
|
|
BaseMarionetteTestRunner.__init__(self, **kwargs)
|
|
if not self.server_root:
|
|
self.server_root = external_media_tests.resources
|
|
# pick up prefs from marionette_driver.geckoinstance.DesktopInstance
|
|
self.app = 'fxdesktop'
|
|
self.test_handlers = [MediaTestCase]
|
|
|
|
# Used in HTML report (--log-html)
|
|
def gather_media_debug(test, status):
|
|
rv = {}
|
|
marionette = test._marionette_weakref()
|
|
|
|
if marionette.session is not None:
|
|
try:
|
|
with marionette.using_context(marionette.CONTEXT_CHROME):
|
|
debug_lines = marionette.execute_script(debug_script)
|
|
if debug_lines:
|
|
name = 'mozMediaSourceObject.mozDebugReaderData'
|
|
rv[name] = '\n'.join(debug_lines)
|
|
else:
|
|
logger = mozlog.get_default_logger()
|
|
logger.info('No data available about '
|
|
'mozMediaSourceObject')
|
|
except:
|
|
logger = mozlog.get_default_logger()
|
|
logger.warning('Failed to gather test failure media debug',
|
|
exc_info=True)
|
|
return rv
|
|
|
|
self.result_callbacks.append(gather_media_debug)
|
|
|
|
|
|
class FirefoxMediaHarness(MarionetteHarness):
|
|
def parse_args(self, *args, **kwargs):
|
|
return MarionetteHarness.parse_args(self, {'mach': sys.stdout})
|
|
|
|
|
|
def cli():
|
|
mn_cli(MediaTestRunner, MediaTestArguments, FirefoxMediaHarness)
|
|
|
|
if __name__ == '__main__':
|
|
cli()
|