diff options
Diffstat (limited to 'testing/mozbase/test.py')
-rwxr-xr-x | testing/mozbase/test.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/testing/mozbase/test.py b/testing/mozbase/test.py new file mode 100755 index 000000000..013506fc6 --- /dev/null +++ b/testing/mozbase/test.py @@ -0,0 +1,104 @@ +#!/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() |