michael@0: # This Source Code Form is subject to the terms of the Mozilla Public michael@0: # License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: # file, You can obtain one at http://mozilla.org/MPL/2.0/. michael@0: michael@0: import os michael@0: import unittest michael@0: import doctest michael@0: import glob michael@0: michael@0: env_root = os.environ['CUDDLEFISH_ROOT'] michael@0: michael@0: def get_tests(): michael@0: import cuddlefish michael@0: import cuddlefish.tests michael@0: michael@0: tests = [] michael@0: packages = [cuddlefish, cuddlefish.tests] michael@0: for package in packages: michael@0: path = os.path.abspath(package.__path__[0]) michael@0: pynames = glob.glob(os.path.join(path, '*.py')) michael@0: for filename in pynames: michael@0: basename = os.path.basename(filename) michael@0: module_name = os.path.splitext(basename)[0] michael@0: full_name = "%s.%s" % (package.__name__, module_name) michael@0: module = __import__(full_name, fromlist=[package.__name__]) michael@0: michael@0: loader = unittest.TestLoader() michael@0: suite = loader.loadTestsFromModule(module) michael@0: for test in suite: michael@0: tests.append(test) michael@0: michael@0: finder = doctest.DocTestFinder() michael@0: doctests = finder.find(module) michael@0: for test in doctests: michael@0: if len(test.examples) > 0: michael@0: tests.append(doctest.DocTestCase(test)) michael@0: michael@0: return tests michael@0: michael@0: def run(verbose=False): michael@0: if verbose: michael@0: verbosity = 2 michael@0: else: michael@0: verbosity = 1 michael@0: michael@0: tests = get_tests() michael@0: suite = unittest.TestSuite(tests) michael@0: runner = unittest.TextTestRunner(verbosity=verbosity) michael@0: return runner.run(suite) michael@0: michael@0: if __name__ == '__main__': michael@0: run()