Mercurial > hgsubversion
comparison tests/run.py @ 610:300b917d23c5
testrunner: use optparse
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Fri, 14 May 2010 17:39:26 +0200 |
parents | 930bb6df19a0 |
children | 58f397523604 |
comparison
equal
deleted
inserted
replaced
609:aafbf0d40dc2 | 610:300b917d23c5 |
---|---|
1 import optparse | |
1 import os | 2 import os |
2 import sys | 3 import sys |
3 import unittest | 4 import unittest |
4 | 5 |
5 import test_util | 6 import test_util |
34 def comprehensive(mod): | 35 def comprehensive(mod): |
35 dir = os.path.basename(os.path.dirname(mod.__file__)) | 36 dir = os.path.basename(os.path.dirname(mod.__file__)) |
36 return dir == 'comprehensive' | 37 return dir == 'comprehensive' |
37 | 38 |
38 if __name__ == '__main__': | 39 if __name__ == '__main__': |
40 description = ("This script runs the hgsubversion tests. If no tests are " | |
41 "specified, all known tests are implied.") | |
42 parser = optparse.OptionParser(usage="%prog [options] [TESTS ...]", | |
43 description=description) | |
44 parser.add_option("-A", "--all", | |
45 dest="comprehensive", action="store_true", default=False, | |
46 help="include slow, but comprehensive tests") | |
47 parser.add_option("-v", "--verbose", | |
48 dest="verbose", action="store_true", default=False, | |
49 help="enable verbose output") | |
39 | 50 |
40 kwargs = {'descriptions': 2} | 51 (options, args) = parser.parse_args() |
41 if '-v' in sys.argv: | 52 |
42 kwargs['descriptions'] = 3 | 53 if options.verbose: |
43 kwargs['verbosity'] = 2 | 54 testargs = { 'descriptions': 3, 'verbosity': 2 } |
55 else: | |
56 testargs = {'descriptions': 2} | |
44 | 57 |
45 # silence output when running outside nose | 58 # silence output when running outside nose |
46 sys.stdout = os.tmpfile() | 59 sys.stdout = os.tmpfile() |
47 | 60 |
48 all = globals() | 61 all = globals() |
49 all = dict((k, v) for (k, v) in all.iteritems() if k.startswith('test_')) | 62 all = dict((k, v) for (k, v) in all.iteritems() if k.startswith('test_')) |
50 del all['test_util'] | 63 del all['test_util'] |
51 | 64 |
52 args = [i for i in sys.argv[1:] if i.startswith('test')] | |
53 args = [i.split('.py')[0].replace('-', '_') for i in args] | 65 args = [i.split('.py')[0].replace('-', '_') for i in args] |
54 | 66 |
55 if not args: | 67 if not args: |
56 check = lambda x: '-A' in sys.argv or not comprehensive(x) | 68 check = lambda x: options.comprehensive or not comprehensive(x) |
57 mods = [m for (n, m) in sorted(all.iteritems()) if check(m)] | 69 mods = [m for (n, m) in sorted(all.iteritems()) if check(m)] |
58 suite = [m.suite() for m in mods] | 70 suite = [m.suite() for m in mods] |
59 else: | 71 else: |
60 suite = [] | 72 suite = [] |
61 for arg in args: | 73 for arg in args: |
62 if arg not in all: | 74 if arg == 'test_util': |
75 continue | |
76 elif arg not in all: | |
63 print >> sys.stderr, 'test module %s not available' % arg | 77 print >> sys.stderr, 'test module %s not available' % arg |
64 else: | 78 else: |
65 suite.append(all[arg].suite()) | 79 suite.append(all[arg].suite()) |
66 | 80 |
67 runner = unittest.TextTestRunner(**kwargs) | 81 runner = unittest.TextTestRunner(**testargs) |
68 result = runner.run(unittest.TestSuite(suite)) | 82 result = runner.run(unittest.TestSuite(suite)) |
69 if not result.wasSuccessful(): | 83 if not result.wasSuccessful(): |
70 sys.exit(1) | 84 sys.exit(1) |