summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozbase/test.py')
-rwxr-xr-xtesting/mozbase/test.py104
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()