Mercurial > treepkg
annotate test/runtests.py @ 171:c0ea6cbb0fd2
Add "--debbuildopts -b" to "pbuilder build" command line to stop
pbuilder from creating a source package. The .changes would otherwise
contain references to that new source package instead of the one we
passed to pbuilder. The checksums for the two source packages would be
different so the .changes file would not match the source package that
treepkg produces.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Mon, 23 Jun 2008 16:12:01 +0000 |
parents | f9f15ee39ed7 |
children |
rev | line source |
---|---|
12
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
1 # Copyright (C) 2007 by Intevation GmbH |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
2 # Authors: |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
3 # Bernhard Herzog <bh@intevation.de> |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
4 # |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
5 # This program is free software under the GPL (>=v2) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
6 # Read the file COPYING coming with the software for details. |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
7 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
8 """ |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
9 Main entry point for the test suite. |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
10 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
11 Just run this file as a python script to execute all tests |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
12 """ |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
13 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
14 import os |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
15 import sys |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
16 import unittest |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
17 import optparse |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
18 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
19 test_dir = os.path.dirname(__file__) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
20 sys.path.append(os.path.join(test_dir, os.pardir)) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
21 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
22 def find_test_modules(dirname, package = None): |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
23 """Return a list the names of the test modules in the directory dirname |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
24 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
25 The return value is a list of names that can be passed to |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
26 unittest.defaultTestLoader.loadTestsFromNames. Each name of the |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
27 list is the name of a pure python module, one for each file in |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
28 dirname whose name starts with 'test' and ends with '.py'. |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
29 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
30 The optional parameter package should be the name of the python |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
31 package whose directory is dirname. If package is given all names |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
32 in the returned list will be prefixed with package and a dot. |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
33 """ |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
34 if package: |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
35 prefix = package + "." |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
36 else: |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
37 prefix = "" |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
38 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
39 suffix = ".py" |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
40 return [prefix + name[:-len(suffix)] |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
41 for name in os.listdir(dirname) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
42 if name.startswith("test") and name.endswith(suffix)] |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
43 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
44 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
45 def main(): |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
46 """Run all the tests in the test suite""" |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
47 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
48 parser = optparse.OptionParser() |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
49 parser.set_defaults(verbosity=1) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
50 parser.add_option("-v", "--verbose", action="store_const", const=2, |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
51 dest="verbosity") |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
52 opts, rest = parser.parse_args() |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
53 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
54 # Build the list of test names. If names were given on the command |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
55 # line, run exactly those. Othwerwise build a default list of |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
56 # names. |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
57 if rest: |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
58 names = rest |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
59 else: |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
60 # All Python files starting with 'test' in the current directory |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
61 # and some directories in Extensions contain test cases. |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
62 # FIXME: It should be possible to run runtests.py even when not in |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
63 # the test directory |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
64 names = find_test_modules(test_dir) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
65 suite = unittest.defaultTestLoader.loadTestsFromNames(names) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
66 runner = unittest.TextTestRunner(verbosity=opts.verbosity) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
67 result = runner.run(suite) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
68 sys.exit(not result.wasSuccessful()) |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
69 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
70 |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
71 if __name__ == "__main__": |
f9f15ee39ed7
New Status class that handles several fields
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
72 main() |