Mercurial > hg
annotate tests/run-tests.py @ 9410:1c83938b6a8e
extensions: load and configure extensions in well-defined phases
Extensions are now loaded with a call-graph like this:
dispatch._dispatch
extensions.loadall
extensions.load
# add foo module to extensions._extensions
extensions.load
# add bar module to extensions._extensions
foo.uisetup(ui)
bar.uisetup(ui)
foo.extsetup()
bar.extsetup()
commands.table.update(foo.cmdtable)
commands.table.update(bar.cmdtable)
hg.repository
foo.reposetup(ui, repo)
bar.reposetup(ui, repo)
The uisetup calls could easily be moved out to dispatch._dispatch, but
have been kept in extensions.loadall since at least TortoiseHg calls
extensions.loadall and expects it to call uisetup.
The extensions.load function called uisetup. It now has an unused ui
argument which has been kept for backwards compatibility.
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Sat, 29 Aug 2009 00:29:16 +0200 |
parents | 70bf7f853adc |
children | 25858f9e65e8 |
rev | line source |
---|---|
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
2 # |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
3 # run-tests.py - Run a set of tests on Mercurial |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
4 # |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
5 # Copyright 2006 Matt Mackall <mpm@selenic.com> |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
6 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8161
diff
changeset
|
7 # This software may be used and distributed according to the terms of the |
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8161
diff
changeset
|
8 # GNU General Public License version 2, incorporated herein by reference. |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
9 |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
10 # Modifying this script is tricky because it has many modes: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
11 # - serial (default) vs parallel (-jN, N > 1) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
12 # - no coverage (default) vs coverage (-c, -C, -s) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
13 # - temp install (default) vs specific hg script (--with-hg, --local) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
14 # - tests are a mix of shell scripts and Python scripts |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
15 # |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
16 # If you change this script, it is recommended that you ensure you |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
17 # haven't broken it by running it in various modes with a representative |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
18 # sample of test scripts. For example: |
8843
eb7b247a98ea
kill trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8724
diff
changeset
|
19 # |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
20 # 1) serial, no coverage, temp install: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
21 # ./run-tests.py test-s* |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
22 # 2) serial, no coverage, local hg: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
23 # ./run-tests.py --local test-s* |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
24 # 3) serial, coverage, temp install: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
25 # ./run-tests.py -c test-s* |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
26 # 4) serial, coverage, local hg: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
27 # ./run-tests.py -c --local test-s* # unsupported |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
28 # 5) parallel, no coverage, temp install: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
29 # ./run-tests.py -j2 test-s* |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
30 # 6) parallel, no coverage, local hg: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
31 # ./run-tests.py -j2 --local test-s* |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
32 # 7) parallel, coverage, temp install: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
33 # ./run-tests.py -j2 -c test-s* # currently broken |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
34 # 8) parallel, coverage, local install |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
35 # ./run-tests.py -j2 -c --local test-s* # unsupported (and broken) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
36 # |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
37 # (You could use any subset of the tests: test-s* happens to match |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
38 # enough that it's worth doing parallel runs, few enough that it |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
39 # completes fairly quickly, includes both shell and Python scripts, and |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
40 # includes some scripts that run daemon processes.) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
41 |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
42 import difflib |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
43 import errno |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
44 import optparse |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
45 import os |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
46 import subprocess |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
47 import shutil |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
48 import signal |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
49 import sys |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
50 import tempfile |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
51 import time |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
52 |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
53 closefds = os.name == 'posix' |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
54 def Popen4(cmd, bufsize=-1): |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
55 p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
56 close_fds=closefds, |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
57 stdin=subprocess.PIPE, stdout=subprocess.PIPE, |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
58 stderr=subprocess.STDOUT) |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
59 p.fromchild = p.stdout |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
60 p.tochild = p.stdin |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
61 p.childerr = p.stderr |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
62 return p |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
63 |
5685
57d29a45ffbc
Use skipped: instead of hghave: for skipping tests, use this in test-merge-types
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5524
diff
changeset
|
64 # reserved exit code to skip test (used by hghave) |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
65 SKIPPED_STATUS = 80 |
5685
57d29a45ffbc
Use skipped: instead of hghave: for skipping tests, use this in test-merge-types
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5524
diff
changeset
|
66 SKIPPED_PREFIX = 'skipped: ' |
8060
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
67 FAILED_PREFIX = 'hghave check failed: ' |
8096
a110d7a20f3f
run-tests: upper-case global PYTHON variable
Martin Geisler <mg@lazybytes.net>
parents:
8095
diff
changeset
|
68 PYTHON = sys.executable |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
69 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
70 requiredtools = ["python", "diff", "grep", "unzip", "gunzip", "bunzip2", "sed"] |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
71 |
6366
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
72 defaults = { |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
73 'jobs': ('HGTEST_JOBS', 1), |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
74 'timeout': ('HGTEST_TIMEOUT', 180), |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
75 'port': ('HGTEST_PORT', 20059), |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
76 } |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
77 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
78 def parseargs(): |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
79 parser = optparse.OptionParser("%prog [options] [tests]") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
80 parser.add_option("-C", "--annotate", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
81 help="output files annotated with coverage") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
82 parser.add_option("--child", type="int", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
83 help="run as child process, summary to given fd") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
84 parser.add_option("-c", "--cover", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
85 help="print a test coverage report") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
86 parser.add_option("-f", "--first", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
87 help="exit on the first test failure") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
88 parser.add_option("-i", "--interactive", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
89 help="prompt to accept changed output") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
90 parser.add_option("-j", "--jobs", type="int", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
91 help="number of jobs to run in parallel" |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
92 " (default: $%s or %d)" % defaults['jobs']) |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
93 parser.add_option("--keep-tmpdir", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
94 help="keep temporary directory after running tests" |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
95 " (best used with --tmpdir)") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
96 parser.add_option("-R", "--restart", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
97 help="restart at last error") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
98 parser.add_option("-p", "--port", type="int", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
99 help="port on which servers should listen" |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
100 " (default: $%s or %d)" % defaults['port']) |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
101 parser.add_option("-r", "--retest", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
102 help="retest failed tests") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
103 parser.add_option("-s", "--cover_stdlib", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
104 help="print a test coverage report inc. standard libraries") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
105 parser.add_option("-t", "--timeout", type="int", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
106 help="kill errant tests after TIMEOUT seconds" |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
107 " (default: $%s or %d)" % defaults['timeout']) |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
108 parser.add_option("--tmpdir", type="string", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
109 help="run tests in the given temporary directory") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
110 parser.add_option("-v", "--verbose", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
111 help="output verbose messages") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
112 parser.add_option("-n", "--nodiff", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
113 help="skip showing test changes") |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
114 parser.add_option("--with-hg", type="string", |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
115 metavar="HG", |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
116 help="test using specified hg script rather than a " |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
117 "temporary installation") |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
118 parser.add_option("--local", action="store_true", |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
119 help="shortcut for --with-hg=<testdir>/../hg") |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
120 parser.add_option("--pure", action="store_true", |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
121 help="use pure Python code instead of C extensions") |
9028
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
122 parser.add_option("-3", "--py3k-warnings", action="store_true", |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
123 help="enable Py3k warnings on Python 2.6+") |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
124 |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
125 for option, default in defaults.items(): |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
126 defaults[option] = int(os.environ.get(*default)) |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
127 parser.set_defaults(**defaults) |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
128 (options, args) = parser.parse_args() |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
129 |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
130 if options.with_hg: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
131 if not (os.path.isfile(options.with_hg) and |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
132 os.access(options.with_hg, os.X_OK)): |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
133 parser.error('--with-hg must specify an executable hg script') |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
134 if not os.path.basename(options.with_hg) == 'hg': |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
135 sys.stderr.write('warning: --with-hg should specify an hg script') |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
136 if options.local: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
137 testdir = os.path.dirname(os.path.realpath(sys.argv[0])) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
138 hgbin = os.path.join(os.path.dirname(testdir), 'hg') |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
139 if not os.access(hgbin, os.X_OK): |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
140 parser.error('--local specified, but %r not found or not executable' |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
141 % hgbin) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
142 options.with_hg = hgbin |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
143 |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
144 options.anycoverage = (options.cover or |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
145 options.cover_stdlib or |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
146 options.annotate) |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
147 |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
148 if options.anycoverage and options.with_hg: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
149 # I'm not sure if this is a fundamental limitation or just a |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
150 # bug. But I don't want to waste people's time and energy doing |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
151 # test runs that don't give the results they want. |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
152 parser.error("sorry, coverage options do not work when --with-hg " |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
153 "or --local specified") |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
154 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
155 global vlog |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
156 if options.verbose: |
8671
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
157 if options.jobs > 1 or options.child is not None: |
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
158 pid = "[%d]" % os.getpid() |
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
159 else: |
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
160 pid = None |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
161 def vlog(*msg): |
8671
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
162 if pid: |
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
163 print pid, |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
164 for m in msg: |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
165 print m, |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
166 print |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
167 else: |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
168 vlog = lambda *msg: None |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
169 |
9394
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
170 if options.tmpdir: |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
171 options.tmpdir = os.path.expanduser(options.tmpdir) |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
172 try: |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
173 os.makedirs(options.tmpdir) |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
174 except OSError, err: |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
175 if err.errno != errno.EEXIST: |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
176 raise |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
177 |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
178 if options.jobs < 1: |
9408
70bf7f853adc
run-tests: standardize on --foo instead of -f/--foo
Martin Geisler <mg@lazybytes.net>
parents:
9407
diff
changeset
|
179 parser.error('--jobs must be positive') |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
180 if options.interactive and options.jobs > 1: |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
181 print '(--interactive overrides --jobs)' |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
182 options.jobs = 1 |
9028
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
183 if options.py3k_warnings: |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
184 if sys.version_info[:2] < (2, 6) or sys.version_info[:2] >= (3, 0): |
9408
70bf7f853adc
run-tests: standardize on --foo instead of -f/--foo
Martin Geisler <mg@lazybytes.net>
parents:
9407
diff
changeset
|
185 parser.error('--py3k-warnings can only be used on Python 2.6+') |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
186 |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
187 return (options, args) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
188 |
5800
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
189 def rename(src, dst): |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
190 """Like os.rename(), trade atomicity and opened files friendliness |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
191 for existing destination support. |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
192 """ |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
193 shutil.copy(src, dst) |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
194 os.remove(src) |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
195 |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
196 def splitnewlines(text): |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
197 '''like str.splitlines, but only split on newlines. |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
198 keep line endings.''' |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
199 i = 0 |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
200 lines = [] |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
201 while True: |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
202 n = text.find('\n', i) |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
203 if n == -1: |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
204 last = text[i:] |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
205 if last: |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
206 lines.append(last) |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
207 return lines |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
208 lines.append(text[i:n+1]) |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
209 i = n + 1 |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
210 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
211 def parsehghaveoutput(lines): |
8060
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
212 '''Parse hghave log lines. |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
213 Return tuple of lists (missing, failed): |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
214 * the missing/unknown features |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
215 * the features for which existence check failed''' |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
216 missing = [] |
8060
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
217 failed = [] |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
218 for line in lines: |
8060
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
219 if line.startswith(SKIPPED_PREFIX): |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
220 line = line.splitlines()[0] |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
221 missing.append(line[len(SKIPPED_PREFIX):]) |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
222 elif line.startswith(FAILED_PREFIX): |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
223 line = line.splitlines()[0] |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
224 failed.append(line[len(FAILED_PREFIX):]) |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
225 |
8060
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
226 return missing, failed |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
227 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
228 def showdiff(expected, output): |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
229 for line in difflib.unified_diff(expected, output, |
2409
4068d6a7a99e
Fix diff header (line endings) for failed test output in run-tests.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2408
diff
changeset
|
230 "Expected output", "Test output"): |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
231 sys.stdout.write(line) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
232 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
233 def findprogram(program): |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
234 """Search PATH for a executable program""" |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
235 for p in os.environ.get('PATH', os.defpath).split(os.pathsep): |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
236 name = os.path.join(p, program) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
237 if os.access(name, os.X_OK): |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
238 return name |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
239 return None |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
240 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
241 def checktools(): |
2133
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
242 # Before we go any further, check for pre-requisite tools |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
243 # stuff from coreutils (cat, rm, etc) are not tested |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
244 for p in requiredtools: |
2133
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
245 if os.name == 'nt': |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
246 p += '.exe' |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
247 found = findprogram(p) |
2133
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
248 if found: |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
249 vlog("# Found prerequisite", p, "at", found) |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
250 else: |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
251 print "WARNING: Did not find prerequisite tool: "+p |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
252 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
253 def cleanup(options): |
6208
c88b9e597588
tests: add --keep-tmp to run-tests.py to debug test environment
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6004
diff
changeset
|
254 if not options.keep_tmpdir: |
8671
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
255 vlog("# Cleaning up HGTMP", HGTMP) |
6208
c88b9e597588
tests: add --keep-tmp to run-tests.py to debug test environment
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6004
diff
changeset
|
256 shutil.rmtree(HGTMP, True) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
257 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
258 def usecorrectpython(): |
2570
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
259 # some tests run python interpreter. they must use same |
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
260 # interpreter we use or bad things will happen. |
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
261 exedir, exename = os.path.split(sys.executable) |
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
262 if exename == 'python': |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
263 path = findprogram('python') |
2570
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
264 if os.path.dirname(path) == exedir: |
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
265 return |
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
266 vlog('# Making python executable in test path use correct Python') |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
267 mypython = os.path.join(BINDIR, 'python') |
2570
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
268 try: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
269 os.symlink(sys.executable, mypython) |
2570
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
270 except AttributeError: |
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
271 # windows fallback |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
272 shutil.copyfile(sys.executable, mypython) |
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
273 shutil.copymode(sys.executable, mypython) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2989
diff
changeset
|
274 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
275 def installhg(options): |
2133
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
276 vlog("# Performing temporary installation of HG") |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
277 installerrs = os.path.join("tests", "install.err") |
7723
a343cd25e425
run-tests: add --pure flag for using pure Python modules
Martin Geisler <mg@daimi.au.dk>
parents:
7529
diff
changeset
|
278 pure = options.pure and "--pure" or "" |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
279 |
5267
b817d17c7ee5
Make run-tests.py work when invoked outside of tests.
Brendan Cully <brendan@kublai.com>
parents:
5251
diff
changeset
|
280 # Run installer in hg root |
8943
09ff905cdc86
run-tests: use os.path.realpath() to find hg's setup.py.
Greg Ward <greg-hg@gerg.ca>
parents:
8843
diff
changeset
|
281 script = os.path.realpath(sys.argv[0]) |
09ff905cdc86
run-tests: use os.path.realpath() to find hg's setup.py.
Greg Ward <greg-hg@gerg.ca>
parents:
8843
diff
changeset
|
282 hgroot = os.path.dirname(os.path.dirname(script)) |
09ff905cdc86
run-tests: use os.path.realpath() to find hg's setup.py.
Greg Ward <greg-hg@gerg.ca>
parents:
8843
diff
changeset
|
283 os.chdir(hgroot) |
7723
a343cd25e425
run-tests: add --pure flag for using pure Python modules
Martin Geisler <mg@daimi.au.dk>
parents:
7529
diff
changeset
|
284 cmd = ('%s setup.py %s clean --all' |
7139
bcbba59e233d
run-tests.py: use --prefix instead of --home
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7018
diff
changeset
|
285 ' install --force --prefix="%s" --install-lib="%s"' |
5189
1843098e665a
run-tests.py: pass --install-scripts to setup.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5081
diff
changeset
|
286 ' --install-scripts="%s" >%s 2>&1' |
7723
a343cd25e425
run-tests: add --pure flag for using pure Python modules
Martin Geisler <mg@daimi.au.dk>
parents:
7529
diff
changeset
|
287 % (sys.executable, pure, INST, PYTHONDIR, BINDIR, installerrs)) |
2133
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
288 vlog("# Running", cmd) |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
289 if os.system(cmd) == 0: |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
290 if not options.verbose: |
2133
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
291 os.remove(installerrs) |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
292 else: |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
293 f = open(installerrs) |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
294 for line in f: |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
295 print line, |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
296 f.close() |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
297 sys.exit(1) |
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
298 os.chdir(TESTDIR) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
299 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
300 usecorrectpython() |
2570
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
301 |
7172
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
302 vlog("# Installing dummy diffstat") |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
303 f = open(os.path.join(BINDIR, 'diffstat'), 'w') |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
304 f.write('#!' + sys.executable + '\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
305 'import sys\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
306 'files = 0\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
307 'for line in sys.stdin:\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
308 ' if line.startswith("diff "):\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
309 ' files += 1\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
310 'sys.stdout.write("files patched: %d\\n" % files)\n') |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
311 f.close() |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
312 os.chmod(os.path.join(BINDIR, 'diffstat'), 0700) |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
313 |
9028
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
314 if options.py3k_warnings and not options.anycoverage: |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
315 vlog("# Updating hg command to enable Py3k Warnings switch") |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
316 f = open(os.path.join(BINDIR, 'hg'), 'r') |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
317 lines = [line.rstrip() for line in f] |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
318 lines[0] += ' -3' |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
319 f.close() |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
320 f = open(os.path.join(BINDIR, 'hg'), 'w') |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
321 for line in lines: |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
322 f.write(line + '\n') |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
323 f.close() |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
324 |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
325 if options.anycoverage: |
2144
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
326 vlog("# Installing coverage wrapper") |
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
327 os.environ['COVERAGE_FILE'] = COVERAGE_FILE |
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
328 if os.path.exists(COVERAGE_FILE): |
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
329 os.unlink(COVERAGE_FILE) |
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
330 # Create a wrapper script to invoke hg via coverage.py |
2146
eb1ed410aa34
run-tests.py: remove trailing white space
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2145
diff
changeset
|
331 os.rename(os.path.join(BINDIR, "hg"), os.path.join(BINDIR, "_hg.py")) |
2144
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
332 f = open(os.path.join(BINDIR, 'hg'), 'w') |
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
333 f.write('#!' + sys.executable + '\n') |
4633
ff7253a0d1da
Cleanup of whitespace, indentation and line continuation.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4529
diff
changeset
|
334 f.write('import sys, os; os.execv(sys.executable, [sys.executable, ' |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
335 '"%s", "-x", "-p", "%s"] + sys.argv[1:])\n' % |
4633
ff7253a0d1da
Cleanup of whitespace, indentation and line continuation.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4529
diff
changeset
|
336 (os.path.join(TESTDIR, 'coverage.py'), |
ff7253a0d1da
Cleanup of whitespace, indentation and line continuation.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4529
diff
changeset
|
337 os.path.join(BINDIR, '_hg.py'))) |
2144
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
338 f.close() |
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
339 os.chmod(os.path.join(BINDIR, 'hg'), 0700) |
8092
c49578c5122f
run-tests: move _hgpath() up so it's not in the middle of the main program.
Greg Ward <greg-hg@gerg.ca>
parents:
8091
diff
changeset
|
340 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
341 def outputcoverage(options): |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
342 |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
343 vlog('# Producing coverage report') |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
344 os.chdir(PYTHONDIR) |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
345 |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
346 def covrun(*args): |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
347 start = sys.executable, os.path.join(TESTDIR, 'coverage.py') |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
348 cmd = '"%s" "%s" %s' % (start[0], start[1], ' '.join(args)) |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
349 vlog('# Running: %s' % cmd) |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
350 os.system(cmd) |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
351 |
2145
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
352 omit = [BINDIR, TESTDIR, PYTHONDIR] |
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
353 if not options.cover_stdlib: |
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
354 # Exclude as system paths (ignoring empty strings seen on win) |
2146
eb1ed410aa34
run-tests.py: remove trailing white space
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2145
diff
changeset
|
355 omit += [x for x in sys.path if x != ''] |
2145
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
356 omit = ','.join(omit) |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
357 |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
358 covrun('-c') # combine from parallel processes |
8696
73aa0510740d
tests: delete parallel coverage files after combining
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8687
diff
changeset
|
359 for fn in os.listdir(TESTDIR): |
73aa0510740d
tests: delete parallel coverage files after combining
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8687
diff
changeset
|
360 if fn.startswith('.coverage.'): |
73aa0510740d
tests: delete parallel coverage files after combining
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8687
diff
changeset
|
361 os.unlink(os.path.join(TESTDIR, fn)) |
73aa0510740d
tests: delete parallel coverage files after combining
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8687
diff
changeset
|
362 |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
363 covrun('-i', '-r', '"--omit=%s"' % omit) # report |
2145
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
364 if options.annotate: |
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
365 adir = os.path.join(TESTDIR, 'annotated') |
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
366 if not os.path.isdir(adir): |
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
367 os.mkdir(adir) |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
368 covrun('-i', '-a', '"--directory=%s"' % adir, '"--omit=%s"' % omit) |
2144
d3bddedfdbd0
Add code coverage to the python version of run-tests (inc. annotation)
Stephen Darnell <stephen@darnell.plus.com>
parents:
2133
diff
changeset
|
369 |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
370 class Timeout(Exception): |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
371 pass |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
372 |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
373 def alarmed(signum, frame): |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
374 raise Timeout |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
375 |
8116
c11636f0609e
run-tests: fix error when timeout occurs
Simon Heimberg <simohe@besonet.ch>
parents:
8107
diff
changeset
|
376 def run(cmd, options): |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
377 """Run command in a sub-process, capturing the output (stdout and stderr). |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
378 Return the exist code, and output.""" |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
379 # TODO: Use subprocess.Popen if we're running on Python 2.4 |
7792
cf427b04d5c0
tests: use same popen strategy for jython as for nt
Frank Wierzbicki <fwierzbicki@gmail.com>
parents:
7785
diff
changeset
|
380 if os.name == 'nt' or sys.platform.startswith('java'): |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
381 tochild, fromchild = os.popen4(cmd) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
382 tochild.close() |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
383 output = fromchild.read() |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
384 ret = fromchild.close() |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
385 if ret == None: |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
386 ret = 0 |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
387 else: |
7813
076401cf2b63
run-tests.py: avoid using popen2.Popen4 - use subprocess instead
Mads Kiilerich <mads@kiilerich.com>
parents:
7792
diff
changeset
|
388 proc = Popen4(cmd) |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
389 try: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
390 output = '' |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
391 proc.tochild.close() |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
392 output = proc.fromchild.read() |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
393 ret = proc.wait() |
4880
6403f948bd6b
run-tests: extract correct status when script terminates with exit
Patrick Mezard <pmezard@gmail.com>
parents:
4633
diff
changeset
|
394 if os.WIFEXITED(ret): |
6403f948bd6b
run-tests: extract correct status when script terminates with exit
Patrick Mezard <pmezard@gmail.com>
parents:
4633
diff
changeset
|
395 ret = os.WEXITSTATUS(ret) |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
396 except Timeout: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
397 vlog('# Process %d timed out - killing it' % proc.pid) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
398 os.kill(proc.pid, signal.SIGTERM) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
399 ret = proc.wait() |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
400 if ret == 0: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
401 ret = signal.SIGTERM << 8 |
5078
d27ed83289ee
Add message to test output if a test is aborted due to a timeout.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4881
diff
changeset
|
402 output += ("\n### Abort: timeout after %d seconds.\n" |
d27ed83289ee
Add message to test output if a test is aborted due to a timeout.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4881
diff
changeset
|
403 % options.timeout) |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
404 return ret, splitnewlines(output) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
405 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
406 def runone(options, test, skips, fails): |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
407 '''tristate output: |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
408 None -> skipped |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
409 True -> passed |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
410 False -> failed''' |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
411 |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
412 def skip(msg): |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
413 if not options.verbose: |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
414 skips.append((test, msg)) |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
415 else: |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
416 print "\nSkipping %s: %s" % (test, msg) |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
417 return None |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
418 |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
419 def fail(msg): |
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
420 fails.append((test, msg)) |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
421 if not options.nodiff: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
422 print "\nERROR: %s %s" % (test, msg) |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
423 return None |
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
424 |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
425 vlog("# Test", test) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
426 |
2989
3091b1153e2c
Clear contents of global hgrc for tests before running each test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2710
diff
changeset
|
427 # create a fresh hgrc |
9031
3b76321aa0de
compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents:
9028
diff
changeset
|
428 hgrc = open(HGRCPATH, 'w+') |
4529
860478527568
run-tests.py: set ui.slash = True
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4387
diff
changeset
|
429 hgrc.write('[ui]\n') |
860478527568
run-tests.py: set ui.slash = True
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4387
diff
changeset
|
430 hgrc.write('slash = True\n') |
5524
453acf64f71f
run-tests.py: add a default --date "0 0" argument to commit et al
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5518
diff
changeset
|
431 hgrc.write('[defaults]\n') |
453acf64f71f
run-tests.py: add a default --date "0 0" argument to commit et al
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5518
diff
changeset
|
432 hgrc.write('backout = -d "0 0"\n') |
453acf64f71f
run-tests.py: add a default --date "0 0" argument to commit et al
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5518
diff
changeset
|
433 hgrc.write('commit = -d "0 0"\n') |
453acf64f71f
run-tests.py: add a default --date "0 0" argument to commit et al
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5518
diff
changeset
|
434 hgrc.write('tag = -d "0 0"\n') |
2989
3091b1153e2c
Clear contents of global hgrc for tests before running each test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2710
diff
changeset
|
435 hgrc.close() |
3091b1153e2c
Clear contents of global hgrc for tests before running each test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2710
diff
changeset
|
436 |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
437 err = os.path.join(TESTDIR, test+".err") |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
438 ref = os.path.join(TESTDIR, test+".out") |
4320
f9b61e0fc929
run-tests.py: small cleanup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4319
diff
changeset
|
439 testpath = os.path.join(TESTDIR, test) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
440 |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
441 if os.path.exists(err): |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
442 os.remove(err) # Remove any previous output files |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
443 |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
444 # Make a tmp subdirectory to work in |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
445 tmpd = os.path.join(HGTMP, test) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
446 os.mkdir(tmpd) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
447 os.chdir(tmpd) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
448 |
4321
99184c6fd88f
run-tests.py: use coverage.py with "#!/usr/bin/env python" tests
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4320
diff
changeset
|
449 try: |
99184c6fd88f
run-tests.py: use coverage.py with "#!/usr/bin/env python" tests
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4320
diff
changeset
|
450 tf = open(testpath) |
99184c6fd88f
run-tests.py: use coverage.py with "#!/usr/bin/env python" tests
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4320
diff
changeset
|
451 firstline = tf.readline().rstrip() |
99184c6fd88f
run-tests.py: use coverage.py with "#!/usr/bin/env python" tests
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4320
diff
changeset
|
452 tf.close() |
99184c6fd88f
run-tests.py: use coverage.py with "#!/usr/bin/env python" tests
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4320
diff
changeset
|
453 except: |
99184c6fd88f
run-tests.py: use coverage.py with "#!/usr/bin/env python" tests
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4320
diff
changeset
|
454 firstline = '' |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
455 lctest = test.lower() |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
456 |
4321
99184c6fd88f
run-tests.py: use coverage.py with "#!/usr/bin/env python" tests
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4320
diff
changeset
|
457 if lctest.endswith('.py') or firstline == '#!/usr/bin/env python': |
9028
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
458 py3kswitch = options.py3k_warnings and ' -3' or '' |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
459 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, testpath) |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
460 elif lctest.endswith('.bat'): |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
461 # do not run batch scripts on non-windows |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
462 if os.name != 'nt': |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
463 return skip("batch script") |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
464 # To reliably get the error code from batch files on WinXP, |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
465 # the "cmd /c call" prefix is needed. Grrr |
4320
f9b61e0fc929
run-tests.py: small cleanup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4319
diff
changeset
|
466 cmd = 'cmd /c call "%s"' % testpath |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
467 else: |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
468 # do not run shell scripts on windows |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
469 if os.name == 'nt': |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
470 return skip("shell script") |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
471 # do not try to run non-executable programs |
7144
9364c3304ca2
run-tests.py: report missing file as an error
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7139
diff
changeset
|
472 if not os.path.exists(testpath): |
9364c3304ca2
run-tests.py: report missing file as an error
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7139
diff
changeset
|
473 return fail("does not exist") |
9364c3304ca2
run-tests.py: report missing file as an error
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7139
diff
changeset
|
474 elif not os.access(testpath, os.X_OK): |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
475 return skip("not executable") |
4320
f9b61e0fc929
run-tests.py: small cleanup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4319
diff
changeset
|
476 cmd = '"%s"' % testpath |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
477 |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
478 if options.timeout > 0: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
479 signal.alarm(options.timeout) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
480 |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
481 vlog("# Running", cmd) |
8116
c11636f0609e
run-tests: fix error when timeout occurs
Simon Heimberg <simohe@besonet.ch>
parents:
8107
diff
changeset
|
482 ret, out = run(cmd, options) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
483 vlog("# Ret was:", ret) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
484 |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
485 if options.timeout > 0: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
486 signal.alarm(0) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
487 |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
488 mark = '.' |
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
489 |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
490 skipped = (ret == SKIPPED_STATUS) |
2213
6f76a479ae51
run-tests.py must print changed test output no matter what exit code is.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2183
diff
changeset
|
491 # If reference output file exists, check test output against it |
6f76a479ae51
run-tests.py must print changed test output no matter what exit code is.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2183
diff
changeset
|
492 if os.path.exists(ref): |
6f76a479ae51
run-tests.py must print changed test output no matter what exit code is.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2183
diff
changeset
|
493 f = open(ref, "r") |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
494 refout = splitnewlines(f.read()) |
2213
6f76a479ae51
run-tests.py must print changed test output no matter what exit code is.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2183
diff
changeset
|
495 f.close() |
2246
3fd603eb6add
run-tests.py: print diff if reference output not existing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2213
diff
changeset
|
496 else: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
497 refout = [] |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
498 if skipped: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
499 mark = 's' |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
500 missing, failed = parsehghaveoutput(out) |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
501 if not missing: |
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
502 missing = ['irrelevant'] |
8060
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
503 if failed: |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
504 fail("hghave failed checking for %s" % failed[-1]) |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
505 skipped = False |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
506 else: |
84d0fe34427b
run-tests: detect when hghave fails to check for a feature and fail test
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
7813
diff
changeset
|
507 skip(missing[-1]) |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
508 elif out != refout: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
509 mark = '!' |
6383
38485d45f947
run-tests.py: Only one fail message when output changed and error code.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6366
diff
changeset
|
510 if ret: |
38485d45f947
run-tests.py: Only one fail message when output changed and error code.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6366
diff
changeset
|
511 fail("output changed and returned error code %d" % ret) |
38485d45f947
run-tests.py: Only one fail message when output changed and error code.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6366
diff
changeset
|
512 else: |
38485d45f947
run-tests.py: Only one fail message when output changed and error code.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6366
diff
changeset
|
513 fail("output changed") |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
514 if not options.nodiff: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
515 showdiff(refout, out) |
6383
38485d45f947
run-tests.py: Only one fail message when output changed and error code.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6366
diff
changeset
|
516 ret = 1 |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
517 elif ret: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
518 mark = '!' |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
519 fail("returned error code %d" % ret) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
520 |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
521 if not options.verbose: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
522 sys.stdout.write(mark) |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
523 sys.stdout.flush() |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
524 |
5081
ea7b982b6c08
Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5078
diff
changeset
|
525 if ret != 0 and not skipped: |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
526 # Save errors to a file for diagnosis |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
527 f = open(err, "wb") |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
528 for line in out: |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
529 f.write(line) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
530 f.close() |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
531 |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
532 # Kill off any leftover daemon processes |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
533 try: |
9031
3b76321aa0de
compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents:
9028
diff
changeset
|
534 fp = open(DAEMON_PIDS) |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
535 for line in fp: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
536 try: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
537 pid = int(line) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
538 except ValueError: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
539 continue |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
540 try: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
541 os.kill(pid, 0) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
542 vlog('# Killing daemon process %d' % pid) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
543 os.kill(pid, signal.SIGTERM) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
544 time.sleep(0.25) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
545 os.kill(pid, 0) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
546 vlog('# Daemon process %d is stuck - really killing it' % pid) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
547 os.kill(pid, signal.SIGKILL) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
548 except OSError, err: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
549 if err.errno != errno.ESRCH: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
550 raise |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
551 fp.close() |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
552 os.unlink(DAEMON_PIDS) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
553 except IOError: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
554 pass |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
555 |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
556 os.chdir(TESTDIR) |
6208
c88b9e597588
tests: add --keep-tmp to run-tests.py to debug test environment
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6004
diff
changeset
|
557 if not options.keep_tmpdir: |
6209
4e8cd15240bf
Replaced tab in run-tests.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6208
diff
changeset
|
558 shutil.rmtree(tmpd, True) |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
559 if skipped: |
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
560 return None |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
561 return ret == 0 |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
562 |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
563 _hgpath = None |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
564 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
565 def _gethgpath(): |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
566 """Return the path to the mercurial package that is actually found by |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
567 the current Python interpreter.""" |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
568 global _hgpath |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
569 if _hgpath is not None: |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
570 return _hgpath |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
571 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
572 cmd = '%s -c "import mercurial; print mercurial.__path__[0]"' |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
573 pipe = os.popen(cmd % PYTHON) |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
574 try: |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
575 _hgpath = pipe.read().strip() |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
576 finally: |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
577 pipe.close() |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
578 return _hgpath |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
579 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
580 def _checkhglib(verb): |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
581 """Ensure that the 'mercurial' package imported by python is |
8673
a8066f2fd1aa
run-tests: fix _checkhglib() so it's correct when using --with-hg.
Greg Ward <greg-hg@gerg.ca>
parents:
8672
diff
changeset
|
582 the one we expect it to be. If not, print a warning to stderr.""" |
a8066f2fd1aa
run-tests: fix _checkhglib() so it's correct when using --with-hg.
Greg Ward <greg-hg@gerg.ca>
parents:
8672
diff
changeset
|
583 expecthg = os.path.join(PYTHONDIR, 'mercurial') |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
584 actualhg = _gethgpath() |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
585 if actualhg != expecthg: |
8673
a8066f2fd1aa
run-tests: fix _checkhglib() so it's correct when using --with-hg.
Greg Ward <greg-hg@gerg.ca>
parents:
8672
diff
changeset
|
586 sys.stderr.write('warning: %s with unexpected mercurial lib: %s\n' |
a8066f2fd1aa
run-tests: fix _checkhglib() so it's correct when using --with-hg.
Greg Ward <greg-hg@gerg.ca>
parents:
8672
diff
changeset
|
587 ' (expected %s)\n' |
a8066f2fd1aa
run-tests: fix _checkhglib() so it's correct when using --with-hg.
Greg Ward <greg-hg@gerg.ca>
parents:
8672
diff
changeset
|
588 % (verb, actualhg, expecthg)) |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
589 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
590 def runchildren(options, tests): |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
591 if INST: |
8107
0eeb4f0a5d21
run-tests: fix -jN broken by 60a9e3cf0cf4
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8097
diff
changeset
|
592 installhg(options) |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
593 _checkhglib("Testing") |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
594 |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
595 optcopy = dict(options.__dict__) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
596 optcopy['jobs'] = 1 |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
597 if optcopy['with_hg'] is None: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
598 optcopy['with_hg'] = os.path.join(BINDIR, "hg") |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
599 opts = [] |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
600 for opt, value in optcopy.iteritems(): |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
601 name = '--' + opt.replace('_', '-') |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
602 if value is True: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
603 opts.append(name) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
604 elif value is not None: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
605 opts.append(name + '=' + str(value)) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
606 |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
607 tests.reverse() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
608 jobs = [[] for j in xrange(options.jobs)] |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
609 while tests: |
8161 | 610 for job in jobs: |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
611 if not tests: break |
8161 | 612 job.append(tests.pop()) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
613 fps = {} |
8161 | 614 for j, job in enumerate(jobs): |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
615 if not job: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
616 continue |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
617 rfd, wfd = os.pipe() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
618 childopts = ['--child=%d' % wfd, '--port=%d' % (options.port + j * 3)] |
8096
a110d7a20f3f
run-tests: upper-case global PYTHON variable
Martin Geisler <mg@lazybytes.net>
parents:
8095
diff
changeset
|
619 cmdline = [PYTHON, sys.argv[0]] + opts + childopts + job |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
620 vlog(' '.join(cmdline)) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
621 fps[os.spawnvp(os.P_NOWAIT, cmdline[0], cmdline)] = os.fdopen(rfd, 'r') |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
622 os.close(wfd) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
623 failures = 0 |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
624 tested, skipped, failed = 0, 0, 0 |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
625 skips = [] |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
626 fails = [] |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
627 while fps: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
628 pid, status = os.wait() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
629 fp = fps.pop(pid) |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
630 l = fp.read().splitlines() |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
631 test, skip, fail = map(int, l[:3]) |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
632 split = -fail or len(l) |
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
633 for s in l[3:split]: |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
634 skips.append(s.split(" ", 1)) |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
635 for s in l[split:]: |
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
636 fails.append(s.split(" ", 1)) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
637 tested += test |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
638 skipped += skip |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
639 failed += fail |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
640 vlog('pid %d exited, status %d' % (pid, status)) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
641 failures |= status |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
642 print |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
643 for s in skips: |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
644 print "Skipped %s: %s" % (s[0], s[1]) |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
645 for s in fails: |
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
646 print "Failed %s: %s" % (s[0], s[1]) |
6982
9fc5bf4adbcf
imported patch test-check
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6681
diff
changeset
|
647 |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
648 _checkhglib("Tested") |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
649 print "# Ran %d tests, %d skipped, %d failed." % ( |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
650 tested, skipped, failed) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
651 sys.exit(failures != 0) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
652 |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
653 def runtests(options, tests): |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
654 global DAEMON_PIDS, HGRCPATH |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
655 DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids') |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
656 HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc') |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
657 |
2258
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
658 try: |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
659 if INST: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
660 installhg(options) |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
661 _checkhglib("Testing") |
6982
9fc5bf4adbcf
imported patch test-check
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6681
diff
changeset
|
662 |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
663 if options.timeout > 0: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
664 try: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
665 signal.signal(signal.SIGALRM, alarmed) |
8651
27cc4fa6722d
run-tests: clarify timeout log message.
Greg Ward <greg-hg@gerg.ca>
parents:
8620
diff
changeset
|
666 vlog('# Running each test with %d second timeout' % |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
667 options.timeout) |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
668 except AttributeError: |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
669 print 'WARNING: cannot run tests with timeouts' |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
670 options.timeout = 0 |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
671 |
3625 | 672 tested = 0 |
2258
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
673 failed = 0 |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
674 skipped = 0 |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
675 |
3625 | 676 if options.restart: |
677 orig = list(tests) | |
678 while tests: | |
679 if os.path.exists(tests[0] + ".err"): | |
680 break | |
681 tests.pop(0) | |
682 if not tests: | |
683 print "running all tests" | |
684 tests = orig | |
2133
4334be196f8d
Tidyups for run-tests.py inc. try/finally cleanup and allow tests to be specified on command line
Stephen Darnell <stephen@darnell.plus.com>
parents:
2110
diff
changeset
|
685 |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
686 skips = [] |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
687 fails = [] |
3625 | 688 for test in tests: |
689 if options.retest and not os.path.exists(test + ".err"): | |
690 skipped += 1 | |
691 continue | |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
692 ret = runone(options, test, skips, fails) |
3625 | 693 if ret is None: |
694 skipped += 1 | |
695 elif not ret: | |
3626 | 696 if options.interactive: |
697 print "Accept this change? [n] ", | |
698 answer = sys.stdin.readline().strip() | |
699 if answer.lower() in "y yes".split(): | |
5800
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
700 rename(test + ".err", test + ".out") |
3626 | 701 tested += 1 |
6343
1f9be57a6d6a
tests: teach -i about fails list
Matt Mackall <mpm@selenic.com>
parents:
6244
diff
changeset
|
702 fails.pop() |
3626 | 703 continue |
3625 | 704 failed += 1 |
705 if options.first: | |
706 break | |
707 tested += 1 | |
708 | |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
709 if options.child: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
710 fp = os.fdopen(options.child, 'w') |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
711 fp.write('%d\n%d\n%d\n' % (tested, skipped, failed)) |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
712 for s in skips: |
5760
0145f9afb0e7
Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5685
diff
changeset
|
713 fp.write("%s %s\n" % s) |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
714 for s in fails: |
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
715 fp.write("%s %s\n" % s) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
716 fp.close() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
717 else: |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
718 print |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
719 for s in skips: |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
720 print "Skipped %s: %s" % s |
6244
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
721 for s in fails: |
b36774d0fce1
run-tests.py: add a summary of failed tests at the end
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
6212
diff
changeset
|
722 print "Failed %s: %s" % s |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
723 _checkhglib("Tested") |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
724 print "# Ran %d tests, %d skipped, %d failed." % ( |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
725 tested, skipped, failed) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
726 |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
727 if options.anycoverage: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
728 outputcoverage(options) |
2258
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
729 except KeyboardInterrupt: |
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
730 failed = True |
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
731 print "\ninterrupted!" |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
732 |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
733 if failed: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
734 sys.exit(1) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
735 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
736 def main(): |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
737 (options, args) = parseargs() |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
738 if not options.child: |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
739 os.umask(022) |
8093
70d8f70264c4
run-tests: move bits of main program so it's all at the bottom.
Greg Ward <greg-hg@gerg.ca>
parents:
8092
diff
changeset
|
740 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
741 checktools() |
8093
70d8f70264c4
run-tests: move bits of main program so it's all at the bottom.
Greg Ward <greg-hg@gerg.ca>
parents:
8092
diff
changeset
|
742 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
743 # Reset some environment variables to well-known values so that |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
744 # the tests produce repeatable output. |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
745 os.environ['LANG'] = os.environ['LC_ALL'] = 'C' |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
746 os.environ['TZ'] = 'GMT' |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
747 os.environ["EMAIL"] = "Foo Bar <foo.bar@example.com>" |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
748 os.environ['CDPATH'] = '' |
8093
70d8f70264c4
run-tests: move bits of main program so it's all at the bottom.
Greg Ward <greg-hg@gerg.ca>
parents:
8092
diff
changeset
|
749 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
750 global TESTDIR, HGTMP, INST, BINDIR, PYTHONDIR, COVERAGE_FILE |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
751 TESTDIR = os.environ["TESTDIR"] = os.getcwd() |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
752 HGTMP = os.environ['HGTMP'] = os.path.realpath(tempfile.mkdtemp('', 'hgtests.', |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
753 options.tmpdir)) |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
754 DAEMON_PIDS = None |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
755 HGRCPATH = None |
8093
70d8f70264c4
run-tests: move bits of main program so it's all at the bottom.
Greg Ward <greg-hg@gerg.ca>
parents:
8092
diff
changeset
|
756 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
757 os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"' |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
758 os.environ["HGMERGE"] = "internal:merge" |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
759 os.environ["HGUSER"] = "test" |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
760 os.environ["HGENCODING"] = "ascii" |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
761 os.environ["HGENCODINGMODE"] = "strict" |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
762 os.environ["HGPORT"] = str(options.port) |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
763 os.environ["HGPORT1"] = str(options.port + 1) |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
764 os.environ["HGPORT2"] = str(options.port + 2) |
8093
70d8f70264c4
run-tests: move bits of main program so it's all at the bottom.
Greg Ward <greg-hg@gerg.ca>
parents:
8092
diff
changeset
|
765 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
766 if options.with_hg: |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
767 INST = None |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
768 BINDIR = os.path.dirname(os.path.realpath(options.with_hg)) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
769 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
770 # This looks redundant with how Python initializes sys.path from |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
771 # the location of the script being executed. Needed because the |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
772 # "hg" specified by --with-hg is not the only Python script |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
773 # executed in the test suite that needs to import 'mercurial' |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
774 # ... which means it's not really redundant at all. |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
775 PYTHONDIR = BINDIR |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
776 else: |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
777 INST = os.path.join(HGTMP, "install") |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
778 BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin") |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
779 PYTHONDIR = os.path.join(INST, "lib", "python") |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
780 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
781 os.environ["BINDIR"] = BINDIR |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
782 os.environ["PYTHON"] = PYTHON |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
783 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
784 if not options.child: |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
785 path = [BINDIR] + os.environ["PATH"].split(os.pathsep) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
786 os.environ["PATH"] = os.pathsep.join(path) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
787 |
8724
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
788 # Include TESTDIR in PYTHONPATH so that out-of-tree extensions |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
789 # can run .../tests/run-tests.py test-foo where test-foo |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
790 # adds an extension to HGRC |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
791 pypath = [PYTHONDIR, TESTDIR] |
8687
78ab2a12b4d9
run-tests: don't replace PYTHONPATH, just augment it.
Greg Ward <greg-hg@gerg.ca>
parents:
8674
diff
changeset
|
792 # We have to augment PYTHONPATH, rather than simply replacing |
78ab2a12b4d9
run-tests: don't replace PYTHONPATH, just augment it.
Greg Ward <greg-hg@gerg.ca>
parents:
8674
diff
changeset
|
793 # it, in case external libraries are only available via current |
78ab2a12b4d9
run-tests: don't replace PYTHONPATH, just augment it.
Greg Ward <greg-hg@gerg.ca>
parents:
8674
diff
changeset
|
794 # PYTHONPATH. (In particular, the Subversion bindings on OS X |
78ab2a12b4d9
run-tests: don't replace PYTHONPATH, just augment it.
Greg Ward <greg-hg@gerg.ca>
parents:
8674
diff
changeset
|
795 # are in /opt/subversion.) |
8724
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
796 oldpypath = os.environ.get('PYTHONPATH') |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
797 if oldpypath: |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
798 pypath.append(oldpypath) |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
799 os.environ['PYTHONPATH'] = os.pathsep.join(pypath) |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
800 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
801 COVERAGE_FILE = os.path.join(TESTDIR, ".coverage") |
8093
70d8f70264c4
run-tests: move bits of main program so it's all at the bottom.
Greg Ward <greg-hg@gerg.ca>
parents:
8092
diff
changeset
|
802 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
803 if len(args) == 0: |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
804 args = os.listdir(".") |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
805 args.sort() |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
806 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
807 tests = [] |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
808 for test in args: |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
809 if (test.startswith("test-") and '~' not in test and |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
810 ('.' not in test or test.endswith('.py') or |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
811 test.endswith('.bat'))): |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
812 tests.append(test) |
8592
cc22b4168879
runtest: do not start testing when there is no test
Simon Heimberg <simohe@besonet.ch>
parents:
8397
diff
changeset
|
813 if not tests: |
cc22b4168879
runtest: do not start testing when there is no test
Simon Heimberg <simohe@besonet.ch>
parents:
8397
diff
changeset
|
814 print "# Ran 0 tests, 0 skipped, 0 failed." |
cc22b4168879
runtest: do not start testing when there is no test
Simon Heimberg <simohe@besonet.ch>
parents:
8397
diff
changeset
|
815 return |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
816 |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
817 vlog("# Using TESTDIR", TESTDIR) |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
818 vlog("# Using HGTMP", HGTMP) |
8674
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
819 vlog("# Using PATH", os.environ["PATH"]) |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
820 vlog("# Using PYTHONPATH", os.environ["PYTHONPATH"]) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
821 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
822 try: |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
823 if len(tests) > 1 and options.jobs > 1: |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
824 runchildren(options, tests) |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
825 else: |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
826 runtests(options, tests) |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
827 finally: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
828 cleanup(options) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
829 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
830 main() |