Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / typ / run
blob9bea31fbb4ba704cf9f277d3c1f082b7e351af59
1 #!/usr/bin/env python
3 from __future__ import print_function
5 import argparse
6 import os
7 import subprocess
8 import sys
10 from tools import cov
13 is_python3 = bool(sys.version_info.major == 3)
14 has_python34 = False
15 verbose = False
16 repo_dir = os.path.abspath(os.path.dirname(__file__))
17 path_to_cov = os.path.join(repo_dir, 'tools', 'cov.py')
18 path_to_runner = os.path.join(repo_dir, 'typ', 'runner.py')
21 def call(*args, **kwargs):
22 if verbose:
23 print(' '.join(args[0]))
24 ret = subprocess.call(*args, **kwargs)
25 if ret != 0:
26 sys.exit(ret)
29 def main(argv):
30 parser = argparse.ArgumentParser(prog='run')
31 parser.add_argument('--no3', action='store_true',
32 help='Do not run the tests under Python 3.')
33 parser.add_argument('-v', '--verbose', action='store_true')
34 subps = parser.add_subparsers()
36 subp = subps.add_parser('clean', help='Remove any local files.')
37 subp.set_defaults(func=run_clean)
39 subp = subps.add_parser('coverage',
40 help='Run the tests and report code coverage.')
41 subp.set_defaults(func=run_coverage)
42 cov.add_arguments(subp)
44 subp = subps.add_parser('help',
45 help='Get help on a subcommand.')
46 subp.add_argument(nargs='?', action='store', dest='subcommand',
47 help='The command to get help for.')
48 subp.set_defaults(func=run_help)
50 subp = subps.add_parser('lint',
51 help='run lint over the source')
52 subp.set_defaults(func=run_lint)
54 subp = subps.add_parser('tests',
55 help='run the tests')
56 subp.set_defaults(func=run_tests)
58 args = parser.parse_args(argv)
60 global verbose
61 if args.verbose:
62 verbose = True
63 global has_python34
64 if not args.no3:
65 try:
66 ver = subprocess.check_output(['python3', '--version'])
67 has_python34 = ver.split()[1] >= '3.4'
68 except:
69 pass
70 args.func(args)
73 def run_clean(args):
74 call(['git', 'clean', '-fxd'])
77 def run_coverage(args):
78 if not args.path:
79 args.path = [repo_dir]
80 if not args.source:
81 args.source = [os.path.join(repo_dir, 'typ')]
82 argv = cov.argv_from_args(args)
83 cov_args = [path_to_runner, '-j', '1']
84 print('Running coverage of unit tests for Python 2.7.')
85 call(['python', path_to_cov] + argv + cov_args)
86 if has_python34:
87 print('Running coverage of unit tests for Python 3.4.')
88 call(['python3', path_to_cov] + argv + cov_args)
91 def run_help(args):
92 if args.subcommand:
93 main([args.subcommand, '--help'])
94 main(['--help'])
97 def run_lint(args):
98 call('pylint --rcfile=pylintrc */*.py */*/*.py', shell=True)
101 def run_tests(args):
102 print('Testing running the typ module directly if it is in sys.path.')
103 call(['python', '-m', 'typ', 'typ.tests.main_test.TestMain.test_basic'])
105 print('Testing running the runner directly if nothing is in sys.path.')
106 home_dir = os.environ['HOME']
107 call(['python', path_to_runner, 'typ.tests.main_test.TestMain.test_basic'],
108 cwd=home_dir)
110 # Now run all the tests under Python2 and Python3.
111 print('Running the unit tests under Python 2.')
112 call(['python', path_to_runner])
113 if has_python34:
114 print('Running the unit tests under Python 3.4.')
115 call(['python3', path_to_runner])
118 if __name__ == '__main__':
119 sys.exit(main(sys.argv[1:]))