mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
b86f120e23
Mozlog currently has two implementations. The top level package is based on the logging module and is deprecated. The newer structured logging implementation lives in mozlog.structured. This patch swaps the two, so the top level mozlog module contains the recommended implementation, while mozlog.unstructured contains the old one.
103 lines
3.2 KiB
Python
Executable File
103 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env 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/.
|
|
|
|
"""
|
|
run mozbase tests from a manifest,
|
|
by default https://github.com/mozilla/mozbase/blob/master/test-manifest.ini
|
|
"""
|
|
|
|
import imp
|
|
import manifestparser
|
|
import mozinfo
|
|
import optparse
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
import mozlog
|
|
from moztest.results import TestResultCollection
|
|
from moztest.adapters.unit import StructuredTestRunner
|
|
|
|
here = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
def unittests(path):
|
|
"""return the unittests in a .py file"""
|
|
|
|
path = os.path.abspath(path)
|
|
unittests = []
|
|
assert os.path.exists(path)
|
|
directory = os.path.dirname(path)
|
|
sys.path.insert(0, directory) # insert directory into path for top-level imports
|
|
modname = os.path.splitext(os.path.basename(path))[0]
|
|
module = imp.load_source(modname, path)
|
|
sys.path.pop(0) # remove directory from global path
|
|
loader = unittest.TestLoader()
|
|
suite = loader.loadTestsFromModule(module)
|
|
for test in suite:
|
|
unittests.append(test)
|
|
return unittests
|
|
|
|
def main(args=sys.argv[1:]):
|
|
|
|
# parse command line options
|
|
usage = '%prog [options] manifest.ini <manifest.ini> <...>'
|
|
parser = optparse.OptionParser(usage=usage, description=__doc__)
|
|
parser.add_option('-b', "--binary",
|
|
dest="binary", help="Binary path",
|
|
metavar=None, default=None)
|
|
parser.add_option('--list', dest='list_tests',
|
|
action='store_true', default=False,
|
|
help="list paths of tests to be run")
|
|
mozlog.commandline.add_logging_group(parser)
|
|
options, args = parser.parse_args(args)
|
|
logger = mozlog.commandline.setup_logging("mozbase", options,
|
|
{"tbpl": sys.stdout})
|
|
|
|
# read the manifest
|
|
if args:
|
|
manifests = args
|
|
else:
|
|
manifests = [os.path.join(here, 'test-manifest.ini')]
|
|
missing = []
|
|
for manifest in manifests:
|
|
# ensure manifests exist
|
|
if not os.path.exists(manifest):
|
|
missing.append(manifest)
|
|
assert not missing, 'manifest(s) not found: %s' % ', '.join(missing)
|
|
manifest = manifestparser.TestManifest(manifests=manifests)
|
|
|
|
if options.binary:
|
|
# A specified binary should override the environment variable
|
|
os.environ['BROWSER_PATH'] = options.binary
|
|
|
|
# gather the tests
|
|
tests = manifest.active_tests(disabled=False, **mozinfo.info)
|
|
tests = [test['path'] for test in tests]
|
|
logger.suite_start(tests)
|
|
|
|
if options.list_tests:
|
|
# print test paths
|
|
print '\n'.join(tests)
|
|
sys.exit(0)
|
|
|
|
# create unittests
|
|
unittestlist = []
|
|
for test in tests:
|
|
unittestlist.extend(unittests(test))
|
|
|
|
# run the tests
|
|
suite = unittest.TestSuite(unittestlist)
|
|
runner = StructuredTestRunner(logger=logger)
|
|
unittest_results = runner.run(suite)
|
|
results = TestResultCollection.from_unittest_results(None, unittest_results)
|
|
logger.suite_end()
|
|
|
|
# exit according to results
|
|
sys.exit(1 if results.num_failures else 0)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|