Mercurial > hg
annotate tests/run-tests.py @ 17658:a02c1ffddae9 stable
largefiles: handle commit -A properly, after a --large commit (issue3542)
Previous to this, 'commit -A' would add as normal files, files that were already
committed as largefiles, resulting in files being listed twice by 'status -A'.
It also missed when (only) a largefile was deleted, even though status reported
it as '!'. This also has the side effect of properly reporting the state of the
affected largefiles in the post commit hook after a remove that also affected a
normal file (the largefiles used to be 'R', now are properly absent).
Since scmutil.addremove() is called both by the ui command (after some trivial
argument validation) and during the commit process when -A is specified, it
seems like a more appropriate method to wrap than the addremove command.
Currently, a repo is only enabled to use largefiles after an add that explicitly
identifies some file as large, and a subsequent commit. Therefore, this patch
only changes behavior after such a largefile enabling commit.
Note that in the test, if the final commit had a '-v', 'removing large8' would
be printed twice. Both of these originate in removelargefiles(). The first
print is in verbose mode after traversing remove + forget, the second is because
the '_isaddremove' attr is set and 'after' is not.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 30 Jul 2012 20:56:41 -0400 |
parents | 2a95830cff77 |
children | eddfb9a550d0 |
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 |
10263 | 8 # GNU General Public License version 2 or any later version. |
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 |
9899
be574a37a8ae
run-tests: give each child its own tmp dir (issue1911)
Greg Ward <greg@gerg.ca>
parents:
9707
diff
changeset
|
34 # 8) parallel, coverage, local 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
|
35 # ./run-tests.py -j2 -c --local test-s* # unsupported (and broken) |
9899
be574a37a8ae
run-tests: give each child its own tmp dir (issue1911)
Greg Ward <greg@gerg.ca>
parents:
9707
diff
changeset
|
36 # 9) parallel, custom tmp dir: |
be574a37a8ae
run-tests: give each child its own tmp dir (issue1911)
Greg Ward <greg@gerg.ca>
parents:
9707
diff
changeset
|
37 # ./run-tests.py -j2 --tmpdir /tmp/myhgtests |
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
|
38 # |
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 # (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
|
40 # 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
|
41 # 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
|
42 # 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
|
43 |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
44 from distutils import version |
2571
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 difflib |
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
46 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
|
47 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
|
48 import os |
10905
13a1b2fb7ef2
pylint, pyflakes: remove unused or duplicate imports
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10903
diff
changeset
|
49 import shutil |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
50 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
|
51 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
|
52 import sys |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
53 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
|
54 import time |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
55 import re |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
56 import threading |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
57 |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
58 processlock = threading.Lock() |
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
59 |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
60 closefds = os.name == 'posix' |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
61 def Popen4(cmd, wd, timeout): |
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
62 processlock.acquire() |
14340
defa319d8bb7
run-tests: replace chdir() with Popen cwd option
Patrick Mezard <pmezard@gmail.com>
parents:
14339
diff
changeset
|
63 p = subprocess.Popen(cmd, shell=True, bufsize=-1, cwd=wd, |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
64 close_fds=closefds, |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
65 stdin=subprocess.PIPE, stdout=subprocess.PIPE, |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
66 stderr=subprocess.STDOUT) |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
67 processlock.release() |
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
68 |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
69 p.fromchild = p.stdout |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
70 p.tochild = p.stdin |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
71 p.childerr = p.stderr |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
72 |
14337
439ed4721a6d
run-tests: ignore timeout when Popen.terminate is unavailable
Patrick Mezard <pmezard@gmail.com>
parents:
14336
diff
changeset
|
73 p.timeout = False |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
74 if timeout: |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
75 def t(): |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
76 start = time.time() |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
77 while time.time() - start < timeout and p.returncode is None: |
16346
48692b416fbc
tests: shorten post-test sleeps
Matt Mackall <mpm@selenic.com>
parents:
15942
diff
changeset
|
78 time.sleep(.1) |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
79 p.timeout = True |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
80 if p.returncode is None: |
14821
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
81 terminate(p) |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
82 threading.Thread(target=t).start() |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
83 |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
84 return p |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
85 |
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
|
86 # 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
|
87 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
|
88 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
|
89 FAILED_PREFIX = 'hghave check failed: ' |
15448
873f94ecd706
run-tests: convert windows paths to unix
Mads Kiilerich <mads@kiilerich.com>
parents:
15447
diff
changeset
|
90 PYTHON = sys.executable.replace('\\', '/') |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
91 IMPL_PATH = 'PYTHONPATH' |
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
92 if 'java' in sys.platform: |
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
93 IMPL_PATH = 'JYTHONPATH' |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
94 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
95 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
|
96 |
6366
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
97 defaults = { |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
98 '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
|
99 '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
|
100 'port': ('HGTEST_PORT', 20059), |
15941
af289d6cd422
tests: let run-tests.py default to use 'sh' in $PATH instead of '/bin/sh'
Mads Kiilerich <mads@kiilerich.com>
parents:
15940
diff
changeset
|
101 'shell': ('HGTEST_SHELL', 'sh'), |
6366
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
102 } |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
103 |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
104 def parselistfiles(files, listtype, warn=True): |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
105 entries = dict() |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
106 for filename in files: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
107 try: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
108 path = os.path.expanduser(os.path.expandvars(filename)) |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
109 f = open(path, "r") |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
110 except IOError, err: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
111 if err.errno != errno.ENOENT: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
112 raise |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
113 if warn: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
114 print "warning: no such %s file: %s" % (listtype, filename) |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
115 continue |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
116 |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
117 for line in f.readlines(): |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
118 line = line.split('#', 1)[0].strip() |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
119 if line: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
120 entries[line] = filename |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
121 |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
122 f.close() |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
123 return entries |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
124 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
125 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
|
126 parser = optparse.OptionParser("%prog [options] [tests]") |
11039 | 127 |
128 # keep these sorted | |
129 parser.add_option("--blacklist", action="append", | |
130 help="skip tests listed in the specified blacklist file") | |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
131 parser.add_option("--whitelist", action="append", |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
132 help="always run tests listed in the specified whitelist file") |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
133 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
|
134 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
|
135 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
|
136 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
|
137 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
|
138 help="print a test coverage report") |
11039 | 139 parser.add_option("-d", "--debug", action="store_true", |
140 help="debug mode: write output of test scripts to console" | |
141 " rather than capturing and diff'ing it (disables timeout)") | |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
142 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
|
143 help="exit on the first test failure") |
15859
44a371823f83
tests: add htmlcov option
Markus Zapke-Gründemann <info@keimlink.de>
parents:
15858
diff
changeset
|
144 parser.add_option("-H", "--htmlcov", action="store_true", |
44a371823f83
tests: add htmlcov option
Markus Zapke-Gründemann <info@keimlink.de>
parents:
15858
diff
changeset
|
145 help="create an HTML report of the coverage of the files") |
11039 | 146 parser.add_option("--inotify", action="store_true", |
147 help="enable inotify extension when running tests") | |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
148 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
|
149 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
|
150 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
|
151 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
|
152 " (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
|
153 parser.add_option("--keep-tmpdir", action="store_true", |
9706
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
154 help="keep temporary directory after running tests") |
11039 | 155 parser.add_option("-k", "--keywords", |
156 help="run tests matching keywords") | |
157 parser.add_option("-l", "--local", action="store_true", | |
158 help="shortcut for --with-hg=<testdir>/../hg") | |
159 parser.add_option("-n", "--nodiff", action="store_true", | |
160 help="skip showing test changes") | |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
161 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
|
162 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
|
163 " (default: $%s or %d)" % defaults['port']) |
11039 | 164 parser.add_option("--pure", action="store_true", |
165 help="use pure Python code instead of C extensions") | |
166 parser.add_option("-R", "--restart", action="store_true", | |
167 help="restart at last error") | |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
168 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
|
169 help="retest failed tests") |
9580
25858f9e65e8
run-tests: add --noskips option
Matt Mackall <mpm@selenic.com>
parents:
9408
diff
changeset
|
170 parser.add_option("-S", "--noskips", action="store_true", |
25858f9e65e8
run-tests: add --noskips option
Matt Mackall <mpm@selenic.com>
parents:
9408
diff
changeset
|
171 help="don't report skip tests verbosely") |
14202
b68a41420397
run-tests: add --shell command line flag
Martin Geisler <mg@lazybytes.net>
parents:
14201
diff
changeset
|
172 parser.add_option("--shell", type="string", |
b68a41420397
run-tests: add --shell command line flag
Martin Geisler <mg@lazybytes.net>
parents:
14201
diff
changeset
|
173 help="shell to use (default: $%s or %s)" % defaults['shell']) |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
174 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
|
175 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
|
176 " (default: $%s or %d)" % defaults['timeout']) |
11039 | 177 parser.add_option("--tmpdir", type="string", |
178 help="run tests in the given temporary directory" | |
179 " (implies --keep-tmpdir)") | |
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 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
|
181 help="output verbose messages") |
11040
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
182 parser.add_option("--view", type="string", |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
183 help="external diff viewer") |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
184 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
|
185 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
|
186 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
|
187 "temporary installation") |
9028
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
188 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
|
189 help="enable Py3k warnings on Python 2.6+") |
14134
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
190 parser.add_option('--extra-config-opt', action="append", |
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
191 help='set the given config opt in the test hgrc') |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
192 |
14201
57e04ded3da4
run-tests: use type of default to convert environment variable
Martin Geisler <mg@lazybytes.net>
parents:
14192
diff
changeset
|
193 for option, (envvar, default) in defaults.items(): |
57e04ded3da4
run-tests: use type of default to convert environment variable
Martin Geisler <mg@lazybytes.net>
parents:
14192
diff
changeset
|
194 defaults[option] = type(default)(os.environ.get(envvar, default)) |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
195 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
|
196 (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
|
197 |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
198 # jython is always pure |
10766
afbcea270bb8
run-tests: force to test pure on pypy as well
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10765
diff
changeset
|
199 if 'java' in sys.platform or '__pypy__' in sys.modules: |
10765
fd31a3237498
Fix run-tests.py -jX after 2ed667a9dfcb
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10758
diff
changeset
|
200 options.pure = True |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
201 |
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
|
202 if options.with_hg: |
15942
d7a34c07e69b
run-tests: expand user in --with-hg
Mads Kiilerich <mads@kiilerich.com>
parents:
15941
diff
changeset
|
203 options.with_hg = os.path.expanduser(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
|
204 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
|
205 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
|
206 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
|
207 if not os.path.basename(options.with_hg) == 'hg': |
14359
ad5c68a0db6a
run-tests: print a newline after all warnings
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14340
diff
changeset
|
208 sys.stderr.write('warning: --with-hg should specify an hg script\n') |
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
|
209 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
|
210 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
|
211 hgbin = os.path.join(os.path.dirname(testdir), 'hg') |
16538
dd194e5df4c1
tests: don't require 'hg' without extension on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
16346
diff
changeset
|
212 if os.name != 'nt' and not os.access(hgbin, os.X_OK): |
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
|
213 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
|
214 % 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
|
215 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
|
216 |
15859
44a371823f83
tests: add htmlcov option
Markus Zapke-Gründemann <info@keimlink.de>
parents:
15858
diff
changeset
|
217 options.anycoverage = options.cover or options.annotate or options.htmlcov |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
218 if options.anycoverage: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
219 try: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
220 import coverage |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
221 covver = version.StrictVersion(coverage.__version__).version |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
222 if covver < (3, 3): |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
223 parser.error('coverage options require coverage 3.3 or later') |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
224 except ImportError: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
225 parser.error('coverage options now require the coverage package') |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
226 |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
227 if options.anycoverage and options.local: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
228 # this needs some path mangling somewhere, I guess |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
229 parser.error("sorry, coverage options do not work when --local " |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
230 "is specified") |
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
|
231 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
232 global vlog |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
233 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
|
234 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
|
235 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
|
236 else: |
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
237 pid = None |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
238 def vlog(*msg): |
14018
7ba2c728cf32
run-tests: add iolock to vlog
Matt Mackall <mpm@selenic.com>
parents:
14006
diff
changeset
|
239 iolock.acquire() |
8671
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
240 if pid: |
a434c94b48e7
run-tests: show PID if running in parallel mode with -v.
Greg Ward <greg-hg@gerg.ca>
parents:
8651
diff
changeset
|
241 print pid, |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
242 for m in msg: |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
243 print m, |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
244 print |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
245 sys.stdout.flush() |
14018
7ba2c728cf32
run-tests: add iolock to vlog
Matt Mackall <mpm@selenic.com>
parents:
14006
diff
changeset
|
246 iolock.release() |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
247 else: |
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
248 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
|
249 |
9394
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
250 if options.tmpdir: |
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
251 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
|
252 |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
253 if options.jobs < 1: |
9408
70bf7f853adc
run-tests: standardize on --foo instead of -f/--foo
Martin Geisler <mg@lazybytes.net>
parents:
9407
diff
changeset
|
254 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
|
255 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
|
256 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
|
257 options.jobs = 1 |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
258 if options.interactive and options.debug: |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
259 parser.error("-i/--interactive and -d/--debug are incompatible") |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
260 if options.debug: |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
261 if options.timeout != defaults['timeout']: |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
262 sys.stderr.write( |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
263 'warning: --timeout option ignored with --debug\n') |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
264 options.timeout = 0 |
9028
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
265 if options.py3k_warnings: |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
266 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
|
267 parser.error('--py3k-warnings can only be used on Python 2.6+') |
9959
b37b060d84c7
run-tests: add a "--blacklist target" option to skip predefined test lists
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9958
diff
changeset
|
268 if options.blacklist: |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
269 options.blacklist = parselistfiles(options.blacklist, 'blacklist') |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
270 if options.whitelist: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
271 options.whitelisted = parselistfiles(options.whitelist, 'whitelist', |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
272 warn=options.child is None) |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
273 else: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
274 options.whitelisted = {} |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
275 |
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
276 return (options, args) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
277 |
5800
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
278 def rename(src, dst): |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
279 """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
|
280 for existing destination support. |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
281 """ |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
282 shutil.copy(src, dst) |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
283 os.remove(src) |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
284 |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
285 def splitnewlines(text): |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
286 '''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
|
287 keep line endings.''' |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
288 i = 0 |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
289 lines = [] |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
290 while True: |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
291 n = text.find('\n', i) |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
292 if n == -1: |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
293 last = text[i:] |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
294 if last: |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
295 lines.append(last) |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
296 return lines |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
297 lines.append(text[i:n + 1]) |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
298 i = n + 1 |
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
299 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
300 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
|
301 '''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
|
302 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
|
303 * 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
|
304 * 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
|
305 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
|
306 failed = [] |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
307 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
|
308 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
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 |
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
|
315 return missing, failed |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
316 |
10088
ec8304e66ea5
run-tests.py: Show paths to failing tests, .err and .out
Mads Kiilerich <mads@kiilerich.com>
parents:
10030
diff
changeset
|
317 def showdiff(expected, output, ref, err): |
14062
643381286e0c
run-tests: print a new line before writing the diff
Idan Kamara <idankk86@gmail.com>
parents:
14037
diff
changeset
|
318 print |
10088
ec8304e66ea5
run-tests.py: Show paths to failing tests, .err and .out
Mads Kiilerich <mads@kiilerich.com>
parents:
10030
diff
changeset
|
319 for line in difflib.unified_diff(expected, output, ref, err): |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
320 sys.stdout.write(line) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
321 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
322 def findprogram(program): |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
323 """Search PATH for a executable program""" |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
324 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
|
325 name = os.path.join(p, program) |
14335
220f31030e7f
run-tests: fix python executable detection and copy on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
14282
diff
changeset
|
326 if os.name == 'nt' or os.access(name, os.X_OK): |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
327 return name |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
328 return None |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
329 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
330 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
|
331 # 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
|
332 # 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
|
333 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
|
334 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
|
335 p += '.exe' |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 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
|
340 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
|
341 |
14821
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
342 def terminate(proc): |
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
343 """Terminate subprocess (with fallback for Python versions < 2.6)""" |
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
344 vlog('# Terminating process %d' % proc.pid) |
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
345 try: |
14971
0b21ae0a2366
tests: use getattr instead of hasattr
Augie Fackler <durin42@gmail.com>
parents:
14867
diff
changeset
|
346 getattr(proc, 'terminate', lambda : os.kill(proc.pid, signal.SIGTERM))() |
14821
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
347 except OSError: |
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
348 pass |
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
349 |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
350 def killdaemons(): |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
351 # Kill off any leftover daemon processes |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
352 try: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
353 fp = open(DAEMON_PIDS) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
354 for line in fp: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
355 try: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
356 pid = int(line) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
357 except ValueError: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
358 continue |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
359 try: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
360 os.kill(pid, 0) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
361 vlog('# Killing daemon process %d' % pid) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
362 os.kill(pid, signal.SIGTERM) |
16346
48692b416fbc
tests: shorten post-test sleeps
Matt Mackall <mpm@selenic.com>
parents:
15942
diff
changeset
|
363 time.sleep(0.1) |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
364 os.kill(pid, 0) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
365 vlog('# Daemon process %d is stuck - really killing it' % pid) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
366 os.kill(pid, signal.SIGKILL) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
367 except OSError, err: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
368 if err.errno != errno.ESRCH: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
369 raise |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
370 fp.close() |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
371 os.unlink(DAEMON_PIDS) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
372 except IOError: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
373 pass |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
374 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
375 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
|
376 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
|
377 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
|
378 shutil.rmtree(HGTMP, True) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
379 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
380 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
|
381 # 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
|
382 # 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
|
383 exedir, exename = os.path.split(sys.executable) |
14335
220f31030e7f
run-tests: fix python executable detection and copy on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
14282
diff
changeset
|
384 if exename in ('python', 'python.exe'): |
220f31030e7f
run-tests: fix python executable detection and copy on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
14282
diff
changeset
|
385 path = findprogram(exename) |
2570
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
386 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
|
387 return |
14335
220f31030e7f
run-tests: fix python executable detection and copy on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
14282
diff
changeset
|
388 else: |
220f31030e7f
run-tests: fix python executable detection and copy on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
14282
diff
changeset
|
389 exename = '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
|
390 vlog('# Making python executable in test path use correct Python') |
14335
220f31030e7f
run-tests: fix python executable detection and copy on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
14282
diff
changeset
|
391 mypython = os.path.join(BINDIR, exename) |
2570
2264b2b077a1
run-tests.py: make tests use same python interpreter as test harness.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2409
diff
changeset
|
392 try: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
393 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
|
394 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
|
395 # windows fallback |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
396 shutil.copyfile(sys.executable, mypython) |
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
397 shutil.copymode(sys.executable, mypython) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2989
diff
changeset
|
398 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
399 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
|
400 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
|
401 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
|
402 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
|
403 |
5267
b817d17c7ee5
Make run-tests.py work when invoked outside of tests.
Brendan Cully <brendan@kublai.com>
parents:
5251
diff
changeset
|
404 # 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
|
405 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
|
406 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
|
407 os.chdir(hgroot) |
9905
95517eb3c9a7
run-tests: work around a distutils bug triggered by 0a8a43b4ca75
Patrick Mezard <pmezard@gmail.com>
parents:
9902
diff
changeset
|
408 nohome = '--home=""' |
95517eb3c9a7
run-tests: work around a distutils bug triggered by 0a8a43b4ca75
Patrick Mezard <pmezard@gmail.com>
parents:
9902
diff
changeset
|
409 if os.name == 'nt': |
95517eb3c9a7
run-tests: work around a distutils bug triggered by 0a8a43b4ca75
Patrick Mezard <pmezard@gmail.com>
parents:
9902
diff
changeset
|
410 # The --home="" trick works only on OS where os.sep == '/' |
95517eb3c9a7
run-tests: work around a distutils bug triggered by 0a8a43b4ca75
Patrick Mezard <pmezard@gmail.com>
parents:
9902
diff
changeset
|
411 # because of a distutils convert_path() fast-path. Avoid it at |
95517eb3c9a7
run-tests: work around a distutils bug triggered by 0a8a43b4ca75
Patrick Mezard <pmezard@gmail.com>
parents:
9902
diff
changeset
|
412 # least on Windows for now, deal with .pydistutils.cfg bugs |
95517eb3c9a7
run-tests: work around a distutils bug triggered by 0a8a43b4ca75
Patrick Mezard <pmezard@gmail.com>
parents:
9902
diff
changeset
|
413 # when they happen. |
95517eb3c9a7
run-tests: work around a distutils bug triggered by 0a8a43b4ca75
Patrick Mezard <pmezard@gmail.com>
parents:
9902
diff
changeset
|
414 nohome = '' |
7723
a343cd25e425
run-tests: add --pure flag for using pure Python modules
Martin Geisler <mg@daimi.au.dk>
parents:
7529
diff
changeset
|
415 cmd = ('%s setup.py %s clean --all' |
12502
41f2fa72fa82
run-tests: move build/ directory to HGTMP
Martin Geisler <mg@lazybytes.net>
parents:
12377
diff
changeset
|
416 ' build --build-base="%s"' |
7139
bcbba59e233d
run-tests.py: use --prefix instead of --home
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7018
diff
changeset
|
417 ' install --force --prefix="%s" --install-lib="%s"' |
10030
cbc93d8ed46a
run-tests: backout d7c23f4a14c7
Martin Geisler <mg@lazybytes.net>
parents:
10020
diff
changeset
|
418 ' --install-scripts="%s" %s >%s 2>&1' |
12502
41f2fa72fa82
run-tests: move build/ directory to HGTMP
Martin Geisler <mg@lazybytes.net>
parents:
12377
diff
changeset
|
419 % (sys.executable, pure, os.path.join(HGTMP, "build"), |
41f2fa72fa82
run-tests: move build/ directory to HGTMP
Martin Geisler <mg@lazybytes.net>
parents:
12377
diff
changeset
|
420 INST, PYTHONDIR, BINDIR, nohome, 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
|
421 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
|
422 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
|
423 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
|
424 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
|
425 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 os.chdir(TESTDIR) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
432 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
433 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
|
434 |
7172
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
435 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
|
436 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
|
437 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
|
438 'import sys\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
439 'files = 0\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
440 '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
|
441 ' 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
|
442 ' files += 1\n' |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
443 '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
|
444 f.close() |
fb1d7a42663c
Use dummy diffstat in tests and remove older diffstat workaround.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
7144
diff
changeset
|
445 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
|
446 |
9028
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
447 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
|
448 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
|
449 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
|
450 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
|
451 lines[0] += ' -3' |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
452 f.close() |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
453 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
|
454 for line in lines: |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
455 f.write(line + '\n') |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
456 f.close() |
bea567ae3ff6
tests: add -3 switch to run-tests.py
Alejandro Santos <alejolp@alejolp.com>
parents:
8943
diff
changeset
|
457 |
14336
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
458 hgbat = os.path.join(BINDIR, 'hg.bat') |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
459 if os.path.isfile(hgbat): |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
460 # hg.bat expects to be put in bin/scripts while run-tests.py |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
461 # installation layout put it in bin/ directly. Fix it |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
462 f = open(hgbat, 'rb') |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
463 data = f.read() |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
464 f.close() |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
465 if '"%~dp0..\python" "%~dp0hg" %*' in data: |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
466 data = data.replace('"%~dp0..\python" "%~dp0hg" %*', |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
467 '"%~dp0python" "%~dp0hg" %*') |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
468 f = open(hgbat, 'wb') |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
469 f.write(data) |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
470 f.close() |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
471 else: |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
472 print 'WARNING: cannot fix hg.bat reference to python.exe' |
0cbf0d1f7939
run-tests: fix hg.bat python reference
Patrick Mezard <pmezard@gmail.com>
parents:
14335
diff
changeset
|
473 |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
474 if options.anycoverage: |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
475 custom = os.path.join(TESTDIR, 'sitecustomize.py') |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
476 target = os.path.join(PYTHONDIR, 'sitecustomize.py') |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
477 vlog('# Installing coverage trigger to %s' % target) |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
478 shutil.copyfile(custom, target) |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
479 rc = os.path.join(TESTDIR, '.coveragerc') |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
480 vlog('# Installing coverage rc to %s' % rc) |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
481 os.environ['COVERAGE_PROCESS_START'] = rc |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
482 fn = os.path.join(INST, '..', '.coverage') |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
483 os.environ['COVERAGE_FILE'] = fn |
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
|
484 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
485 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
|
486 |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
487 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
|
488 os.chdir(PYTHONDIR) |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
489 |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
490 def covrun(*args): |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
491 cmd = 'coverage %s' % ' '.join(args) |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
492 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
|
493 os.system(cmd) |
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
494 |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
495 if options.child: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
496 return |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
497 |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
498 covrun('-c') |
15858
14132a55d66b
run-tests: use a list comprehension instead of map
Matt Mackall <mpm@selenic.com>
parents:
15857
diff
changeset
|
499 omit = ','.join(os.path.join(x, '*') for x in [BINDIR, TESTDIR]) |
8620
b38f275bb5c2
tests: make coverage run in parallel mode, clean up coverage code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8592
diff
changeset
|
500 covrun('-i', '-r', '"--omit=%s"' % omit) # report |
15859
44a371823f83
tests: add htmlcov option
Markus Zapke-Gründemann <info@keimlink.de>
parents:
15858
diff
changeset
|
501 if options.htmlcov: |
44a371823f83
tests: add htmlcov option
Markus Zapke-Gründemann <info@keimlink.de>
parents:
15858
diff
changeset
|
502 htmldir = os.path.join(TESTDIR, 'htmlcov') |
44a371823f83
tests: add htmlcov option
Markus Zapke-Gründemann <info@keimlink.de>
parents:
15858
diff
changeset
|
503 covrun('-i', '-b', '"--directory=%s"' % htmldir, '"--omit=%s"' % omit) |
2145
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
504 if options.annotate: |
5bb3cb9e5d13
make indentation of coverage code in run-tests.py nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2144
diff
changeset
|
505 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
|
506 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
|
507 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
|
508 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
|
509 |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
510 def pytest(test, wd, options, replacements): |
11740
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
511 py3kswitch = options.py3k_warnings and ' -3' or '' |
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
512 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test) |
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
513 vlog("# Running", cmd) |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
514 return run(cmd, wd, options, replacements) |
11740
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
515 |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
516 def shtest(test, wd, options, replacements): |
15517
9ec8569e9a8b
tests: use the specified shell for running old fashioned sh tests
Mads Kiilerich <mads@kiilerich.com>
parents:
15451
diff
changeset
|
517 cmd = '%s "%s"' % (options.shell, test) |
11740
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
518 vlog("# Running", cmd) |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
519 return run(cmd, wd, options, replacements) |
11740
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
520 |
12941
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
521 needescape = re.compile(r'[\x00-\x08\x0b-\x1f\x7f-\xff]').search |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
522 escapesub = re.compile(r'[\x00-\x08\x0b-\x1f\\\x7f-\xff]').sub |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
523 escapemap = dict((chr(i), r'\x%02x' % i) for i in range(256)) |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
524 escapemap.update({'\\': '\\\\', '\r': r'\r'}) |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
525 def escapef(m): |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
526 return escapemap[m.group(0)] |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
527 def stringescape(s): |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
528 return escapesub(escapef, s) |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
529 |
15414
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
530 def rematch(el, l): |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
531 try: |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
532 # ensure that the regex matches to the end of the string |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
533 return re.match(el + r'\Z', l) |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
534 except re.error: |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
535 # el is an invalid regex |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
536 return False |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
537 |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
538 def globmatch(el, l): |
15447
9910f60a37ee
tests: make (glob) on windows accept \ instead of /
Mads Kiilerich <mads@kiilerich.com>
parents:
15435
diff
changeset
|
539 # The only supported special characters are * and ? plus / which also |
9910f60a37ee
tests: make (glob) on windows accept \ instead of /
Mads Kiilerich <mads@kiilerich.com>
parents:
15435
diff
changeset
|
540 # matches \ on windows. Escaping of these caracters is supported. |
15414
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
541 i, n = 0, len(el) |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
542 res = '' |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
543 while i < n: |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
544 c = el[i] |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
545 i += 1 |
15447
9910f60a37ee
tests: make (glob) on windows accept \ instead of /
Mads Kiilerich <mads@kiilerich.com>
parents:
15435
diff
changeset
|
546 if c == '\\' and el[i] in '*?\\/': |
15414
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
547 res += el[i - 1:i + 1] |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
548 i += 1 |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
549 elif c == '*': |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
550 res += '.*' |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
551 elif c == '?': |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
552 res += '.' |
15447
9910f60a37ee
tests: make (glob) on windows accept \ instead of /
Mads Kiilerich <mads@kiilerich.com>
parents:
15435
diff
changeset
|
553 elif c == '/' and os.name == 'nt': |
9910f60a37ee
tests: make (glob) on windows accept \ instead of /
Mads Kiilerich <mads@kiilerich.com>
parents:
15435
diff
changeset
|
554 res += '[/\\\\]' |
15414
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
555 else: |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
556 res += re.escape(c) |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
557 return rematch(res, l) |
2a62d7c8aee7
run-tests: pull out unified matching funcs
Matt Mackall <mpm@selenic.com>
parents:
15413
diff
changeset
|
558 |
15415
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
559 def linematch(el, l): |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
560 if el == l: # perfect match (fast) |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
561 return True |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
562 if (el and |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
563 (el.endswith(" (re)\n") and rematch(el[:-6] + '\n', l) or |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
564 el.endswith(" (glob)\n") and globmatch(el[:-8] + '\n', l) or |
15435
493fffdc6398
tests: make '(esc)' matching in run-tests.py work as intended
Mads Kiilerich <mads@kiilerich.com>
parents:
15434
diff
changeset
|
565 el.endswith(" (esc)\n") and |
15449
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
566 (el[:-7].decode('string-escape') + '\n' == l or |
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
567 el[:-7].decode('string-escape').replace('\r', '') + |
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
568 '\n' == l and os.name == 'nt'))): |
15415
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
569 return True |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
570 return False |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
571 |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
572 def tsttest(test, wd, options, replacements): |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
573 # We generate a shell script which outputs unique markers to line |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
574 # up script results with our source. These markers include input |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
575 # line number and the last return code |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
576 salt = "SALT" + str(time.time()) |
15434
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
577 def addsalt(line, inpython): |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
578 if inpython: |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
579 script.append('%s %d 0\n' % (salt, line)) |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
580 else: |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
581 script.append('echo %s %s $?\n' % (salt, line)) |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
582 |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
583 # After we run the shell script, we re-unify the script output |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
584 # with non-active parts of the source, with synchronization by our |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
585 # SALT line number markers. The after table contains the |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
586 # non-active components, ordered by line number |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
587 after = {} |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
588 pos = prepos = -1 |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
589 |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
590 # Expected shellscript output |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
591 expected = {} |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
592 |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
593 # We keep track of whether or not we're in a Python block so we |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
594 # can generate the surrounding doctest magic |
15412
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
595 inpython = False |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
596 |
16842
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
597 # True or False when in a true or false conditional section |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
598 skipping = None |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
599 |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
600 def hghave(reqs): |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
601 # TODO: do something smarter when all other uses of hghave is gone |
16897
2774576dee4d
tests/run-tests: avoid C:/ in arguments
Adrian Buehlmann <adrian@cadifra.com>
parents:
16890
diff
changeset
|
602 tdir = TESTDIR.replace('\\', '/') |
16842
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
603 proc = Popen4('%s -c "%s/hghave %s"' % |
16906
2a95830cff77
tests: use the right directory for running hghave from run-tests.py
Mads Kiilerich <mads@kiilerich.com>
parents:
16905
diff
changeset
|
604 (options.shell, tdir, ' '.join(reqs)), wd, 0) |
16842
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
605 proc.communicate() |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
606 ret = proc.wait() |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
607 if wifexited(ret): |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
608 ret = os.WEXITSTATUS(ret) |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
609 return ret == 0 |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
610 |
15416 | 611 f = open(test) |
612 t = f.readlines() | |
613 f.close() | |
614 | |
615 script = [] | |
15940
4bc35496136f
tests: add 'set -x' to the .t sh scripts in run-tests.py debug mode
Mads Kiilerich <mads@kiilerich.com>
parents:
15859
diff
changeset
|
616 if options.debug: |
4bc35496136f
tests: add 'set -x' to the .t sh scripts in run-tests.py debug mode
Mads Kiilerich <mads@kiilerich.com>
parents:
15859
diff
changeset
|
617 script.append('set -x\n') |
15569
3e13ade423f0
tests: use an alias to make msys 'pwd' return paths with forward slashes
Mads Kiilerich <mads@kiilerich.com>
parents:
15517
diff
changeset
|
618 if os.getenv('MSYSTEM'): |
3e13ade423f0
tests: use an alias to make msys 'pwd' return paths with forward slashes
Mads Kiilerich <mads@kiilerich.com>
parents:
15517
diff
changeset
|
619 script.append('alias pwd="pwd -W"\n') |
15412
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
620 for n, l in enumerate(t): |
12934
ea7ad8c3988a
tests: handle .t files without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12895
diff
changeset
|
621 if not l.endswith('\n'): |
ea7ad8c3988a
tests: handle .t files without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12895
diff
changeset
|
622 l += '\n' |
16842
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
623 if l.startswith('#if'): |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
624 if skipping is not None: |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
625 after.setdefault(pos, []).append(' !!! nested #if\n') |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
626 skipping = not hghave(l.split()[1:]) |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
627 after.setdefault(pos, []).append(l) |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
628 elif l.startswith('#else'): |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
629 if skipping is None: |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
630 after.setdefault(pos, []).append(' !!! missing #if\n') |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
631 skipping = not skipping |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
632 after.setdefault(pos, []).append(l) |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
633 elif l.startswith('#endif'): |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
634 if skipping is None: |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
635 after.setdefault(pos, []).append(' !!! missing #if\n') |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
636 skipping = None |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
637 after.setdefault(pos, []).append(l) |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
638 elif skipping: |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
639 after.setdefault(pos, []).append(l) |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
640 elif l.startswith(' >>> '): # python inlines |
15434
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
641 after.setdefault(pos, []).append(l) |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
642 prepos = pos |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
643 pos = n |
15412
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
644 if not inpython: |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
645 # we've just entered a Python block, add the header |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
646 inpython = True |
15434
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
647 addsalt(prepos, False) # make sure we report the exit code |
15412
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
648 script.append('%s -m heredoctest <<EOF\n' % PYTHON) |
15434
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
649 addsalt(n, True) |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
650 script.append(l[2:]) |
16841
f2555e891982
run-tests: don't add python lines to expected dict
Adrian Buehlmann <adrian@cadifra.com>
parents:
16840
diff
changeset
|
651 elif l.startswith(' ... '): # python inlines |
15412
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
652 after.setdefault(prepos, []).append(l) |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
653 script.append(l[2:]) |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
654 elif l.startswith(' $ '): # commands |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
655 if inpython: |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
656 script.append("EOF\n") |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
657 inpython = False |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
658 after.setdefault(pos, []).append(l) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
659 prepos = pos |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
660 pos = n |
15434
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
661 addsalt(n, False) |
16905
671c73d523cf
tests: make .t tests stop immediately if a cd fails
Mads Kiilerich <mads@kiilerich.com>
parents:
16897
diff
changeset
|
662 cmd = l[4:].split() |
671c73d523cf
tests: make .t tests stop immediately if a cd fails
Mads Kiilerich <mads@kiilerich.com>
parents:
16897
diff
changeset
|
663 if len(cmd) == 2 and cmd[0] == 'cd': |
671c73d523cf
tests: make .t tests stop immediately if a cd fails
Mads Kiilerich <mads@kiilerich.com>
parents:
16897
diff
changeset
|
664 l = ' $ cd %s || exit 1\n' % cmd[1] |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
665 script.append(l[4:]) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
666 elif l.startswith(' > '): # continuations |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
667 after.setdefault(prepos, []).append(l) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
668 script.append(l[4:]) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
669 elif l.startswith(' '): # results |
15434
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
670 # queue up a list of expected results |
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
671 expected.setdefault(pos, []).append(l[2:]) |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
672 else: |
15412
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
673 if inpython: |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
674 script.append("EOF\n") |
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
675 inpython = False |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
676 # non-command/result - queue up for merged output |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
677 after.setdefault(pos, []).append(l) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
678 |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
679 if inpython: |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
680 script.append("EOF\n") |
16842
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
681 if skipping is not None: |
a3ea092203a5
tests: introduce c-style conditional sections in .t tests
Mads Kiilerich <mads@kiilerich.com>
parents:
16841
diff
changeset
|
682 after.setdefault(pos, []).append(' !!! missing #endif\n') |
15434
5635a4017061
run-tests: replace inline python handling with more native scheme
Matt Mackall <mpm@selenic.com>
parents:
15416
diff
changeset
|
683 addsalt(n + 1, False) |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
11781
diff
changeset
|
684 |
15416 | 685 # Write out the script and execute it |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
686 fd, name = tempfile.mkstemp(suffix='hg-tst') |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
687 try: |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
688 for l in script: |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
689 os.write(fd, l) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
690 os.close(fd) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
691 |
15450
90c15a7573df
run-tests: don't quote command names - that do apparently not work with msys
Mads Kiilerich <mads@kiilerich.com>
parents:
15449
diff
changeset
|
692 cmd = '%s "%s"' % (options.shell, name) |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
693 vlog("# Running", cmd) |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
694 exitcode, output = run(cmd, wd, options, replacements) |
12573
be4b0a397470
tests: show skip reason instead of "irrelevant" with unified tests, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
12502
diff
changeset
|
695 # do not merge output if skipped, return hghave message instead |
13002
6747d4a5c45d
run-tests: fix --debug for .t tests
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12955
diff
changeset
|
696 # similarly, with --debug, output is None |
6747d4a5c45d
run-tests: fix --debug for .t tests
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12955
diff
changeset
|
697 if exitcode == SKIPPED_STATUS or output is None: |
12573
be4b0a397470
tests: show skip reason instead of "irrelevant" with unified tests, too
Thomas Arendsen Hein <thomas@intevation.de>
parents:
12502
diff
changeset
|
698 return exitcode, output |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
699 finally: |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
700 os.remove(name) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
701 |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
702 # Merge the script output back into a unified test |
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
703 |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
704 pos = -1 |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
705 postout = [] |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
11781
diff
changeset
|
706 ret = 0 |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
707 for n, l in enumerate(output): |
12940
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
708 lout, lcmd = l, None |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
709 if salt in l: |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
710 lout, lcmd = l.split(salt, 1) |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
711 |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
712 if lout: |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
713 if lcmd: |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
714 # output block had no trailing newline, clean up |
12940
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
715 lout += ' (no-eol)\n' |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
716 |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
717 # find the expected output at the current position |
12940
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
718 el = None |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
719 if pos in expected and expected[pos]: |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
720 el = expected[pos].pop(0) |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
721 |
15415
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
722 if linematch(el, lout): |
8c90b3df5bed
run-tests: pull out line matching function
Matt Mackall <mpm@selenic.com>
parents:
15414
diff
changeset
|
723 postout.append(" " + el) |
12940
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
724 else: |
12941
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
725 if needescape(lout): |
b911cb80c671
tests: use (esc) markup for string-escape
Mads Kiilerich <mads@kiilerich.com>
parents:
12940
diff
changeset
|
726 lout = stringescape(lout.rstrip('\n')) + " (esc)\n" |
12940
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
727 postout.append(" " + lout) # let diff deal with it |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
728 |
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
729 if lcmd: |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
11781
diff
changeset
|
730 # add on last return code |
12940
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
731 ret = int(lcmd.split()[1]) |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
11781
diff
changeset
|
732 if ret != 0: |
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
11781
diff
changeset
|
733 postout.append(" [%s]\n" % ret) |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
734 if pos in after: |
15413
8e60433e070a
tests: add some comments to the unified test code
Matt Mackall <mpm@selenic.com>
parents:
15412
diff
changeset
|
735 # merge in non-active test bits |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
736 postout += after.pop(pos) |
12940
518dd70d1a6e
tests: (no-eol) markup for command output without trailing LF
Mads Kiilerich <mads@kiilerich.com>
parents:
12934
diff
changeset
|
737 pos = int(lcmd.split()[0]) |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
738 |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
739 if pos in after: |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
740 postout += after.pop(pos) |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
741 |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
742 return exitcode, postout |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
743 |
13348
31fdb04cb5e8
run-tests: only call WIFEXITED on systems it exists
Simon Heimberg <simohe@besonet.ch>
parents:
13347
diff
changeset
|
744 wifexited = getattr(os, "WIFEXITED", lambda x: False) |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
745 def run(cmd, wd, options, replacements): |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
746 """Run command in a sub-process, capturing the output (stdout and stderr). |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
747 Return a tuple (exitcode, output). output is None in debug mode.""" |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
748 # TODO: Use subprocess.Popen if we're running on Python 2.4 |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
749 if options.debug: |
14339
ed0bf8e1cd28
run-tests: make --debug run in the temporary test directory
Patrick Mezard <pmezard@gmail.com>
parents:
14338
diff
changeset
|
750 proc = subprocess.Popen(cmd, shell=True, cwd=wd) |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
751 ret = proc.wait() |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
752 return (ret, None) |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
753 |
14338
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
754 proc = Popen4(cmd, wd, options.timeout) |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
755 def cleanup(): |
14821
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
756 terminate(proc) |
14338
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
757 ret = proc.wait() |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
758 if ret == 0: |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
759 ret = signal.SIGTERM << 8 |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
760 killdaemons() |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
761 return ret |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
762 |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
763 output = '' |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
764 proc.tochild.close() |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
765 |
14338
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
766 try: |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
767 output = proc.fromchild.read() |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
768 except KeyboardInterrupt: |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
769 vlog('# Handling keyboard interrupt') |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
770 cleanup() |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
771 raise |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
772 |
14338
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
773 ret = proc.wait() |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
774 if wifexited(ret): |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
775 ret = os.WEXITSTATUS(ret) |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
776 |
14338
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
777 if proc.timeout: |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
778 ret = 'timeout' |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
779 |
14338
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
780 if ret: |
862f8cd87546
run-tests: use the common test path on Windows and Java
Patrick Mezard <pmezard@gmail.com>
parents:
14337
diff
changeset
|
781 killdaemons() |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
782 |
12639
236058a65cb4
tests: replace test tmp directory with $TESTTMP in test output
Mads Kiilerich <mads@kiilerich.com>
parents:
12621
diff
changeset
|
783 for s, r in replacements: |
12895
53cfde2b3cf9
run-tests: use regex when searching for $HGPORT in test output
Martin Geisler <mg@aragost.com>
parents:
12721
diff
changeset
|
784 output = re.sub(s, r, output) |
2247
546c76e5a3e6
run-tests.py: fix handling of newlines.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2246
diff
changeset
|
785 return ret, splitnewlines(output) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
786 |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
787 def runone(options, test): |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
788 '''tristate output: |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
789 None -> skipped |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
790 True -> passed |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
791 False -> failed''' |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
792 |
14002
a738c30d4b18
run-tests: add a lock for console I/O
Matt Mackall <mpm@selenic.com>
parents:
14001
diff
changeset
|
793 global results, resultslock, iolock |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
794 |
13989
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
795 testpath = os.path.join(TESTDIR, test) |
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
796 |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
797 def result(l, e): |
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
798 resultslock.acquire() |
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
799 results[l].append(e) |
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
800 resultslock.release() |
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
801 |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
802 def skip(msg): |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
803 if not options.verbose: |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
804 result('s', (test, msg)) |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
805 else: |
14003
ba734ff5cadd
run-tests: fix some missing i/o locks
Matt Mackall <mpm@selenic.com>
parents:
14002
diff
changeset
|
806 iolock.acquire() |
10088
ec8304e66ea5
run-tests.py: Show paths to failing tests, .err and .out
Mads Kiilerich <mads@kiilerich.com>
parents:
10030
diff
changeset
|
807 print "\nSkipping %s: %s" % (testpath, msg) |
14003
ba734ff5cadd
run-tests: fix some missing i/o locks
Matt Mackall <mpm@selenic.com>
parents:
14002
diff
changeset
|
808 iolock.release() |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
809 return None |
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
810 |
13988
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
811 def fail(msg, ret): |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
812 if not options.nodiff: |
14003
ba734ff5cadd
run-tests: fix some missing i/o locks
Matt Mackall <mpm@selenic.com>
parents:
14002
diff
changeset
|
813 iolock.acquire() |
10088
ec8304e66ea5
run-tests.py: Show paths to failing tests, .err and .out
Mads Kiilerich <mads@kiilerich.com>
parents:
10030
diff
changeset
|
814 print "\nERROR: %s %s" % (testpath, msg) |
14003
ba734ff5cadd
run-tests: fix some missing i/o locks
Matt Mackall <mpm@selenic.com>
parents:
14002
diff
changeset
|
815 iolock.release() |
13999
8f9478be9a94
run-tests: fix --interactive (after 994ad067ac6e)
Patrick Mezard <pmezard@gmail.com>
parents:
13995
diff
changeset
|
816 if (not ret and options.interactive |
8f9478be9a94
run-tests: fix --interactive (after 994ad067ac6e)
Patrick Mezard <pmezard@gmail.com>
parents:
13995
diff
changeset
|
817 and os.path.exists(testpath + ".err")): |
14003
ba734ff5cadd
run-tests: fix some missing i/o locks
Matt Mackall <mpm@selenic.com>
parents:
14002
diff
changeset
|
818 iolock.acquire() |
13988
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
819 print "Accept this change? [n] ", |
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
820 answer = sys.stdin.readline().strip() |
14003
ba734ff5cadd
run-tests: fix some missing i/o locks
Matt Mackall <mpm@selenic.com>
parents:
14002
diff
changeset
|
821 iolock.release() |
13988
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
822 if answer.lower() in "y yes".split(): |
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
823 if test.endswith(".t"): |
13999
8f9478be9a94
run-tests: fix --interactive (after 994ad067ac6e)
Patrick Mezard <pmezard@gmail.com>
parents:
13995
diff
changeset
|
824 rename(testpath + ".err", testpath) |
13988
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
825 else: |
13999
8f9478be9a94
run-tests: fix --interactive (after 994ad067ac6e)
Patrick Mezard <pmezard@gmail.com>
parents:
13995
diff
changeset
|
826 rename(testpath + ".err", testpath + ".out") |
14867
b601b9eb372d
run-tests: fix summary when accepting changes interactively
Patrick Mezard <pmezard@gmail.com>
parents:
14822
diff
changeset
|
827 result('p', test) |
13988
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
828 return |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
829 result('f', (test, msg)) |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
830 |
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
831 def success(): |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
832 result('p', test) |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
833 |
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
834 def ignore(msg): |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
835 result('i', (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
|
836 |
14264
8e00906066c9
run-tests: take the basepath when constructing the test temp dir
Idan Kamara <idankk86@gmail.com>
parents:
14263
diff
changeset
|
837 if (os.path.basename(test).startswith("test-") and '~' not in test and |
13989
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
838 ('.' not in test or test.endswith('.py') or |
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
839 test.endswith('.bat') or test.endswith('.t'))): |
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
840 if not os.path.exists(test): |
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
841 skip("doesn't exist") |
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
842 return None |
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
843 else: |
14598
259ba7502370
run-tests: verbose log ignored test
Idan Kamara <idankk86@gmail.com>
parents:
14493
diff
changeset
|
844 vlog('# Test file', test, 'not supported, ignoring') |
13989
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
845 return None # not a supported test, don't record |
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
846 |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
847 if not (options.whitelisted and test in options.whitelisted): |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
848 if options.blacklist and test in options.blacklist: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
849 skip("blacklisted") |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
850 return None |
13993
174d0a113757
run-tests: move blacklist and retest filtering to runone
Matt Mackall <mpm@selenic.com>
parents:
13992
diff
changeset
|
851 |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
852 if options.retest and not os.path.exists(test + ".err"): |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
853 ignore("not retesting") |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
854 return None |
13993
174d0a113757
run-tests: move blacklist and retest filtering to runone
Matt Mackall <mpm@selenic.com>
parents:
13992
diff
changeset
|
855 |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
856 if options.keywords: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
857 fp = open(test) |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
858 t = fp.read().lower() + test.lower() |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
859 fp.close() |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
860 for k in options.keywords.lower().split(): |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
861 if k in t: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
862 break |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
863 else: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
864 ignore("doesn't match keyword") |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
865 return None |
13991
8cfe191e2ce4
run-tests: move keyword checking into runone
Matt Mackall <mpm@selenic.com>
parents:
13990
diff
changeset
|
866 |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
867 vlog("# Test", test) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
868 |
2989
3091b1153e2c
Clear contents of global hgrc for tests before running each test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2710
diff
changeset
|
869 # create a fresh hgrc |
9031
3b76321aa0de
compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents:
9028
diff
changeset
|
870 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
|
871 hgrc.write('[ui]\n') |
860478527568
run-tests.py: set ui.slash = True
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4387
diff
changeset
|
872 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
|
873 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
|
874 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
|
875 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
|
876 hgrc.write('tag = -d "0 0"\n') |
9958
777c1df76ef4
run-tests: add --inotify option to test runner
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9940
diff
changeset
|
877 if options.inotify: |
777c1df76ef4
run-tests: add --inotify option to test runner
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9940
diff
changeset
|
878 hgrc.write('[extensions]\n') |
777c1df76ef4
run-tests: add --inotify option to test runner
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9940
diff
changeset
|
879 hgrc.write('inotify=\n') |
777c1df76ef4
run-tests: add --inotify option to test runner
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9940
diff
changeset
|
880 hgrc.write('[inotify]\n') |
777c1df76ef4
run-tests: add --inotify option to test runner
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9940
diff
changeset
|
881 hgrc.write('pidfile=%s\n' % DAEMON_PIDS) |
10013
b2e87fde6806
run-tests: --inotify: use inotify.appendpid to append pids to $DAEMON_PIDS
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9959
diff
changeset
|
882 hgrc.write('appendpid=True\n') |
14134
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
883 if options.extra_config_opt: |
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
884 for opt in options.extra_config_opt: |
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
885 section, key = opt.split('.', 1) |
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
886 assert '=' in key, ('extra config opt %s must ' |
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
887 'have an = for assignment' % opt) |
8468ec1109d1
run-tests: add flag to provide extra hgrc options for test runs
Augie Fackler <durin42@gmail.com>
parents:
14062
diff
changeset
|
888 hgrc.write('[%s]\n%s\n' % (section, key)) |
2989
3091b1153e2c
Clear contents of global hgrc for tests before running each test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2710
diff
changeset
|
889 hgrc.close() |
3091b1153e2c
Clear contents of global hgrc for tests before running each test.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2710
diff
changeset
|
890 |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
891 ref = os.path.join(TESTDIR, test+".out") |
10406
6586a6889f66
run-tests.py: skipped tests shouldn't change working directory
Mads Kiilerich <mads@kiilerich.com>
parents:
10336
diff
changeset
|
892 err = os.path.join(TESTDIR, test+".err") |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
893 if os.path.exists(err): |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
894 os.remove(err) # Remove any previous output files |
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
|
895 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
|
896 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
|
897 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
|
898 tf.close() |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16613
diff
changeset
|
899 except IOError: |
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
|
900 firstline = '' |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
901 lctest = test.lower() |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
902 |
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
|
903 if lctest.endswith('.py') or firstline == '#!/usr/bin/env python': |
11740
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
904 runner = pytest |
11741
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
905 elif lctest.endswith('.t'): |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
906 runner = tsttest |
431e2bf37ae7
tests: basic support for unified tests
Matt Mackall <mpm@selenic.com>
parents:
11740
diff
changeset
|
907 ref = testpath |
2710
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
908 else: |
e475fe2a6029
run-tests.py: skip tests that should not run.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2705
diff
changeset
|
909 # do not try to run non-executable programs |
12678
61642a4679e9
run-tests.py: remove support for .bat files
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
12677
diff
changeset
|
910 if 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
|
911 return skip("not executable") |
11740
e5c79e31feb6
tests: move script execution in runner helpers
Matt Mackall <mpm@selenic.com>
parents:
11040
diff
changeset
|
912 runner = shtest |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
913 |
10406
6586a6889f66
run-tests.py: skipped tests shouldn't change working directory
Mads Kiilerich <mads@kiilerich.com>
parents:
10336
diff
changeset
|
914 # Make a tmp subdirectory to work in |
13764
8ed67e44c71c
tests: set HOME to the test temp dir (issue2707)
Idan Kamara <idankk86@gmail.com>
parents:
13539
diff
changeset
|
915 testtmp = os.environ["TESTTMP"] = os.environ["HOME"] = \ |
16897
2774576dee4d
tests/run-tests: avoid C:/ in arguments
Adrian Buehlmann <adrian@cadifra.com>
parents:
16890
diff
changeset
|
916 os.path.join(HGTMP, os.path.basename(test)) |
13764
8ed67e44c71c
tests: set HOME to the test temp dir (issue2707)
Idan Kamara <idankk86@gmail.com>
parents:
13539
diff
changeset
|
917 |
15449
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
918 replacements = [ |
12895
53cfde2b3cf9
run-tests: use regex when searching for $HGPORT in test output
Martin Geisler <mg@aragost.com>
parents:
12721
diff
changeset
|
919 (r':%s\b' % options.port, ':$HGPORT'), |
53cfde2b3cf9
run-tests: use regex when searching for $HGPORT in test output
Martin Geisler <mg@aragost.com>
parents:
12721
diff
changeset
|
920 (r':%s\b' % (options.port + 1), ':$HGPORT1'), |
53cfde2b3cf9
run-tests: use regex when searching for $HGPORT in test output
Martin Geisler <mg@aragost.com>
parents:
12721
diff
changeset
|
921 (r':%s\b' % (options.port + 2), ':$HGPORT2'), |
15449
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
922 ] |
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
923 if os.name == 'nt': |
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
924 replacements.append((r'\r\n', '\n')) |
15451
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
925 replacements.append( |
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
926 (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or |
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
927 c in '/\\' and r'[/\\]' or |
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
928 c.isdigit() and c or |
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
929 '\\' + c |
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
930 for c in testtmp), '$TESTTMP')) |
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
931 else: |
23144f06919c
run-tests: make $TESTTMP matching case-insensitive on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15450
diff
changeset
|
932 replacements.append((re.escape(testtmp), '$TESTTMP')) |
15449
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
933 |
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
934 os.mkdir(testtmp) |
f71d60da58fb
tests: ignore \r on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
15448
diff
changeset
|
935 ret, out = runner(testpath, testtmp, options, replacements) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
936 vlog("# Ret was:", ret) |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
937 |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
938 mark = '.' |
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
939 |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
940 skipped = (ret == SKIPPED_STATUS) |
11040
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
941 |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
942 # If we're not in --debug mode and reference output file exists, |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
943 # check test output against it. |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
944 if options.debug: |
13031
3da456d0c885
code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents:
13002
diff
changeset
|
945 refout = None # to match "out is None" |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
946 elif os.path.exists(ref): |
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
|
947 f = open(ref, "r") |
15412
59fe460bb0f0
tests: rewrite inline Python support
Matt Mackall <mpm@selenic.com>
parents:
15344
diff
changeset
|
948 refout = list(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
|
949 f.close() |
2246
3fd603eb6add
run-tests.py: print diff if reference output not existing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2213
diff
changeset
|
950 else: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
951 refout = [] |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
952 |
11040
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
953 if (ret != 0 or out != refout) and not skipped and not options.debug: |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
954 # Save errors to a file for diagnosis |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
955 f = open(err, "wb") |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
956 for line in out: |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
957 f.write(line) |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
958 f.close() |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
959 |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
960 if skipped: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
961 mark = 's' |
9707
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
962 if out is None: # debug mode: nothing to parse |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
963 missing = ['unknown'] |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
964 failed = None |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
965 else: |
38deec407f8d
run-tests: add "debug" mode: don't capture child output, just show it.
Greg Ward <greg-hg@gerg.ca>
parents:
9706
diff
changeset
|
966 missing, failed = parsehghaveoutput(out) |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
967 if not missing: |
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
968 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
|
969 if failed: |
13988
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
970 fail("hghave failed checking for %s" % failed[-1], ret) |
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
|
971 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
|
972 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
|
973 skip(missing[-1]) |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
974 elif ret == 'timeout': |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
975 mark = 't' |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
976 fail("timed out", ret) |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
977 elif out != refout: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
978 mark = '!' |
14006
a395575691a6
run-tests: display diff before prompting with --interactive
Patrick Mezard <pmezard@gmail.com>
parents:
14003
diff
changeset
|
979 if not options.nodiff: |
14002
a738c30d4b18
run-tests: add a lock for console I/O
Matt Mackall <mpm@selenic.com>
parents:
14001
diff
changeset
|
980 iolock.acquire() |
11040
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
981 if options.view: |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
982 os.system("%s %s %s" % (options.view, ref, err)) |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
983 else: |
8f951ed6c63c
run-tests: add --view switch to use external diff viewer
Matt Mackall <mpm@selenic.com>
parents:
11039
diff
changeset
|
984 showdiff(refout, out, ref, err) |
14002
a738c30d4b18
run-tests: add a lock for console I/O
Matt Mackall <mpm@selenic.com>
parents:
14001
diff
changeset
|
985 iolock.release() |
14006
a395575691a6
run-tests: display diff before prompting with --interactive
Patrick Mezard <pmezard@gmail.com>
parents:
14003
diff
changeset
|
986 if ret: |
a395575691a6
run-tests: display diff before prompting with --interactive
Patrick Mezard <pmezard@gmail.com>
parents:
14003
diff
changeset
|
987 fail("output changed and returned error code %d" % ret, ret) |
a395575691a6
run-tests: display diff before prompting with --interactive
Patrick Mezard <pmezard@gmail.com>
parents:
14003
diff
changeset
|
988 else: |
a395575691a6
run-tests: display diff before prompting with --interactive
Patrick Mezard <pmezard@gmail.com>
parents:
14003
diff
changeset
|
989 fail("output changed", ret) |
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
|
990 ret = 1 |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
991 elif ret: |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
992 mark = '!' |
13988
994ad067ac6e
run-tests: move interactive handling into runone
Matt Mackall <mpm@selenic.com>
parents:
13918
diff
changeset
|
993 fail("returned error code %d" % ret, ret) |
14037
4ab1e987941b
run-tests: don't count test as succeeded if it failed
Idan Kamara <idankk86@gmail.com>
parents:
14019
diff
changeset
|
994 else: |
4ab1e987941b
run-tests: don't count test as succeeded if it failed
Idan Kamara <idankk86@gmail.com>
parents:
14019
diff
changeset
|
995 success() |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
996 |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
997 if not options.verbose: |
14002
a738c30d4b18
run-tests: add a lock for console I/O
Matt Mackall <mpm@selenic.com>
parents:
14001
diff
changeset
|
998 iolock.acquire() |
7343
e47dab64be8d
run-tests: allow turning off diff display
Matt Mackall <mpm@selenic.com>
parents:
7214
diff
changeset
|
999 sys.stdout.write(mark) |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1000 sys.stdout.flush() |
14002
a738c30d4b18
run-tests: add a lock for console I/O
Matt Mackall <mpm@selenic.com>
parents:
14001
diff
changeset
|
1001 iolock.release() |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1002 |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
1003 killdaemons() |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
1004 |
6208
c88b9e597588
tests: add --keep-tmp to run-tests.py to debug test environment
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
6004
diff
changeset
|
1005 if not options.keep_tmpdir: |
12639
236058a65cb4
tests: replace test tmp directory with $TESTTMP in test output
Mads Kiilerich <mads@kiilerich.com>
parents:
12621
diff
changeset
|
1006 shutil.rmtree(testtmp, True) |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
1007 if skipped: |
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
1008 return None |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
1009 return ret == 0 |
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
1010 |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1011 _hgpath = None |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1012 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1013 def _gethgpath(): |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1014 """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
|
1015 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
|
1016 global _hgpath |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1017 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
|
1018 return _hgpath |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1019 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1020 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
|
1021 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
|
1022 try: |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1023 _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
|
1024 finally: |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1025 pipe.close() |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1026 return _hgpath |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1027 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1028 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
|
1029 """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
|
1030 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
|
1031 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
|
1032 actualhg = _gethgpath() |
14263
7352ff757a48
run-tests: compare absolute paths in _checkhglib
Idan Kamara <idankk86@gmail.com>
parents:
14202
diff
changeset
|
1033 if os.path.abspath(actualhg) != os.path.abspath(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
|
1034 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
|
1035 ' (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
|
1036 % (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
|
1037 |
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1038 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
|
1039 if INST: |
8107
0eeb4f0a5d21
run-tests: fix -jN broken by 60a9e3cf0cf4
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8097
diff
changeset
|
1040 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
|
1041 _checkhglib("Testing") |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1042 |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1043 optcopy = dict(options.__dict__) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1044 optcopy['jobs'] = 1 |
14447
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1045 |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1046 # Because whitelist has to override keyword matches, we have to |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1047 # actually load the whitelist in the children as well, so we allow |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1048 # the list of whitelist files to pass through and be parsed in the |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1049 # children, but not the dict of whitelisted tests resulting from |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1050 # the parse, used here to override blacklisted tests. |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1051 whitelist = optcopy['whitelisted'] or [] |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1052 del optcopy['whitelisted'] |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1053 |
14447
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1054 blacklist = optcopy['blacklist'] or [] |
10904
26d1d23e5a2b
Fix --blacklist when --jobs > 1 in run_tests.py.
Ry4an Brase <ry4an-hg@ry4an.org>
parents:
10902
diff
changeset
|
1055 del optcopy['blacklist'] |
14447
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1056 blacklisted = [] |
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1057 |
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
|
1058 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
|
1059 optcopy['with_hg'] = os.path.join(BINDIR, "hg") |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
1060 optcopy.pop('anycoverage', None) |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
1061 |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1062 opts = [] |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1063 for opt, value in optcopy.iteritems(): |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1064 name = '--' + opt.replace('_', '-') |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1065 if value is True: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1066 opts.append(name) |
14192
38e387a64f58
run-tests.py: correctly handle list options with parallel tasks
Augie Fackler <durin42@gmail.com>
parents:
14134
diff
changeset
|
1067 elif isinstance(value, list): |
38e387a64f58
run-tests.py: correctly handle list options with parallel tasks
Augie Fackler <durin42@gmail.com>
parents:
14134
diff
changeset
|
1068 for v in value: |
38e387a64f58
run-tests.py: correctly handle list options with parallel tasks
Augie Fackler <durin42@gmail.com>
parents:
14134
diff
changeset
|
1069 opts.append(name + '=' + str(v)) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1070 elif value is not None: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1071 opts.append(name + '=' + str(value)) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1072 |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1073 tests.reverse() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1074 jobs = [[] for j in xrange(options.jobs)] |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1075 while tests: |
8161 | 1076 for job in jobs: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1077 if not tests: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1078 break |
14447
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1079 test = tests.pop() |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
1080 if test not in whitelist and test in blacklist: |
14447
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1081 blacklisted.append(test) |
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1082 else: |
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1083 job.append(test) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1084 fps = {} |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
1085 |
8161 | 1086 for j, job in enumerate(jobs): |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1087 if not job: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1088 continue |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1089 rfd, wfd = os.pipe() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1090 childopts = ['--child=%d' % wfd, '--port=%d' % (options.port + j * 3)] |
9899
be574a37a8ae
run-tests: give each child its own tmp dir (issue1911)
Greg Ward <greg@gerg.ca>
parents:
9707
diff
changeset
|
1091 childtmp = os.path.join(HGTMP, 'child%d' % j) |
be574a37a8ae
run-tests: give each child its own tmp dir (issue1911)
Greg Ward <greg@gerg.ca>
parents:
9707
diff
changeset
|
1092 childopts += ['--tmpdir', childtmp] |
8096
a110d7a20f3f
run-tests: upper-case global PYTHON variable
Martin Geisler <mg@lazybytes.net>
parents:
8095
diff
changeset
|
1093 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
|
1094 vlog(' '.join(cmdline)) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1095 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
|
1096 os.close(wfd) |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
1097 signal.signal(signal.SIGINT, signal.SIG_IGN) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1098 failures = 0 |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1099 tested, skipped, failed = 0, 0, 0 |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1100 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
|
1101 fails = [] |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1102 while fps: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1103 pid, status = os.wait() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1104 fp = fps.pop(pid) |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1105 l = fp.read().splitlines() |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
1106 try: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
1107 test, skip, fail = map(int, l[:3]) |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
1108 except ValueError: |
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
1109 test, skip, fail = 0, 0, 0 |
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
|
1110 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
|
1111 for s in l[3:split]: |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1112 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
|
1113 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
|
1114 fails.append(s.split(" ", 1)) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1115 tested += test |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1116 skipped += skip |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1117 failed += fail |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1118 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
|
1119 failures |= status |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1120 print |
14447
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1121 skipped += len(blacklisted) |
9580
25858f9e65e8
run-tests: add --noskips option
Matt Mackall <mpm@selenic.com>
parents:
9408
diff
changeset
|
1122 if not options.noskips: |
25858f9e65e8
run-tests: add --noskips option
Matt Mackall <mpm@selenic.com>
parents:
9408
diff
changeset
|
1123 for s in skips: |
25858f9e65e8
run-tests: add --noskips option
Matt Mackall <mpm@selenic.com>
parents:
9408
diff
changeset
|
1124 print "Skipped %s: %s" % (s[0], s[1]) |
14447
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1125 for s in blacklisted: |
f63b7fb4b5f6
run-tests: fix --blacklist with jobs > 1
Idan Kamara <idankk86@gmail.com>
parents:
14446
diff
changeset
|
1126 print "Skipped %s: blacklisted" % 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
|
1127 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
|
1128 print "Failed %s: %s" % (s[0], s[1]) |
6982
9fc5bf4adbcf
imported patch test-check
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6681
diff
changeset
|
1129 |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1130 _checkhglib("Tested") |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1131 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
|
1132 tested, skipped, failed) |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
1133 |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
1134 if options.anycoverage: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
1135 outputcoverage(options) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1136 sys.exit(failures != 0) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1137 |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
1138 results = dict(p=[], f=[], s=[], i=[]) |
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
1139 resultslock = threading.Lock() |
14002
a738c30d4b18
run-tests: add a lock for console I/O
Matt Mackall <mpm@selenic.com>
parents:
14001
diff
changeset
|
1140 iolock = threading.Lock() |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
1141 |
13995
b29b7cbc252f
run-tests: move test loop into a helper function
Matt Mackall <mpm@selenic.com>
parents:
13994
diff
changeset
|
1142 def runqueue(options, tests, results): |
b29b7cbc252f
run-tests: move test loop into a helper function
Matt Mackall <mpm@selenic.com>
parents:
13994
diff
changeset
|
1143 for test in tests: |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
1144 ret = runone(options, test) |
13995
b29b7cbc252f
run-tests: move test loop into a helper function
Matt Mackall <mpm@selenic.com>
parents:
13994
diff
changeset
|
1145 if options.first and ret is not None and not ret: |
b29b7cbc252f
run-tests: move test loop into a helper function
Matt Mackall <mpm@selenic.com>
parents:
13994
diff
changeset
|
1146 break |
b29b7cbc252f
run-tests: move test loop into a helper function
Matt Mackall <mpm@selenic.com>
parents:
13994
diff
changeset
|
1147 |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1148 def runtests(options, tests): |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1149 global DAEMON_PIDS, HGRCPATH |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1150 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
|
1151 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
|
1152 |
2258
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
1153 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
|
1154 if INST: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
1155 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
|
1156 _checkhglib("Testing") |
6982
9fc5bf4adbcf
imported patch test-check
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6681
diff
changeset
|
1157 |
3625 | 1158 if options.restart: |
1159 orig = list(tests) | |
1160 while tests: | |
1161 if os.path.exists(tests[0] + ".err"): | |
1162 break | |
1163 tests.pop(0) | |
1164 if not tests: | |
1165 print "running all tests" | |
1166 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
|
1167 |
13995
b29b7cbc252f
run-tests: move test loop into a helper function
Matt Mackall <mpm@selenic.com>
parents:
13994
diff
changeset
|
1168 runqueue(options, tests, results) |
3625 | 1169 |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1170 failed = len(results['f']) |
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1171 tested = len(results['p']) + failed |
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1172 skipped = len(results['s']) |
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1173 ignored = len(results['i']) |
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1174 |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1175 if options.child: |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1176 fp = os.fdopen(options.child, 'w') |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1177 fp.write('%d\n%d\n%d\n' % (tested, skipped, failed)) |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1178 for s in results['s']: |
5760
0145f9afb0e7
Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5685
diff
changeset
|
1179 fp.write("%s %s\n" % s) |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1180 for s in results['f']: |
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
|
1181 fp.write("%s %s\n" % s) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1182 fp.close() |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1183 else: |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1184 print |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1185 for s in results['s']: |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1186 print "Skipped %s: %s" % s |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1187 for s in results['f']: |
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
|
1188 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
|
1189 _checkhglib("Tested") |
5470
8374f3f081f2
tests: tidy up reporting of skipped tests
Matt Mackall <mpm@selenic.com>
parents:
5388
diff
changeset
|
1190 print "# Ran %d tests, %d skipped, %d failed." % ( |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1191 tested, skipped + ignored, failed) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1192 |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
1193 if options.anycoverage: |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
1194 outputcoverage(options) |
2258
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
1195 except KeyboardInterrupt: |
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
1196 failed = True |
7e43d68f3900
catch KeyboardInterrupt in run-tests
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2247
diff
changeset
|
1197 print "\ninterrupted!" |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1198 |
13994
f31a5b7f5c07
run-tests: use a results dict
Matt Mackall <mpm@selenic.com>
parents:
13993
diff
changeset
|
1199 if failed: |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1200 sys.exit(1) |
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1201 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1202 def main(): |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
1203 (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
|
1204 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
|
1205 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
|
1206 |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
1207 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
|
1208 |
12677
9848a94e2ad6
run-tests.py: do not install hg when the tests do no exist
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
12643
diff
changeset
|
1209 if len(args) == 0: |
9848a94e2ad6
run-tests.py: do not install hg when the tests do no exist
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
12643
diff
changeset
|
1210 args = os.listdir(".") |
9848a94e2ad6
run-tests.py: do not install hg when the tests do no exist
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
12643
diff
changeset
|
1211 args.sort() |
9848a94e2ad6
run-tests.py: do not install hg when the tests do no exist
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
12643
diff
changeset
|
1212 |
13989
55ba68a4dd28
run-tests: move existence/name format check into runone
Matt Mackall <mpm@selenic.com>
parents:
13988
diff
changeset
|
1213 tests = args |
12677
9848a94e2ad6
run-tests.py: do not install hg when the tests do no exist
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
12643
diff
changeset
|
1214 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1215 # 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
|
1216 # the tests produce repeatable output. |
9931
a0680daed7b2
run-tests: LANGUAGE may make tests fail
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
9707
diff
changeset
|
1217 os.environ['LANG'] = os.environ['LC_ALL'] = os.environ['LANGUAGE'] = 'C' |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1218 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
|
1219 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
|
1220 os.environ['CDPATH'] = '' |
9913
e3237af51def
run-tests: always set $COLUMNS, fix running tests under emacs shell
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9899
diff
changeset
|
1221 os.environ['COLUMNS'] = '80' |
10750
92ff2d0b751a
run-tests: make sure GREP_OPTIONS isn't set
Brodie Rao <brodie@bitheap.org>
parents:
10648
diff
changeset
|
1222 os.environ['GREP_OPTIONS'] = '' |
10154
d4a62b6d4a58
run-tests.py: clears http_proxy for all tests
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
9939
diff
changeset
|
1223 os.environ['http_proxy'] = '' |
15344
ec50fe3f7a76
run-tests: make sure no_proxy/NO_PROXY are empty to fix test-http-proxy.t
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15248
diff
changeset
|
1224 os.environ['no_proxy'] = '' |
ec50fe3f7a76
run-tests: make sure no_proxy/NO_PROXY are empty to fix test-http-proxy.t
Thomas Arendsen Hein <thomas@intevation.de>
parents:
15248
diff
changeset
|
1225 os.environ['NO_PROXY'] = '' |
16613
6a7ce975edd6
tests: set a standard terminal type
Matt Mackall <mpm@selenic.com>
parents:
16538
diff
changeset
|
1226 os.environ['TERM'] = 'xterm' |
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
|
1227 |
10902
4eb6311d217a
run-tests.py: reset env variables set by hooks
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10648
diff
changeset
|
1228 # unset env related to hooks |
4eb6311d217a
run-tests.py: reset env variables set by hooks
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10648
diff
changeset
|
1229 for k in os.environ.keys(): |
4eb6311d217a
run-tests.py: reset env variables set by hooks
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10648
diff
changeset
|
1230 if k.startswith('HG_'): |
10923
1782278bab8a
run-tests.py: can't remove from os.environ on solaris
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10904
diff
changeset
|
1231 # can't remove on solaris |
1782278bab8a
run-tests.py: can't remove from os.environ on solaris
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10904
diff
changeset
|
1232 os.environ[k] = '' |
10902
4eb6311d217a
run-tests.py: reset env variables set by hooks
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10648
diff
changeset
|
1233 del os.environ[k] |
4eb6311d217a
run-tests.py: reset env variables set by hooks
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10648
diff
changeset
|
1234 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1235 global TESTDIR, HGTMP, INST, BINDIR, PYTHONDIR, COVERAGE_FILE |
16897
2774576dee4d
tests/run-tests: avoid C:/ in arguments
Adrian Buehlmann <adrian@cadifra.com>
parents:
16890
diff
changeset
|
1236 TESTDIR = os.environ["TESTDIR"] = os.getcwd() |
9706
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1237 if options.tmpdir: |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1238 options.keep_tmpdir = True |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1239 tmpdir = options.tmpdir |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1240 if os.path.exists(tmpdir): |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1241 # Meaning of tmpdir has changed since 1.3: we used to create |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1242 # HGTMP inside tmpdir; now HGTMP is tmpdir. So fail if |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1243 # tmpdir already exists. |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1244 sys.exit("error: temp dir %r already exists" % tmpdir) |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1245 |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1246 # Automatically removing tmpdir sounds convenient, but could |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1247 # really annoy anyone in the habit of using "--tmpdir=/tmp" |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1248 # or "--tmpdir=$HOME". |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1249 #vlog("# Removing temp dir", tmpdir) |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1250 #shutil.rmtree(tmpdir) |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1251 os.makedirs(tmpdir) |
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1252 else: |
16890
4d95878712ad
tests/run-tests: use $TMP on Windows (issue3490)
Adrian Buehlmann <adrian@cadifra.com>
parents:
16842
diff
changeset
|
1253 d = None |
4d95878712ad
tests/run-tests: use $TMP on Windows (issue3490)
Adrian Buehlmann <adrian@cadifra.com>
parents:
16842
diff
changeset
|
1254 if os.name == 'nt': |
4d95878712ad
tests/run-tests: use $TMP on Windows (issue3490)
Adrian Buehlmann <adrian@cadifra.com>
parents:
16842
diff
changeset
|
1255 # without this, we get the default temp dir location, but |
4d95878712ad
tests/run-tests: use $TMP on Windows (issue3490)
Adrian Buehlmann <adrian@cadifra.com>
parents:
16842
diff
changeset
|
1256 # in all lowercase, which causes troubles with paths (issue3490) |
4d95878712ad
tests/run-tests: use $TMP on Windows (issue3490)
Adrian Buehlmann <adrian@cadifra.com>
parents:
16842
diff
changeset
|
1257 d = os.getenv('TMP') |
4d95878712ad
tests/run-tests: use $TMP on Windows (issue3490)
Adrian Buehlmann <adrian@cadifra.com>
parents:
16842
diff
changeset
|
1258 tmpdir = tempfile.mkdtemp('', 'hgtests.', d) |
9706
f8b4df4b033d
run-tests: make --tmpdir option more useful.
Greg Ward <greg-hg@gerg.ca>
parents:
9582
diff
changeset
|
1259 HGTMP = os.environ['HGTMP'] = os.path.realpath(tmpdir) |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1260 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
|
1261 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
|
1262 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1263 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
|
1264 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
|
1265 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
|
1266 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
|
1267 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
|
1268 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
|
1269 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
|
1270 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
|
1271 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1272 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
|
1273 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
|
1274 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
|
1275 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
1276 # 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
|
1277 # 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
|
1278 # "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
|
1279 # 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
|
1280 # ... 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
|
1281 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
|
1282 else: |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1283 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
|
1284 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
|
1285 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
|
1286 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
1287 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
|
1288 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
|
1289 |
0941ee76489e
run-tests: redefine --with-hg so it takes the 'hg' script to run.
Greg Ward <greg-hg@gerg.ca>
parents:
8673
diff
changeset
|
1290 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
|
1291 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
|
1292 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
|
1293 |
8724
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
1294 # 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
|
1295 # 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
|
1296 # adds an extension to HGRC |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
1297 pypath = [PYTHONDIR, TESTDIR] |
8687
78ab2a12b4d9
run-tests: don't replace PYTHONPATH, just augment it.
Greg Ward <greg-hg@gerg.ca>
parents:
8674
diff
changeset
|
1298 # 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
|
1299 # 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
|
1300 # 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
|
1301 # are in /opt/subversion.) |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
1302 oldpypath = os.environ.get(IMPL_PATH) |
8724
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
1303 if oldpypath: |
6e41d3c5619f
Unbreak run-tests support for out-of-tree extensions
Brendan Cully <brendan@kublai.com>
parents:
8696
diff
changeset
|
1304 pypath.append(oldpypath) |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
1305 os.environ[IMPL_PATH] = 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
|
1306 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1307 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
|
1308 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1309 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
|
1310 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
|
1311 vlog("# Using PATH", os.environ["PATH"]) |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
1312 vlog("# Using", IMPL_PATH, os.environ[IMPL_PATH]) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1313 |
8094
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1314 try: |
60a9e3cf0cf4
run-tests: factor out main(); reduce use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8093
diff
changeset
|
1315 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
|
1316 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
|
1317 else: |
8672
d6b243731763
run-tests: factor out _checkhglib() to check import path of 'mercurial'.
Greg Ward <greg-hg@gerg.ca>
parents:
8671
diff
changeset
|
1318 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
|
1319 finally: |
16346
48692b416fbc
tests: shorten post-test sleeps
Matt Mackall <mpm@selenic.com>
parents:
15942
diff
changeset
|
1320 time.sleep(.1) |
8097
eea3c1a8fba8
run-tests: removed some underscores (coding style)
Martin Geisler <mg@lazybytes.net>
parents:
8096
diff
changeset
|
1321 cleanup(options) |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
1322 |
13347
ce07defe7d9f
run-tests: loadable as module
Simon Heimberg <simohe@besonet.ch>
parents:
13031
diff
changeset
|
1323 if __name__ == '__main__': |
ce07defe7d9f
run-tests: loadable as module
Simon Heimberg <simohe@besonet.ch>
parents:
13031
diff
changeset
|
1324 main() |