123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #!/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()
|