annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
610
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
1 import optparse
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
2 import os
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
3 import sys
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
4 import unittest
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
5
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 338
diff changeset
6 import test_util
169
f1919e1c35bf fetch_command: cancel patching when encountering binary diffs
Patrick Mezard <pmezard@gmail.com>
parents: 168
diff changeset
7 import test_binaryfiles
153
46f6b872c988 tests: Fix some missing suite definitions so that running the full testsuite
Augie Fackler <durin42@gmail.com>
parents: 126
diff changeset
8 import test_diff
174
f80132c5fea5 Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents: 169
diff changeset
9 import test_externals
117
3afe404042a3 Add a disabled test for unrelated branches
Patrick Mezard <pmezard@gmail.com>
parents: 96
diff changeset
10 import test_fetch_branches
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
11 import test_fetch_command
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
12 import test_fetch_command_regexes
125
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents: 117
diff changeset
13 import test_fetch_exec
168
4f26fa049452 authormap: Add tests, fix in stupid mode.
Augie Fackler <durin42@gmail.com>
parents: 155
diff changeset
14 import test_fetch_mappings
67
e319c9168910 hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents: 23
diff changeset
15 import test_fetch_renames
126
24a64fb0e74b run.py: register and develop test_fetch_symlinks
Patrick Mezard <pmezard@gmail.com>
parents: 125
diff changeset
16 import test_fetch_symlinks
88
3b60f223893a fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents: 83
diff changeset
17 import test_fetch_truncated
283
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 235
diff changeset
18 import test_pull
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
19 import test_push_command
83
6c9b7cf1c5aa push_cmd: delete empty svn directories, refactor directory creation
Patrick Mezard <pmezard@gmail.com>
parents: 67
diff changeset
20 import test_push_renames
6c9b7cf1c5aa push_cmd: delete empty svn directories, refactor directory creation
Patrick Mezard <pmezard@gmail.com>
parents: 67
diff changeset
21 import test_push_dirs
96
9b5e528f67f8 Add a test to check EOLs are correctly converted
Patrick Mezard <pmezard@gmail.com>
parents: 88
diff changeset
22 import test_push_eol
155
ba801f44d240 utility_commands: Implement rebuildmeta so that metadata can be rebuilt.
Augie Fackler <durin42@gmail.com>
parents: 153
diff changeset
23 import test_rebuildmeta
577
930bb6df19a0 tests: make sure single dir clone tests get run by non-nose users
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 571
diff changeset
24 import test_single_dir_clone
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 338
diff changeset
25 import test_svnwrap
23
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents: 17
diff changeset
26 import test_tags
153
46f6b872c988 tests: Fix some missing suite definitions so that running the full testsuite
Augie Fackler <durin42@gmail.com>
parents: 126
diff changeset
27 import test_utility_commands
235
2969a20e0eef Add support for user:pass@url repositories to be hg-like
Daniel Tang <dytang@cs.purdue.edu>
parents: 174
diff changeset
28 import test_urls
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
29
426
72e63999722f tests: make comprehensive tests work properly with nose and run.py
Augie Fackler <durin42@gmail.com>
parents: 395
diff changeset
30 sys.path.append(os.path.join(os.path.dirname(__file__), 'comprehensive'))
72e63999722f tests: make comprehensive tests work properly with nose and run.py
Augie Fackler <durin42@gmail.com>
parents: 395
diff changeset
31
72e63999722f tests: make comprehensive tests work properly with nose and run.py
Augie Fackler <durin42@gmail.com>
parents: 395
diff changeset
32 import test_stupid_pull
72e63999722f tests: make comprehensive tests work properly with nose and run.py
Augie Fackler <durin42@gmail.com>
parents: 395
diff changeset
33 import test_verify
394
d70c8e45cb9e tests: add -A option to run.py for running comprehensive tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 393
diff changeset
34
d70c8e45cb9e tests: add -A option to run.py for running comprehensive tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 393
diff changeset
35 def comprehensive(mod):
d70c8e45cb9e tests: add -A option to run.py for running comprehensive tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 393
diff changeset
36 dir = os.path.basename(os.path.dirname(mod.__file__))
d70c8e45cb9e tests: add -A option to run.py for running comprehensive tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 393
diff changeset
37 return dir == 'comprehensive'
d70c8e45cb9e tests: add -A option to run.py for running comprehensive tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 393
diff changeset
38
16
48a44546c12f Add a basic system for running the hgsubversion tests (although not the svnwrap ones) without requiring Nose. Nose is still the recommended way to run the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
39 if __name__ == '__main__':
610
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
40 description = ("This script runs the hgsubversion tests. If no tests are "
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
41 "specified, all known tests are implied.")
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
42 parser = optparse.OptionParser(usage="%prog [options] [TESTS ...]",
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
43 description=description)
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
44 parser.add_option("-A", "--all",
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
45 dest="comprehensive", action="store_true", default=False,
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
46 help="include slow, but comprehensive tests")
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
47 parser.add_option("-v", "--verbose",
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
48 dest="verbose", action="store_true", default=False,
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
49 help="enable verbose output")
357
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
50
610
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
51 (options, args) = parser.parse_args()
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
52
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
53 if options.verbose:
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
54 testargs = { 'descriptions': 3, 'verbosity': 2 }
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
55 else:
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
56 testargs = {'descriptions': 2}
303
f423a8780832 Minor tweaks to how the tests are run.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 174
diff changeset
57
338
47c0110046dc tests: silence tests when using run.py
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 337
diff changeset
58 # silence output when running outside nose
47c0110046dc tests: silence tests when using run.py
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 337
diff changeset
59 sys.stdout = os.tmpfile()
47c0110046dc tests: silence tests when using run.py
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 337
diff changeset
60
357
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
61 all = globals()
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
62 all = dict((k, v) for (k, v) in all.iteritems() if k.startswith('test_'))
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
63 del all['test_util']
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
64
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
65 args = [i.split('.py')[0].replace('-', '_') for i in args]
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
66
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
67 if not args:
610
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
68 check = lambda x: options.comprehensive or not comprehensive(x)
394
d70c8e45cb9e tests: add -A option to run.py for running comprehensive tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 393
diff changeset
69 mods = [m for (n, m) in sorted(all.iteritems()) if check(m)]
d70c8e45cb9e tests: add -A option to run.py for running comprehensive tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 393
diff changeset
70 suite = [m.suite() for m in mods]
357
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
71 else:
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
72 suite = []
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
73 for arg in args:
610
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
74 if arg == 'test_util':
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
75 continue
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
76 elif arg not in all:
393
e857e5cfc10f tests: send warning to stderr instead of redirected stdout
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 357
diff changeset
77 print >> sys.stderr, 'test module %s not available' % arg
357
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
78 else:
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
79 suite.append(all[arg].suite())
d19843ac13c9 Allow passing in module arguments to the test runs.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 347
diff changeset
80
610
300b917d23c5 testrunner: use optparse
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 577
diff changeset
81 runner = unittest.TextTestRunner(**testargs)
571
f3e5ef8760cb tests.run: exit nonzero if tests did not pass
Augie Fackler <durin42@gmail.com>
parents: 426
diff changeset
82 result = runner.run(unittest.TestSuite(suite))
f3e5ef8760cb tests.run: exit nonzero if tests did not pass
Augie Fackler <durin42@gmail.com>
parents: 426
diff changeset
83 if not result.wasSuccessful():
f3e5ef8760cb tests.run: exit nonzero if tests did not pass
Augie Fackler <durin42@gmail.com>
parents: 426
diff changeset
84 sys.exit(1)