diff options
Diffstat (limited to 'dom/media/test/external/external_media_harness/runtests.py')
-rw-r--r-- | dom/media/test/external/external_media_harness/runtests.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/dom/media/test/external/external_media_harness/runtests.py b/dom/media/test/external/external_media_harness/runtests.py new file mode 100644 index 000000000..08d1a323b --- /dev/null +++ b/dom/media/test/external/external_media_harness/runtests.py @@ -0,0 +1,103 @@ +# 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() |