| #!/usr/bin/env python | |
| from __future__ import print_function | |
| import argparse | |
| import os | |
| import subprocess | |
| import sys | |
| from tools import cov | |
| is_python3 = bool(sys.version_info.major == 3) | |
| has_python34 = False | |
| verbose = False | |
| repo_dir = os.path.abspath(os.path.dirname(__file__)) | |
| path_to_cov = os.path.join(repo_dir, 'tools', 'cov.py') | |
| path_to_runner = os.path.join(repo_dir, 'typ', 'runner.py') | |
| def call(*args, **kwargs): | |
| if verbose: | |
| print(' '.join(args[0])) | |
| ret = subprocess.call(*args, **kwargs) | |
| if ret != 0: | |
| sys.exit(ret) | |
| def main(argv): | |
| parser = argparse.ArgumentParser(prog='run') | |
| parser.add_argument('--no3', action='store_true', | |
| help='Do not run the tests under Python 3.') | |
| parser.add_argument('-v', '--verbose', action='store_true') | |
| subps = parser.add_subparsers() | |
| subp = subps.add_parser('clean', help='Remove any local files.') | |
| subp.set_defaults(func=run_clean) | |
| subp = subps.add_parser('coverage', | |
| help='Run the tests and report code coverage.') | |
| subp.set_defaults(func=run_coverage) | |
| cov.add_arguments(subp) | |
| subp = subps.add_parser('help', | |
| help='Get help on a subcommand.') | |
| subp.add_argument(nargs='?', action='store', dest='subcommand', | |
| help='The command to get help for.') | |
| subp.set_defaults(func=run_help) | |
| subp = subps.add_parser('lint', | |
| help='run lint over the source') | |
| subp.set_defaults(func=run_lint) | |
| subp = subps.add_parser('tests', | |
| help='run the tests') | |
| subp.set_defaults(func=run_tests) | |
| args = parser.parse_args(argv) | |
| global verbose | |
| if args.verbose: | |
| verbose = True | |
| global has_python34 | |
| if not args.no3: | |
| try: | |
| ver = subprocess.check_output(['python3', '--version']) | |
| has_python34 = ver.split()[1] >= '3.4' | |
| except: | |
| pass | |
| args.func(args) | |
| def run_clean(args): | |
| call(['git', 'clean', '-fxd']) | |
| def run_coverage(args): | |
| if not args.path: | |
| args.path = [repo_dir] | |
| if not args.source: | |
| args.source = [os.path.join(repo_dir, 'typ')] | |
| argv = cov.argv_from_args(args) | |
| cov_args = [path_to_runner, '-j', '1'] | |
| print('Running coverage of unit tests for Python 2.7.') | |
| call(['python', path_to_cov] + argv + cov_args) | |
| if has_python34: | |
| print('Running coverage of unit tests for Python 3.4.') | |
| call(['python3', path_to_cov] + argv + cov_args) | |
| def run_help(args): | |
| if args.subcommand: | |
| main([args.subcommand, '--help']) | |
| main(['--help']) | |
| def run_lint(args): | |
| call('pylint --rcfile=pylintrc */*.py */*/*.py', shell=True) | |
| def run_tests(args): | |
| print('Testing running the typ module directly if it is in sys.path.') | |
| call(['python', '-m', 'typ', 'typ.tests.main_test.TestMain.test_basic']) | |
| print('Testing running the runner directly if nothing is in sys.path.') | |
| home_dir = os.environ['HOME'] | |
| call(['python', path_to_runner, 'typ.tests.main_test.TestMain.test_basic'], | |
| cwd=home_dir) | |
| # Now run all the tests under Python2 and Python3. | |
| print('Running the unit tests under Python 2.') | |
| call(['python', path_to_runner]) | |
| if has_python34: | |
| print('Running the unit tests under Python 3.4.') | |
| call(['python3', path_to_runner]) | |
| if __name__ == '__main__': | |
| sys.exit(main(sys.argv[1:])) |