Mercurial > hg-stable
annotate tests/run-tests.py @ 48948:41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
This doesn't account for all of the references to PYTHON3. But it
accounts for the ones that are more trivial and don't entail logical
changes.
Differential Revision: https://phab.mercurial-scm.org/D12235
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 20 Feb 2022 13:16:44 -0700 |
parents | 078e1e1cc7da |
children | 9d01ab54df3f |
rev | line source |
---|---|
45849
c102b704edb5
global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
45845
diff
changeset
|
1 #!/usr/bin/env python3 |
2110
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 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46767
diff
changeset
|
5 # Copyright 2006 Olivia Mackall <olivia@selenic.com> |
2110
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 |
26158
342ab95a1f4b
run-tests: use $HGTEST_RUN_TESTS_PURE
timeless@mozdev.org
parents:
26109
diff
changeset
|
38 # 10) parallel, pure, tests that call run-tests: |
342ab95a1f4b
run-tests: use $HGTEST_RUN_TESTS_PURE
timeless@mozdev.org
parents:
26109
diff
changeset
|
39 # ./run-tests.py --pure `grep -l run-tests.py *.t` |
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
|
40 # |
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 # (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
|
42 # 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
|
43 # 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
|
44 # 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
|
45 |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
46 from __future__ import absolute_import, print_function |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
47 |
48947
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
48 |
35198
b4b0aed7bfaf
run-tests: convert to argparse
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35176
diff
changeset
|
49 import argparse |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
50 import collections |
45970
064449f9fdc2
run-tests: use a context manager when looking for available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
51 import contextlib |
2571
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 difflib |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
53 import distutils.version as 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
|
54 import errno |
28126
562a073a2a1b
tests: load json with no fallback
Yuya Nishihara <yuya@tcha.org>
parents:
28099
diff
changeset
|
55 import json |
40245
e7e70c033783
run-tests: run tests with as many processes as cores by default
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40244
diff
changeset
|
56 import multiprocessing |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
57 import os |
44501
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
58 import platform |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
59 import random |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
60 import re |
10905
13a1b2fb7ef2
pylint, pyflakes: remove unused or duplicate imports
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10903
diff
changeset
|
61 import shutil |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
62 import signal |
24967
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
63 import socket |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
64 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
|
65 import sys |
32342
8627cf4de929
run-tests: drop fallback for sysconfig for pre-py2.7
Martin von Zweigbergk <martinvonz@google.com>
parents:
31950
diff
changeset
|
66 import sysconfig |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
67 import tempfile |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
68 import threading |
2571
83cfd95eafb5
tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2570
diff
changeset
|
69 import time |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
70 import unittest |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
71 import uuid |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
72 import xml.dom.minidom as minidom |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
73 |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
74 WINDOWS = os.name == r'nt' |
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
75 |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
76 try: |
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
77 import Queue as queue |
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
78 except ImportError: |
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
79 import queue |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
80 |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
81 try: |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
82 import shlex |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
83 |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
84 shellquote = shlex.quote |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
85 except (ImportError, AttributeError): |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
86 import pipes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
87 |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
88 shellquote = pipes.quote |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
89 |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
90 |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
91 processlock = threading.Lock() |
19413
a4de0d3dc35a
run-tests: lock popen wait/poll
Brendan Cully <brendan@kublai.com>
parents:
19407
diff
changeset
|
92 |
33552
754569f5e999
run-tests: make sure to check if pygments is installed before using it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33500
diff
changeset
|
93 pygmentspresent = False |
47319
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
94 try: # is pygments installed |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
95 import pygments |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
96 import pygments.lexers as lexers |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
97 import pygments.lexer as lexer |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
98 import pygments.formatters as formatters |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
99 import pygments.token as token |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
100 import pygments.style as style |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
101 |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
102 if WINDOWS: |
47319
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
103 hgpath = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
104 sys.path.append(hgpath) |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
105 try: |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
106 from mercurial import win32 # pytype: disable=import-error |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
107 |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
108 # Don't check the result code because it fails on heptapod, but |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
109 # something is able to convert to color anyway. |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
110 win32.enablevtmode() |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
111 finally: |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
112 sys.path = sys.path[:-1] |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
113 |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
114 pygmentspresent = True |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
115 difflexer = lexers.DiffLexer() |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
116 terminal256formatter = formatters.Terminal256Formatter() |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
117 except ImportError: |
bb4606f35d37
run-tests: enable color on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47244
diff
changeset
|
118 pass |
33420
e80041832eec
run-tests: add color to output if pygments is available
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33203
diff
changeset
|
119 |
33835
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
120 if pygmentspresent: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
121 |
33835
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
122 class TestRunnerStyle(style.Style): |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
123 default_style = "" |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
124 skipped = token.string_to_tokentype("Token.Generic.Skipped") |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
125 failed = token.string_to_tokentype("Token.Generic.Failed") |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
126 skippedname = token.string_to_tokentype("Token.Generic.SName") |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
127 failedname = token.string_to_tokentype("Token.Generic.FName") |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
128 styles = { |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
129 skipped: '#e5e5e5', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
130 skippedname: '#00ffff', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
131 failed: '#7f0000', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
132 failedname: '#ff0000', |
33835
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
133 } |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
134 |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
135 class TestRunnerLexer(lexer.RegexLexer): |
38302
b5651ae53127
run-tests: restrict the test cases allowed characters
Boris Feld <boris.feld@octobus.net>
parents:
38263
diff
changeset
|
136 testpattern = r'[\w-]+\.(t|py)(#[a-zA-Z0-9_\-\.]+)?' |
33835
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
137 tokens = { |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
138 'root': [ |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
139 (r'^Skipped', token.Generic.Skipped, 'skipped'), |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
140 (r'^Failed ', token.Generic.Failed, 'failed'), |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
141 (r'^ERROR: ', token.Generic.Failed, 'failed'), |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
142 ], |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
143 'skipped': [ |
35888
8a7140ec4c89
testrunner: on error, color the "(case xxx)" part the same as filename
Martin von Zweigbergk <martinvonz@google.com>
parents:
35863
diff
changeset
|
144 (testpattern, token.Generic.SName), |
33835
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
145 (r':.*', token.Generic.Skipped), |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
146 ], |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
147 'failed': [ |
35888
8a7140ec4c89
testrunner: on error, color the "(case xxx)" part the same as filename
Martin von Zweigbergk <martinvonz@google.com>
parents:
35863
diff
changeset
|
148 (testpattern, token.Generic.FName), |
33835
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
149 (r'(:| ).*', token.Generic.Failed), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
150 ], |
33835
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
151 } |
81b12f69ef5b
run-tests: also color the summary messages (skipped, failed...)
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33736
diff
changeset
|
152 |
33885
4e8a46c25fac
run-tests: pre instantiate pygments objects
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33835
diff
changeset
|
153 runnerformatter = formatters.Terminal256Formatter(style=TestRunnerStyle) |
4e8a46c25fac
run-tests: pre instantiate pygments objects
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33835
diff
changeset
|
154 runnerlexer = TestRunnerLexer() |
4e8a46c25fac
run-tests: pre instantiate pygments objects
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33835
diff
changeset
|
155 |
39661
13179f97f697
py3: ensure run-tests.osenvironb is actually bytes
Matt Harbison <matt_harbison@yahoo.com>
parents:
39605
diff
changeset
|
156 origenviron = os.environ.copy() |
13179f97f697
py3: ensure run-tests.osenvironb is actually bytes
Matt Harbison <matt_harbison@yahoo.com>
parents:
39605
diff
changeset
|
157 |
48947
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
158 if sys.version_info < (3, 5, 0): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
159 print( |
48947
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
160 '%s is only supported on Python 3.5+, not %s' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
161 % (sys.argv[0], '.'.join(str(v) for v in sys.version_info[:3])) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
162 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
163 sys.exit(70) # EX_SOFTWARE from `man 3 sysexit` |
48947
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
164 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
165 PYTHON3 = True |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
166 xrange = range # we use xrange in one place, and we'd rather not use range |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
167 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
168 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
169 def _sys2bytes(p): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
170 if p is None: |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
171 return p |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
172 return p.encode('utf-8') |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
173 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
174 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
175 def _bytes2sys(p): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
176 if p is None: |
25161
4d30467d944e
run-tests: move unicode-to-bytes operations on paths to a helper (issue4667)
Augie Fackler <augie@google.com>
parents:
25160
diff
changeset
|
177 return p |
48947
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
178 return p.decode('utf-8') |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
179 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
180 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
181 osenvironb = getattr(os, 'environb', None) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
182 if osenvironb is None: |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
183 # Windows lacks os.environb, for instance. A proxy over the real thing |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
184 # instead of a copy allows the environment to be updated via bytes on |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
185 # all platforms. |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
186 class environbytes(object): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
187 def __init__(self, strenv): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
188 self.__len__ = strenv.__len__ |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
189 self.clear = strenv.clear |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
190 self._strenv = strenv |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
191 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
192 def __getitem__(self, k): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
193 v = self._strenv.__getitem__(_bytes2sys(k)) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
194 return _sys2bytes(v) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
195 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
196 def __setitem__(self, k, v): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
197 self._strenv.__setitem__(_bytes2sys(k), _bytes2sys(v)) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
198 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
199 def __delitem__(self, k): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
200 self._strenv.__delitem__(_bytes2sys(k)) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
201 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
202 def __contains__(self, k): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
203 return self._strenv.__contains__(_bytes2sys(k)) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
204 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
205 def __iter__(self): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
206 return iter([_sys2bytes(k) for k in iter(self._strenv)]) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
207 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
208 def get(self, k, default=None): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
209 v = self._strenv.get(_bytes2sys(k), _bytes2sys(default)) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
210 return _sys2bytes(v) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
211 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
212 def pop(self, k, default=None): |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
213 v = self._strenv.pop(_bytes2sys(k), _bytes2sys(default)) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
214 return _sys2bytes(v) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
215 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
216 osenvironb = environbytes(os.environ) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
217 |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
218 getcwdb = getattr(os, 'getcwdb') |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
219 if not getcwdb or WINDOWS: |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
220 getcwdb = lambda: _sys2bytes(os.getcwd()) |
078e1e1cc7da
tests: require Python 3.5+ in run-tests.py
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48745
diff
changeset
|
221 |
25162
153b9c5235c2
run-tests: replace open-coded .decode()s on paths with a helper (issue4667)
Augie Fackler <augie@google.com>
parents:
25161
diff
changeset
|
222 |
47619
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
223 if WINDOWS: |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
224 _getcwdb = getcwdb |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
225 |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
226 def getcwdb(): |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
227 cwd = _getcwdb() |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
228 if re.match(b'^[a-z]:', cwd): |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
229 # os.getcwd() is inconsistent on the capitalization of the drive |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
230 # letter, so adjust it. see https://bugs.python.org/issue40368 |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
231 cwd = cwd[0:1].upper() + cwd[1:] |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
232 return cwd |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
233 |
f0fbe8f4faa6
run-tests: enforce the drive letter from `getcwd` to upper case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47588
diff
changeset
|
234 |
25177
c3459555318e
run-tests: resurrect the wifexited polyfill (backout 6ab5a1c9ea3c)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25162
diff
changeset
|
235 # For Windows support |
c3459555318e
run-tests: resurrect the wifexited polyfill (backout 6ab5a1c9ea3c)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25162
diff
changeset
|
236 wifexited = getattr(os, "WIFEXITED", lambda x: False) |
c3459555318e
run-tests: resurrect the wifexited polyfill (backout 6ab5a1c9ea3c)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25162
diff
changeset
|
237 |
31004
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
238 # Whether to use IPv6 |
31022 | 239 def checksocketfamily(name, port=20058): |
240 """return true if we can listen on localhost using family=name | |
241 | |
242 name should be either 'AF_INET', or 'AF_INET6'. | |
243 port being used is okay - EADDRINUSE is considered as successful. | |
244 """ | |
245 family = getattr(socket, name, None) | |
31004
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
246 if family is None: |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
247 return False |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
248 try: |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
249 s = socket.socket(family, socket.SOCK_STREAM) |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
250 s.bind(('localhost', port)) |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
251 s.close() |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
252 return True |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
253 except socket.error as exc: |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
254 if exc.errno == errno.EADDRINUSE: |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
255 return True |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
256 elif exc.errno in (errno.EADDRNOTAVAIL, errno.EPROTONOSUPPORT): |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
257 return False |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
258 else: |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
259 raise |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
260 else: |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
261 return False |
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
262 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
263 |
31031
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
264 # useipv6 will be set by parseargs |
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
265 useipv6 = None |
31004
15f9084a9a0c
runtests: add a function to test if IPv6 is available
Jun Wu <quark@fb.com>
parents:
30925
diff
changeset
|
266 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
267 |
24967
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
268 def checkportisavailable(port): |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
269 """return true if a port seems free to bind on localhost""" |
31005
1f803482844a
runtests: checkportisavailable should only check one family
Jun Wu <quark@fb.com>
parents:
31004
diff
changeset
|
270 if useipv6: |
1f803482844a
runtests: checkportisavailable should only check one family
Jun Wu <quark@fb.com>
parents:
31004
diff
changeset
|
271 family = socket.AF_INET6 |
1f803482844a
runtests: checkportisavailable should only check one family
Jun Wu <quark@fb.com>
parents:
31004
diff
changeset
|
272 else: |
1f803482844a
runtests: checkportisavailable should only check one family
Jun Wu <quark@fb.com>
parents:
31004
diff
changeset
|
273 family = socket.AF_INET |
31007
1ee685defe80
runtests: unindent an "if True" block
Jun Wu <quark@fb.com>
parents:
31006
diff
changeset
|
274 try: |
45970
064449f9fdc2
run-tests: use a context manager when looking for available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
275 with contextlib.closing(socket.socket(family, socket.SOCK_STREAM)) as s: |
064449f9fdc2
run-tests: use a context manager when looking for available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
45957
diff
changeset
|
276 s.bind(('localhost', port)) |
31007
1ee685defe80
runtests: unindent an "if True" block
Jun Wu <quark@fb.com>
parents:
31006
diff
changeset
|
277 return True |
1ee685defe80
runtests: unindent an "if True" block
Jun Wu <quark@fb.com>
parents:
31006
diff
changeset
|
278 except socket.error as exc: |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
279 if WINDOWS and exc.errno == errno.WSAEACCES: |
46327
85c0c7145f8e
run-tests: catch a Windows specific error when testing for a free socket
Matt Harbison <matt_harbison@yahoo.com>
parents:
46326
diff
changeset
|
280 return False |
47041
6e0af81c43b2
run-tests: ignore PermissionError when checking available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
47014
diff
changeset
|
281 elif PYTHON3: |
6e0af81c43b2
run-tests: ignore PermissionError when checking available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
47014
diff
changeset
|
282 # TODO: make a proper exception handler after dropping py2. This |
6e0af81c43b2
run-tests: ignore PermissionError when checking available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
47014
diff
changeset
|
283 # works because socket.error is an alias for OSError on py3, |
6e0af81c43b2
run-tests: ignore PermissionError when checking available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
47014
diff
changeset
|
284 # which is also the baseclass of PermissionError. |
6e0af81c43b2
run-tests: ignore PermissionError when checking available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
47014
diff
changeset
|
285 if isinstance(exc, PermissionError): |
6e0af81c43b2
run-tests: ignore PermissionError when checking available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
47014
diff
changeset
|
286 return False |
6e0af81c43b2
run-tests: ignore PermissionError when checking available ports
Matt Harbison <matt_harbison@yahoo.com>
parents:
47014
diff
changeset
|
287 if exc.errno not in ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
288 errno.EADDRINUSE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
289 errno.EADDRNOTAVAIL, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
290 errno.EPROTONOSUPPORT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
291 ): |
31007
1ee685defe80
runtests: unindent an "if True" block
Jun Wu <quark@fb.com>
parents:
31006
diff
changeset
|
292 raise |
30918
2aaa8bfc7bd9
runtests: check ports on IPv6 address
Jun Wu <quark@fb.com>
parents:
30716
diff
changeset
|
293 return False |
24967
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
294 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
295 |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
296 closefds = os.name == 'posix' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
297 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
298 |
19262
7864e8f274fe
run-tests: add env dict to isolate test environment
Matt Mackall <mpm@selenic.com>
parents:
19252
diff
changeset
|
299 def Popen4(cmd, wd, timeout, env=None): |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
300 processlock.acquire() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
301 p = subprocess.Popen( |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
302 _bytes2sys(cmd), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
303 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
304 bufsize=-1, |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
305 cwd=_bytes2sys(wd), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
306 env=env, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
307 close_fds=closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
308 stdin=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
309 stdout=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
310 stderr=subprocess.STDOUT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
311 ) |
14019
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
312 processlock.release() |
fbbd5f91d5e1
run-tests: do chdir for tests under a lock for thread safety
Matt Mackall <mpm@selenic.com>
parents:
14018
diff
changeset
|
313 |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
314 p.fromchild = p.stdout |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
315 p.tochild = p.stdin |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
316 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
|
317 |
14337
439ed4721a6d
run-tests: ignore timeout when Popen.terminate is unavailable
Patrick Mezard <pmezard@gmail.com>
parents:
14336
diff
changeset
|
318 p.timeout = False |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
319 if timeout: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
320 |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
321 def t(): |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
322 start = time.time() |
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
323 while time.time() - start < timeout and p.returncode is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
324 time.sleep(0.1) |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
325 p.timeout = True |
46918
248cbe173203
run-test: make it clearer why we terminating process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46870
diff
changeset
|
326 vlog('# Timout reached for process %d' % p.pid) |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
327 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
|
328 terminate(p) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
329 |
14001
9c4da6ab4e5a
run-tests: switch timeout handling from alarm to helper thread
Matt Mackall <mpm@selenic.com>
parents:
14000
diff
changeset
|
330 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
|
331 |
8280
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
332 return p |
0b02d98d44d0
util: always use subprocess
Martin Geisler <mg@lazybytes.net>
parents:
8258
diff
changeset
|
333 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
334 |
42530
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
335 if sys.executable: |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
336 sysexecutable = sys.executable |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
337 elif os.environ.get('PYTHONEXECUTABLE'): |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
338 sysexecutable = os.environ['PYTHONEXECUTABLE'] |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
339 elif os.environ.get('PYTHON'): |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
340 sysexecutable = os.environ['PYTHON'] |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
341 else: |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
342 raise AssertionError('Could not find Python interpreter') |
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
343 |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
344 PYTHON = _sys2bytes(sysexecutable.replace('\\', '/')) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
345 IMPL_PATH = b'PYTHONPATH' |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
346 if 'java' in sys.platform: |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
347 IMPL_PATH = b'JYTHONPATH' |
4881
c51c9bc4579d
Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
4880
diff
changeset
|
348 |
44636
82543879b48e
testlib: adjust wait-on-file timeout according to the global test timeout
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44619
diff
changeset
|
349 default_defaults = { |
40245
e7e70c033783
run-tests: run tests with as many processes as cores by default
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40244
diff
changeset
|
350 'jobs': ('HGTEST_JOBS', multiprocessing.cpu_count()), |
47014
c853bc60c5d6
tests: bump default timeout to 360s
Joerg Sonnenberger <joerg@bec.de>
parents:
46918
diff
changeset
|
351 'timeout': ('HGTEST_TIMEOUT', 360), |
41806
9f53a4e2e193
tests: increase timeout for slow test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41768
diff
changeset
|
352 'slowtimeout': ('HGTEST_SLOWTIMEOUT', 1500), |
6366
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
353 '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
|
354 '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
|
355 } |
07c3cd695b48
run-tests.py: Allow environment variables to set jobs/timeout/port.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6343
diff
changeset
|
356 |
44636
82543879b48e
testlib: adjust wait-on-file timeout according to the global test timeout
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44619
diff
changeset
|
357 defaults = default_defaults.copy() |
82543879b48e
testlib: adjust wait-on-file timeout according to the global test timeout
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44619
diff
changeset
|
358 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
359 |
28644
2e50eb6304bd
run-tests: add canonpath function
timeless <timeless@mozdev.org>
parents:
28620
diff
changeset
|
360 def canonpath(path): |
2e50eb6304bd
run-tests: add canonpath function
timeless <timeless@mozdev.org>
parents:
28620
diff
changeset
|
361 return os.path.realpath(os.path.expanduser(path)) |
2e50eb6304bd
run-tests: add canonpath function
timeless <timeless@mozdev.org>
parents:
28620
diff
changeset
|
362 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
363 |
47588
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
364 def which(exe): |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
365 # shutil.which only accept bytes from 3.8 |
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
366 cmd = _bytes2sys(exe) |
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
367 real_exec = shutil.which(cmd) |
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
368 return _sys2bytes(real_exec) |
47588
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
369 |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
370 |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
371 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
|
372 entries = dict() |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
373 for filename in files: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
374 try: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
375 path = os.path.expanduser(os.path.expandvars(filename)) |
21916
792ebd7dc5f6
run-tests: write out scripts in binary mode
Augie Fackler <raf@durin42.com>
parents:
21763
diff
changeset
|
376 f = open(path, "rb") |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
377 except IOError as err: |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
378 if err.errno != errno.ENOENT: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
379 raise |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
380 if warn: |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
381 print("warning: no such %s file: %s" % (listtype, filename)) |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
382 continue |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
383 |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
384 for line in f.readlines(): |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
385 line = line.split(b'#', 1)[0].strip() |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
386 if line: |
47042
dff19fe2973c
run-tests: fix whitelist/blacklist with directories on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47041
diff
changeset
|
387 # Ensure path entries are compatible with os.path.relpath() |
dff19fe2973c
run-tests: fix whitelist/blacklist with directories on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
47041
diff
changeset
|
388 entries[os.path.normpath(line)] = filename |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
389 |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
390 f.close() |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
391 return entries |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
392 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
393 |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
394 def parsettestcases(path): |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
395 """read a .t test file, return a set of test case names |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
396 |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
397 If path does not exist, return an empty set. |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
398 """ |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
399 cases = [] |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
400 try: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
401 with open(path, 'rb') as f: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
402 for l in f: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
403 if l.startswith(b'#testcases '): |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
404 cases.append(sorted(l[11:].split())) |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
405 except IOError as ex: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
406 if ex.errno != errno.ENOENT: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
407 raise |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
408 return cases |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
409 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
410 |
21008
c1dd04be3d9a
run-tests: allow option parser to be extended
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21007
diff
changeset
|
411 def getparser(): |
21383
772ed56e2519
run-tests: add some docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21382
diff
changeset
|
412 """Obtain the OptionParser used by the CLI.""" |
35198
b4b0aed7bfaf
run-tests: convert to argparse
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35176
diff
changeset
|
413 parser = argparse.ArgumentParser(usage='%(prog)s [options] [tests]') |
11039 | 414 |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
415 selection = parser.add_argument_group('Test Selection') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
416 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
417 '--allow-slow-tests', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
418 action='store_true', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
419 help='allow extremely slow tests', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
420 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
421 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
422 "--blacklist", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
423 action="append", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
424 help="skip tests listed in the specified blacklist file", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
425 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
426 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
427 "--changed", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
428 help="run tests that are changed in parent rev or working directory", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
429 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
430 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
431 "-k", "--keywords", help="run tests matching keywords" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
432 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
433 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
434 "-r", "--retest", action="store_true", help="retest failed tests" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
435 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
436 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
437 "--test-list", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
438 action="append", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
439 help="read tests to run from the specified file", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
440 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
441 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
442 "--whitelist", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
443 action="append", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
444 help="always run tests listed in the specified whitelist file", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
445 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
446 selection.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
447 'tests', metavar='TESTS', nargs='*', help='Tests to run' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
448 ) |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
449 |
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
450 harness = parser.add_argument_group('Test Harness Behavior') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
451 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
452 '--bisect-repo', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
453 metavar='bisect_repo', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
454 help=( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
455 "Path of a repo to bisect. Use together with " "--known-good-rev" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
456 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
457 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
458 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
459 "-d", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
460 "--debug", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
461 action="store_true", |
11039 | 462 help="debug mode: write output of test scripts to console" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
463 " rather than capturing and diffing it (disables timeout)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
464 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
465 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
466 "-f", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
467 "--first", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
468 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
469 help="exit on the first test failure", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
470 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
471 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
472 "-i", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
473 "--interactive", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
474 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
475 help="prompt to accept changed output", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
476 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
477 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
478 "-j", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
479 "--jobs", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
480 type=int, |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
481 help="number of jobs to run in parallel" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
482 " (default: $%s or %d)" % defaults['jobs'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
483 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
484 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
485 "--keep-tmpdir", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
486 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
487 help="keep temporary directory after running tests", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
488 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
489 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
490 '--known-good-rev', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
491 metavar="known_good_rev", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
492 help=( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
493 "Automatically bisect any failures using this " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
494 "revision as a known-good revision." |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
495 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
496 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
497 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
498 "--list-tests", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
499 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
500 help="list tests instead of running them", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
501 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
502 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
503 "--loop", action="store_true", help="loop tests repeatedly" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
504 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
505 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
506 '--random', action="store_true", help='run tests in random order' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
507 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
508 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
509 '--order-by-runtime', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
510 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
511 help='run slowest tests first, according to .testtimes', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
512 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
513 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
514 "-p", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
515 "--port", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
516 type=int, |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
517 help="port on which servers should listen" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
518 " (default: $%s or %d)" % defaults['port'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
519 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
520 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
521 '--profile-runner', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
522 action='store_true', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
523 help='run statprof on run-tests', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
524 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
525 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
526 "-R", "--restart", action="store_true", help="restart at last error" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
527 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
528 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
529 "--runs-per-test", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
530 type=int, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
531 dest="runs_per_test", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
532 help="run each test N times (default=1)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
533 default=1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
534 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
535 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
536 "--shell", help="shell to use (default: $%s or %s)" % defaults['shell'] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
537 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
538 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
539 '--showchannels', action='store_true', help='show scheduling channels' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
540 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
541 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
542 "--slowtimeout", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
543 type=int, |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
544 help="kill errant slow tests after SLOWTIMEOUT seconds" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
545 " (default: $%s or %d)" % defaults['slowtimeout'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
546 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
547 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
548 "-t", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
549 "--timeout", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
550 type=int, |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
551 help="kill errant tests after TIMEOUT seconds" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
552 " (default: $%s or %d)" % defaults['timeout'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
553 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
554 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
555 "--tmpdir", |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
556 help="run tests in the given temporary directory" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
557 " (implies --keep-tmpdir)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
558 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
559 harness.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
560 "-v", "--verbose", action="store_true", help="output verbose messages" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
561 ) |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
562 |
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
563 hgconf = parser.add_argument_group('Mercurial Configuration') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
564 hgconf.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
565 "--chg", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
566 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
567 help="install and use chg wrapper in place of hg", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
568 ) |
44619
78a8f65eacc8
run-tests: add --chg-debug flag to show chg debug output
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44586
diff
changeset
|
569 hgconf.add_argument( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
570 "--chg-debug", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
571 action="store_true", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
572 help="show chg debug logs", |
44619
78a8f65eacc8
run-tests: add --chg-debug flag to show chg debug output
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44586
diff
changeset
|
573 ) |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
574 hgconf.add_argument( |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
575 "--rhg", |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
576 action="store_true", |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
577 help="install and use rhg Rust implementation in place of hg", |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
578 ) |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
579 hgconf.add_argument( |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
580 "--pyoxidized", |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
581 action="store_true", |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
582 help="build the hg binary using pyoxidizer", |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
583 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
584 hgconf.add_argument("--compiler", help="compiler to build with") |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
585 hgconf.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
586 '--extra-config-opt', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
587 action="append", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
588 default=[], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
589 help='set the given config opt in the test hgrc', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
590 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
591 hgconf.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
592 "-l", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
593 "--local", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
594 action="store_true", |
29583
6ce870dba6fa
run-tests: make --local set --with-chg if --chg is used
Jun Wu <quark@fb.com>
parents:
29582
diff
changeset
|
595 help="shortcut for --with-hg=<testdir>/../hg, " |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
596 "--with-rhg=<testdir>/../rust/target/release/rhg if --rhg is set, " |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
597 "and --with-chg=<testdir>/../contrib/chg/chg if --chg is set", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
598 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
599 hgconf.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
600 "--ipv6", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
601 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
602 help="prefer IPv6 to IPv4 for network related tests", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
603 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
604 hgconf.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
605 "--pure", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
606 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
607 help="use pure Python code instead of C extensions", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
608 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
609 hgconf.add_argument( |
44501
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
610 "--rust", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
611 action="store_true", |
44501
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
612 help="use Rust code alongside C extensions", |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
613 ) |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
614 hgconf.add_argument( |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
615 "--no-rust", |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
616 action="store_true", |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
617 help="do not use Rust code even if compiled", |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
618 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
619 hgconf.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
620 "--with-chg", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
621 metavar="CHG", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
622 help="use specified chg wrapper in place of hg", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
623 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
624 hgconf.add_argument( |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
625 "--with-rhg", |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
626 metavar="RHG", |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
627 help="use specified rhg Rust implementation in place of hg", |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
628 ) |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
629 hgconf.add_argument( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
630 "--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
|
631 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
|
632 help="test using specified hg script rather than a " |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
633 "temporary installation", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
634 ) |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
635 |
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
636 reporting = parser.add_argument_group('Results Reporting') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
637 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
638 "-C", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
639 "--annotate", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
640 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
641 help="output files annotated with coverage", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
642 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
643 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
644 "--color", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
645 choices=["always", "auto", "never"], |
35199
d997b82152e8
run-tests: organize options into argument groups
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35198
diff
changeset
|
646 default=os.environ.get('HGRUNTESTSCOLOR', 'auto'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
647 help="colorisation: always|auto|never (default: auto)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
648 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
649 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
650 "-c", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
651 "--cover", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
652 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
653 help="print a test coverage report", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
654 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
655 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
656 '--exceptions', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
657 action='store_true', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
658 help='log all exceptions and generate an exception report', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
659 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
660 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
661 "-H", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
662 "--htmlcov", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
663 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
664 help="create an HTML report of the coverage of the files", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
665 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
666 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
667 "--json", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
668 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
669 help="store test result data in 'report.json' file", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
670 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
671 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
672 "--outputdir", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
673 help="directory to write error logs to (default=test directory)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
674 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
675 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
676 "-n", "--nodiff", action="store_true", help="skip showing test changes" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
677 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
678 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
679 "-S", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
680 "--noskips", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
681 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
682 help="don't report skip tests verbosely", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
683 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
684 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
685 "--time", action="store_true", help="time how long each test takes" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
686 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
687 reporting.add_argument("--view", help="external diff viewer") |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
688 reporting.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
689 "--xunit", help="record xunit results at specified path" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
690 ) |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
691 |
14201
57e04ded3da4
run-tests: use type of default to convert environment variable
Martin Geisler <mg@lazybytes.net>
parents:
14192
diff
changeset
|
692 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
|
693 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
|
694 parser.set_defaults(**defaults) |
21008
c1dd04be3d9a
run-tests: allow option parser to be extended
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21007
diff
changeset
|
695 |
c1dd04be3d9a
run-tests: allow option parser to be extended
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21007
diff
changeset
|
696 return parser |
c1dd04be3d9a
run-tests: allow option parser to be extended
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21007
diff
changeset
|
697 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
698 |
21008
c1dd04be3d9a
run-tests: allow option parser to be extended
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21007
diff
changeset
|
699 def parseargs(args, parser): |
21383
772ed56e2519
run-tests: add some docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21382
diff
changeset
|
700 """Parse arguments with our OptionParser and validate results.""" |
35198
b4b0aed7bfaf
run-tests: convert to argparse
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35176
diff
changeset
|
701 options = parser.parse_args(args) |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
702 |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
703 # 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
|
704 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
|
705 options.pure = True |
10758
2ed667a9dfcb
tests: adapt the test runner to work with jython
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
10750
diff
changeset
|
706 |
44501
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
707 if platform.python_implementation() != 'CPython' and options.rust: |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
708 parser.error('Rust extensions are only available with CPython') |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
709 |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
710 if options.pure and options.rust: |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
711 parser.error('--rust cannot be used with --pure') |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
712 |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
713 if options.rust and options.no_rust: |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
714 parser.error('--rust cannot be used with --no-rust') |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
715 |
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
|
716 if options.local: |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
717 if options.with_hg or options.with_rhg or options.with_chg: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
718 parser.error( |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
719 '--local cannot be used with --with-hg or --with-rhg or --with-chg' |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
720 ) |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
721 if options.pyoxidized: |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
722 parser.error('--pyoxidized does not work with --local (yet)') |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
723 testdir = os.path.dirname(_sys2bytes(canonpath(sys.argv[0]))) |
29582
ee96d95e81a4
run-tests: allow --local to set multiple attributes
Jun Wu <quark@fb.com>
parents:
29518
diff
changeset
|
724 reporootdir = os.path.dirname(testdir) |
ee96d95e81a4
run-tests: allow --local to set multiple attributes
Jun Wu <quark@fb.com>
parents:
29518
diff
changeset
|
725 pathandattrs = [(b'hg', 'with_hg')] |
29583
6ce870dba6fa
run-tests: make --local set --with-chg if --chg is used
Jun Wu <quark@fb.com>
parents:
29582
diff
changeset
|
726 if options.chg: |
6ce870dba6fa
run-tests: make --local set --with-chg if --chg is used
Jun Wu <quark@fb.com>
parents:
29582
diff
changeset
|
727 pathandattrs.append((b'contrib/chg/chg', 'with_chg')) |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
728 if options.rhg: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
729 pathandattrs.append((b'rust/target/release/rhg', 'with_rhg')) |
29582
ee96d95e81a4
run-tests: allow --local to set multiple attributes
Jun Wu <quark@fb.com>
parents:
29518
diff
changeset
|
730 for relpath, attr in pathandattrs: |
ee96d95e81a4
run-tests: allow --local to set multiple attributes
Jun Wu <quark@fb.com>
parents:
29518
diff
changeset
|
731 binpath = os.path.join(reporootdir, relpath) |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
732 if not (WINDOWS or os.access(binpath, os.X_OK)): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
733 parser.error( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
734 '--local specified, but %r not found or ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
735 'not executable' % binpath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
736 ) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
737 setattr(options, attr, _bytes2sys(binpath)) |
42827
69506e1b3214
run-tests: handle --local before --with-hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
42826
diff
changeset
|
738 |
69506e1b3214
run-tests: handle --local before --with-hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
42826
diff
changeset
|
739 if options.with_hg: |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
740 options.with_hg = canonpath(_sys2bytes(options.with_hg)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
741 if not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
742 os.path.isfile(options.with_hg) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
743 and os.access(options.with_hg, os.X_OK) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
744 ): |
42827
69506e1b3214
run-tests: handle --local before --with-hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
42826
diff
changeset
|
745 parser.error('--with-hg must specify an executable hg script') |
69506e1b3214
run-tests: handle --local before --with-hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
42826
diff
changeset
|
746 if os.path.basename(options.with_hg) not in [b'hg', b'hg.exe']: |
47583
05abe1ff1edd
run-test: clarify the error with a bad --with-hg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47577
diff
changeset
|
747 msg = 'warning: --with-hg should specify an hg script, not: %s\n' |
05abe1ff1edd
run-test: clarify the error with a bad --with-hg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47577
diff
changeset
|
748 msg %= _bytes2sys(os.path.basename(options.with_hg)) |
05abe1ff1edd
run-test: clarify the error with a bad --with-hg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47577
diff
changeset
|
749 sys.stderr.write(msg) |
42827
69506e1b3214
run-tests: handle --local before --with-hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
42826
diff
changeset
|
750 sys.stderr.flush() |
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
|
751 |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
752 if (options.chg or options.with_chg) and WINDOWS: |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
753 parser.error('chg does not work on %s' % os.name) |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
754 if (options.rhg or options.with_rhg) and WINDOWS: |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
755 parser.error('rhg does not work on %s' % os.name) |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
756 if options.pyoxidized and not WINDOWS: |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
757 parser.error('--pyoxidized is currently Windows only') |
28142
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
758 if options.with_chg: |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
759 options.chg = False # no installation to temporary location |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
760 options.with_chg = canonpath(_sys2bytes(options.with_chg)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
761 if not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
762 os.path.isfile(options.with_chg) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
763 and os.access(options.with_chg, os.X_OK) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
764 ): |
28142
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
765 parser.error('--with-chg must specify a chg executable') |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
766 if options.with_rhg: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
767 options.rhg = False # no installation to temporary location |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
768 options.with_rhg = canonpath(_sys2bytes(options.with_rhg)) |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
769 if not ( |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
770 os.path.isfile(options.with_rhg) |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
771 and os.access(options.with_rhg, os.X_OK) |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
772 ): |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
773 parser.error('--with-rhg must specify a rhg executable') |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
774 if options.chg and options.with_hg: |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
775 # chg shares installation location with hg |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
776 parser.error( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
777 '--chg does not work when --with-hg is specified ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
778 '(use --with-chg instead)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
779 ) |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
780 if options.rhg and options.with_hg: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
781 # rhg shares installation location with hg |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
782 parser.error( |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
783 '--rhg does not work when --with-hg is specified ' |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
784 '(use --with-rhg instead)' |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
785 ) |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
786 if options.rhg and options.chg: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
787 parser.error('--rhg and --chg do not work together') |
28142
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
788 |
33567
d9677e2ed16a
run-tests: warn if --color=always and no pygments installed
Martin von Zweigbergk <martinvonz@google.com>
parents:
33566
diff
changeset
|
789 if options.color == 'always' and not pygmentspresent: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
790 sys.stderr.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
791 'warning: --color=always ignored because ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
792 'pygments is not installed\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
793 ) |
33567
d9677e2ed16a
run-tests: warn if --color=always and no pygments installed
Martin von Zweigbergk <martinvonz@google.com>
parents:
33566
diff
changeset
|
794 |
34058
40313c63da87
run-tests: allow bisecting a different repo
Jun Wu <quark@fb.com>
parents:
34057
diff
changeset
|
795 if options.bisect_repo and not options.known_good_rev: |
40313c63da87
run-tests: allow bisecting a different repo
Jun Wu <quark@fb.com>
parents:
34057
diff
changeset
|
796 parser.error("--bisect-repo cannot be used without --known-good-rev") |
40313c63da87
run-tests: allow bisecting a different repo
Jun Wu <quark@fb.com>
parents:
34057
diff
changeset
|
797 |
31031
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
798 global useipv6 |
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
799 if options.ipv6: |
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
800 useipv6 = checksocketfamily('AF_INET6') |
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
801 else: |
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
802 # only use IPv6 if IPv4 is unavailable and IPv6 is available |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
803 useipv6 = (not checksocketfamily('AF_INET')) and checksocketfamily( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
804 'AF_INET6' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
805 ) |
31031
01eebb65a61d
runtests: add an IPv6 command line flag
Jun Wu <quark@fb.com>
parents:
31030
diff
changeset
|
806 |
15859
44a371823f83
tests: add htmlcov option
Markus Zapke-Gründemann <info@keimlink.de>
parents:
15858
diff
changeset
|
807 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
|
808 if options.anycoverage: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
809 try: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
810 import coverage |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
811 |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
812 covver = version.StrictVersion(coverage.__version__).version |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
813 if covver < (3, 3): |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
814 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
|
815 except ImportError: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
816 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
|
817 |
10648
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
818 if options.anycoverage and options.local: |
58128004cca1
tests: use external coverage, mandate newer version
Dirkjan Ochtman <djc.ochtman@kentyde.com>
parents:
10413
diff
changeset
|
819 # this needs some path mangling somewhere, I guess |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
820 parser.error( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
821 "sorry, coverage options do not work when --local " "is specified" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
822 ) |
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
|
823 |
24506
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
824 if options.anycoverage and options.with_hg: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
825 parser.error( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
826 "sorry, coverage options do not work when --with-hg " "is specified" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
827 ) |
24506
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
828 |
19250
5fa946330970
run-tests: make vlog a proper function
Matt Mackall <mpm@selenic.com>
parents:
19249
diff
changeset
|
829 global verbose |
8095
f5428d4ffd97
run-tests: reduce global variables set by parse_args().
Greg Ward <greg-hg@gerg.ca>
parents:
8094
diff
changeset
|
830 if options.verbose: |
19279
3868c9ab4bf8
run-tests: drop options.child and users
Matt Mackall <mpm@selenic.com>
parents:
19278
diff
changeset
|
831 verbose = '' |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
832 |
9394
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
833 if options.tmpdir: |
28644
2e50eb6304bd
run-tests: add canonpath function
timeless <timeless@mozdev.org>
parents:
28620
diff
changeset
|
834 options.tmpdir = canonpath(options.tmpdir) |
9394
31203db1b2ac
run-tests: expand --tmpdir and create it if needed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9031
diff
changeset
|
835 |
8091
e85cc856d2e1
run-tests: factor out parse_args(). Clarify use of globals a bit.
Greg Ward <greg-hg@gerg.ca>
parents:
8060
diff
changeset
|
836 if options.jobs < 1: |
9408
70bf7f853adc
run-tests: standardize on --foo instead of -f/--foo
Martin Geisler <mg@lazybytes.net>
parents:
9407
diff
changeset
|
837 parser.error('--jobs must be positive') |
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
|
838 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
|
839 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
|
840 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
|
841 if options.timeout != defaults['timeout']: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
842 sys.stderr.write('warning: --timeout option ignored with --debug\n') |
27141
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
843 if options.slowtimeout != defaults['slowtimeout']: |
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
844 sys.stderr.write( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
845 'warning: --slowtimeout option ignored with --debug\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
846 ) |
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
|
847 options.timeout = 0 |
27141
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
848 options.slowtimeout = 0 |
28582
cdbc25306696
run-tests: add --with-python3 to define a Python 3 interpreter
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28569
diff
changeset
|
849 |
9959
b37b060d84c7
run-tests: add a "--blacklist target" option to skip predefined test lists
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
9958
diff
changeset
|
850 if options.blacklist: |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
851 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
|
852 if options.whitelist: |
19279
3868c9ab4bf8
run-tests: drop options.child and users
Matt Mackall <mpm@selenic.com>
parents:
19278
diff
changeset
|
853 options.whitelisted = parselistfiles(options.whitelist, 'whitelist') |
14493
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
854 else: |
5cc7905bccc9
run-tests: allow whitelisting tests that should always run
Augie Fackler <durin42@gmail.com>
parents:
14454
diff
changeset
|
855 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
|
856 |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
857 if options.showchannels: |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
858 options.nodiff = True |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
859 |
35198
b4b0aed7bfaf
run-tests: convert to argparse
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35176
diff
changeset
|
860 return options |
5384
e3a0c092b4e2
Allow tests to run in parallel.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5383
diff
changeset
|
861 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
862 |
5800
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
863 def rename(src, dst): |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
864 """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
|
865 for existing destination support. |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
866 """ |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
867 shutil.copy(src, dst) |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
868 os.remove(src) |
2f597243e1d7
Make run-tests.py --interactive work on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
5524
diff
changeset
|
869 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
870 |
40471
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
871 def makecleanable(path): |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
872 """Try to fix directory permission recursively so that the entire tree |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
873 can be deleted""" |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
874 for dirpath, dirnames, _filenames in os.walk(path, topdown=True): |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
875 for d in dirnames: |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
876 p = os.path.join(dirpath, d) |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
877 try: |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
878 os.chmod(p, os.stat(p).st_mode & 0o777 | 0o700) # chmod u+rwx |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
879 except OSError: |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
880 pass |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
881 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
882 |
25045
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
883 _unified_diff = difflib.unified_diff |
25159
138dc8381049
run-tests: move all open-coded sys.version_info checks to PYTHON3 (issue4668)
Augie Fackler <augie@google.com>
parents:
25158
diff
changeset
|
884 if PYTHON3: |
25045
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
885 import functools |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
886 |
25045
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
887 _unified_diff = functools.partial(difflib.diff_bytes, difflib.unified_diff) |
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
888 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
889 |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
890 def getdiff(expected, output, ref, err): |
21022
52e9e63f1495
run-tests: test result shows when a failed test could not start a server
Simon Heimberg <simohe@besonet.ch>
parents:
21009
diff
changeset
|
891 servefail = False |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
892 lines = [] |
25045
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
893 for line in _unified_diff(expected, output, ref, err): |
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
894 if line.startswith(b'+++') or line.startswith(b'---'): |
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
895 line = line.replace(b'\\', b'/') |
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
896 if line.endswith(b' \n'): |
8a425c2eef5d
run-tests: use difflib.diff_bytes on Python 3
Augie Fackler <augie@google.com>
parents:
25044
diff
changeset
|
897 line = line[:-2] + b'\n' |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
898 lines.append(line) |
21022
52e9e63f1495
run-tests: test result shows when a failed test could not start a server
Simon Heimberg <simohe@besonet.ch>
parents:
21009
diff
changeset
|
899 if not servefail and line.startswith( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
900 b'+ abort: child process failed to start' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
901 ): |
21022
52e9e63f1495
run-tests: test result shows when a failed test could not start a server
Simon Heimberg <simohe@besonet.ch>
parents:
21009
diff
changeset
|
902 servefail = True |
52e9e63f1495
run-tests: test result shows when a failed test could not start a server
Simon Heimberg <simohe@besonet.ch>
parents:
21009
diff
changeset
|
903 |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
904 return servefail, lines |
2110
25a8d116ab6a
Add a pure python version of run-tests.
Stephen Darnell <stephen@darnell.plus.com>
parents:
diff
changeset
|
905 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
906 |
19250
5fa946330970
run-tests: make vlog a proper function
Matt Mackall <mpm@selenic.com>
parents:
19249
diff
changeset
|
907 verbose = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
908 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
909 |
19250
5fa946330970
run-tests: make vlog a proper function
Matt Mackall <mpm@selenic.com>
parents:
19249
diff
changeset
|
910 def vlog(*msg): |
21535
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
911 """Log only when in verbose mode.""" |
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
912 if verbose is False: |
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
913 return |
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
914 |
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
915 return log(*msg) |
19250
5fa946330970
run-tests: make vlog a proper function
Matt Mackall <mpm@selenic.com>
parents:
19249
diff
changeset
|
916 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
917 |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
918 # Bytes that break XML even in a CDATA block: control characters 0-31 |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
919 # sans \t, \n and \r |
25051
9c28f3236677
run-tests: do cdata escaping using bytes instead of str
Augie Fackler <augie@google.com>
parents:
25050
diff
changeset
|
920 CDATA_EVIL = re.compile(br"[\000-\010\013\014\016-\037]") |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
921 |
31829
4eec2f04a672
run-tests: support per-line conditional output in tests
Matt Harbison <matt_harbison@yahoo.com>
parents:
31827
diff
changeset
|
922 # Match feature conditionalized output lines in the form, capturing the feature |
4eec2f04a672
run-tests: support per-line conditional output in tests
Matt Harbison <matt_harbison@yahoo.com>
parents:
31827
diff
changeset
|
923 # list in group 2, and the preceeding line output in group 1: |
4eec2f04a672
run-tests: support per-line conditional output in tests
Matt Harbison <matt_harbison@yahoo.com>
parents:
31827
diff
changeset
|
924 # |
4eec2f04a672
run-tests: support per-line conditional output in tests
Matt Harbison <matt_harbison@yahoo.com>
parents:
31827
diff
changeset
|
925 # output..output (feature !)\n |
41554
17a6e063c886
run-tests: use raw strings for regular expressions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41509
diff
changeset
|
926 optline = re.compile(br'(.*) \((.+?) !\)\n$') |
31829
4eec2f04a672
run-tests: support per-line conditional output in tests
Matt Harbison <matt_harbison@yahoo.com>
parents:
31827
diff
changeset
|
927 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
928 |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
929 def cdatasafe(data): |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
930 """Make a string safe to include in a CDATA block. |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
931 |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
932 Certain control characters are illegal in a CDATA block, and |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
933 there's no way to include a ]]> in a CDATA either. This function |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
934 replaces illegal bytes with ? and adds a space between the ]] so |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
935 that it won't break the CDATA block. |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
936 """ |
25051
9c28f3236677
run-tests: do cdata escaping using bytes instead of str
Augie Fackler <augie@google.com>
parents:
25050
diff
changeset
|
937 return CDATA_EVIL.sub(b'?', data).replace(b']]>', b'] ]>') |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
938 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
939 |
19251
6857f53456f2
run-tests: add a log function
Matt Mackall <mpm@selenic.com>
parents:
19250
diff
changeset
|
940 def log(*msg): |
21535
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
941 """Log something to stdout. |
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
942 |
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
943 Arguments are strings to print. |
ab7e224bc089
run-tests: avoid duplicate code in vlog()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21534
diff
changeset
|
944 """ |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
945 with iolock: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
946 if verbose: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
947 print(verbose, end=' ') |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
948 for m in msg: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
949 print(m, end=' ') |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
950 print() |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
951 sys.stdout.flush() |
19251
6857f53456f2
run-tests: add a log function
Matt Mackall <mpm@selenic.com>
parents:
19250
diff
changeset
|
952 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
953 |
33948
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
954 def highlightdiff(line, color): |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
955 if not color: |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
956 return line |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
957 assert pygmentspresent |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
958 return pygments.highlight( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
959 line.decode('latin1'), difflexer, terminal256formatter |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
960 ).encode('latin1') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
961 |
33948
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
962 |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
963 def highlightmsg(msg, color): |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
964 if not color: |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
965 return msg |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
966 assert pygmentspresent |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
967 return pygments.highlight(msg, runnerlexer, runnerformatter) |
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
968 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
969 |
14821
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
970 def terminate(proc): |
32343
dc131b9772f2
run-tests: drop fallback for proc.terminate() for pre-py2.6
Martin von Zweigbergk <martinvonz@google.com>
parents:
32342
diff
changeset
|
971 """Terminate subprocess""" |
14821
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
972 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
|
973 try: |
32343
dc131b9772f2
run-tests: drop fallback for proc.terminate() for pre-py2.6
Martin von Zweigbergk <martinvonz@google.com>
parents:
32342
diff
changeset
|
974 proc.terminate() |
14821
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
975 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
|
976 pass |
2017495bd552
run-tests: fallback to SIGTERM if subprocess.Popen does not have terminate()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
14598
diff
changeset
|
977 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
978 |
19263
062c0a0a5549
run-tests: use env dict to kill daemons
Matt Mackall <mpm@selenic.com>
parents:
19262
diff
changeset
|
979 def killdaemons(pidfile): |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
980 import killdaemons as killmod |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
981 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
982 return killmod.killdaemons(pidfile, tryhard=False, remove=True, logfn=vlog) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
983 |
10336
bc9a3bb267fa
run-tests: kill daemons on ^C with -j.
Brendan Cully <brendan@kublai.com>
parents:
10300
diff
changeset
|
984 |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
985 class Test(unittest.TestCase): |
21309
0b123e6a318c
run-tests: allow Test.run() to run multiple times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21308
diff
changeset
|
986 """Encapsulates a single, runnable test. |
0b123e6a318c
run-tests: allow Test.run() to run multiple times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21308
diff
changeset
|
987 |
21497
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
988 While this class conforms to the unittest.TestCase API, it differs in that |
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
989 instances need to be instantiated manually. (Typically, unittest.TestCase |
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
990 classes are instantiated automatically by scanning modules.) |
21309
0b123e6a318c
run-tests: allow Test.run() to run multiple times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21308
diff
changeset
|
991 """ |
21296
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
992 |
21380
de6ea36ca9f7
run-tests: move SKIPPED_STATUS into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21379
diff
changeset
|
993 # Status code reserved for skipped tests (used by hghave). |
de6ea36ca9f7
run-tests: move SKIPPED_STATUS into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21379
diff
changeset
|
994 SKIPPED_STATUS = 80 |
de6ea36ca9f7
run-tests: move SKIPPED_STATUS into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21379
diff
changeset
|
995 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
996 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
997 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
998 path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
999 outputdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1000 tmpdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1001 keeptmpdir=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1002 debug=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1003 first=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1004 timeout=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1005 startport=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1006 extraconfigopts=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1007 shell=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1008 hgcommand=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1009 slowtimeout=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1010 usechg=False, |
44619
78a8f65eacc8
run-tests: add --chg-debug flag to show chg debug output
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44586
diff
changeset
|
1011 chgdebug=False, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1012 useipv6=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1013 ): |
21502
f8515564d617
run-tests: pass a full test path into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21501
diff
changeset
|
1014 """Create a test from parameters. |
f8515564d617
run-tests: pass a full test path into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21501
diff
changeset
|
1015 |
f8515564d617
run-tests: pass a full test path into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21501
diff
changeset
|
1016 path is the full path to the file defining the test. |
21338
3cd2d2de4060
run-tests: move computation of test paths into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21337
diff
changeset
|
1017 |
21504
888a5dfe1569
run-tests: pass temp dir into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21502
diff
changeset
|
1018 tmpdir is the main temporary directory to use for this test. |
21505
3a1881dbf860
run-tests: pass abort into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21504
diff
changeset
|
1019 |
21509
d21d53ee0d7a
run-tests: factor options.keep_tmpdir into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21508
diff
changeset
|
1020 keeptmpdir determines whether to keep the test's temporary directory |
d21d53ee0d7a
run-tests: factor options.keep_tmpdir into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21508
diff
changeset
|
1021 after execution. It defaults to removal (False). |
21510
97127c4ce460
run-tests: move debug into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21509
diff
changeset
|
1022 |
97127c4ce460
run-tests: move debug into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21509
diff
changeset
|
1023 debug mode will make the test execute verbosely, with unfiltered |
97127c4ce460
run-tests: move debug into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21509
diff
changeset
|
1024 output. |
21511
3ec3e81a4110
run-tests: move diff options into arguments of Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21510
diff
changeset
|
1025 |
21513
acfd19f3e79c
run-tests: move timeout into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21512
diff
changeset
|
1026 timeout controls the maximum run time of the test. It is ignored when |
27141
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
1027 debug is True. See slowtimeout for tests with #require slow. |
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
1028 |
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
1029 slowtimeout overrides timeout if the test has #require slow. |
21514
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1030 |
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1031 startport controls the starting port number to use for this test. Each |
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1032 test will reserve 3 port numbers for execution. It is the caller's |
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1033 responsibility to allocate a non-overlapping port range to Test |
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1034 instances. |
21515
9978ff48b1e8
run-tests: move extra config options to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21514
diff
changeset
|
1035 |
9978ff48b1e8
run-tests: move extra config options to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21514
diff
changeset
|
1036 extraconfigopts is an iterable of extra hgrc config options. Values |
9978ff48b1e8
run-tests: move extra config options to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21514
diff
changeset
|
1037 must have the form "key=value" (something understood by hgrc). Values |
9978ff48b1e8
run-tests: move extra config options to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21514
diff
changeset
|
1038 of the form "foo.key=value" will result in "[foo] key=value". |
21516
1e275c09242e
run-tests: move py3kwarnings to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21515
diff
changeset
|
1039 |
21517
af7d3a5c330b
run-tests: move shell to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21516
diff
changeset
|
1040 shell is the shell to execute tests in. |
21502
f8515564d617
run-tests: pass a full test path into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21501
diff
changeset
|
1041 """ |
34271
8999851a503f
tests: fix run-tests default values in Test constructor
Augie Fackler <augie@google.com>
parents:
34270
diff
changeset
|
1042 if timeout is None: |
8999851a503f
tests: fix run-tests default values in Test constructor
Augie Fackler <augie@google.com>
parents:
34270
diff
changeset
|
1043 timeout = defaults['timeout'] |
8999851a503f
tests: fix run-tests default values in Test constructor
Augie Fackler <augie@google.com>
parents:
34270
diff
changeset
|
1044 if startport is None: |
8999851a503f
tests: fix run-tests default values in Test constructor
Augie Fackler <augie@google.com>
parents:
34270
diff
changeset
|
1045 startport = defaults['port'] |
8999851a503f
tests: fix run-tests default values in Test constructor
Augie Fackler <augie@google.com>
parents:
34270
diff
changeset
|
1046 if slowtimeout is None: |
8999851a503f
tests: fix run-tests default values in Test constructor
Augie Fackler <augie@google.com>
parents:
34270
diff
changeset
|
1047 slowtimeout = defaults['slowtimeout'] |
25039
8505eb1bafb1
run-tests: be more judicious about bytes vs string on test attrs
Augie Fackler <augie@google.com>
parents:
25038
diff
changeset
|
1048 self.path = path |
45521
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
1049 self.relpath = os.path.relpath(path) |
25039
8505eb1bafb1
run-tests: be more judicious about bytes vs string on test attrs
Augie Fackler <augie@google.com>
parents:
25038
diff
changeset
|
1050 self.bname = os.path.basename(path) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1051 self.name = _bytes2sys(self.bname) |
21502
f8515564d617
run-tests: pass a full test path into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21501
diff
changeset
|
1052 self._testdir = os.path.dirname(path) |
32736
2146f01a2577
run-tests: allow specifying an output dir to write .errs to
Siddharth Agarwal <sid0@fb.com>
parents:
32735
diff
changeset
|
1053 self._outputdir = outputdir |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1054 self._tmpname = os.path.basename(path) |
32736
2146f01a2577
run-tests: allow specifying an output dir to write .errs to
Siddharth Agarwal <sid0@fb.com>
parents:
32735
diff
changeset
|
1055 self.errpath = os.path.join(self._outputdir, b'%s.err' % self.bname) |
21435
f376f56a354e
run-tests: rename Test._test to Test.name
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21434
diff
changeset
|
1056 |
25039
8505eb1bafb1
run-tests: be more judicious about bytes vs string on test attrs
Augie Fackler <augie@google.com>
parents:
25038
diff
changeset
|
1057 self._threadtmp = tmpdir |
21509
d21d53ee0d7a
run-tests: factor options.keep_tmpdir into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21508
diff
changeset
|
1058 self._keeptmpdir = keeptmpdir |
21510
97127c4ce460
run-tests: move debug into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21509
diff
changeset
|
1059 self._debug = debug |
35011
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1060 self._first = first |
21513
acfd19f3e79c
run-tests: move timeout into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21512
diff
changeset
|
1061 self._timeout = timeout |
27141
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
1062 self._slowtimeout = slowtimeout |
21514
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1063 self._startport = startport |
21515
9978ff48b1e8
run-tests: move extra config options to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21514
diff
changeset
|
1064 self._extraconfigopts = extraconfigopts or [] |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1065 self._shell = _sys2bytes(shell) |
28099
a5f0c0aab2bb
run-tests: allow to specify executable of any name by --with-hg
Yuya Nishihara <yuya@tcha.org>
parents:
28098
diff
changeset
|
1066 self._hgcommand = hgcommand or b'hg' |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1067 self._usechg = usechg |
44619
78a8f65eacc8
run-tests: add --chg-debug flag to show chg debug output
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44586
diff
changeset
|
1068 self._chgdebug = chgdebug |
31023
225f574e0645
runtests: export HGIPV6 to hint test scripts whether to use IPv6
Jun Wu <quark@fb.com>
parents:
31022
diff
changeset
|
1069 self._useipv6 = useipv6 |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1070 |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1071 self._aborted = False |
21319
44c96e2bab20
run-tests: kill daemons during Test.cleanup()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21318
diff
changeset
|
1072 self._daemonpids = [] |
21447
f8c5b8a288c5
run-tests: keep track of test execution state in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21446
diff
changeset
|
1073 self._finished = None |
21449
aedf18bcde11
run-tests: store test return code and output in Test instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21448
diff
changeset
|
1074 self._ret = None |
aedf18bcde11
run-tests: store test return code and output in Test instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21448
diff
changeset
|
1075 self._out = None |
21453
aaf52b78327e
run-tests: store skipped state on Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21452
diff
changeset
|
1076 self._skipped = None |
21454
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1077 self._testtmp = None |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1078 self._chgsockdir = None |
21447
f8c5b8a288c5
run-tests: keep track of test execution state in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21446
diff
changeset
|
1079 |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1080 self._refout = self.readrefout() |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1081 |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1082 def readrefout(self): |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1083 """read reference output""" |
21318
6b3d66e4d3be
run-tests: capture reference output in Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21317
diff
changeset
|
1084 # If we're not in --debug mode and reference output file exists, |
6b3d66e4d3be
run-tests: capture reference output in Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21317
diff
changeset
|
1085 # check test output against it. |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1086 if self._debug: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1087 return None # to match "out is None" |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1088 elif os.path.exists(self.refpath): |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1089 with open(self.refpath, 'rb') as f: |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1090 return f.read().splitlines(True) |
21318
6b3d66e4d3be
run-tests: capture reference output in Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21317
diff
changeset
|
1091 else: |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
1092 return [] |
21318
6b3d66e4d3be
run-tests: capture reference output in Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21317
diff
changeset
|
1093 |
24965
cecbe207cebd
run-tests: implement Test._testMethodName
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24926
diff
changeset
|
1094 # needed to get base class __repr__ running |
cecbe207cebd
run-tests: implement Test._testMethodName
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24926
diff
changeset
|
1095 @property |
cecbe207cebd
run-tests: implement Test._testMethodName
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24926
diff
changeset
|
1096 def _testMethodName(self): |
cecbe207cebd
run-tests: implement Test._testMethodName
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24926
diff
changeset
|
1097 return self.name |
cecbe207cebd
run-tests: implement Test._testMethodName
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24926
diff
changeset
|
1098 |
21463
c908ff887589
run-tests: implement Test.__str__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21462
diff
changeset
|
1099 def __str__(self): |
c908ff887589
run-tests: implement Test.__str__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21462
diff
changeset
|
1100 return self.name |
c908ff887589
run-tests: implement Test.__str__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21462
diff
changeset
|
1101 |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1102 def shortDescription(self): |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1103 return self.name |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1104 |
21446
9a3b4f795f62
run-tests: support setUp() and tearDown() in TestCase wrapper
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21445
diff
changeset
|
1105 def setUp(self): |
9a3b4f795f62
run-tests: support setUp() and tearDown() in TestCase wrapper
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21445
diff
changeset
|
1106 """Tasks to perform before run().""" |
21447
f8c5b8a288c5
run-tests: keep track of test execution state in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21446
diff
changeset
|
1107 self._finished = False |
21449
aedf18bcde11
run-tests: store test return code and output in Test instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21448
diff
changeset
|
1108 self._ret = None |
aedf18bcde11
run-tests: store test return code and output in Test instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21448
diff
changeset
|
1109 self._out = None |
21453
aaf52b78327e
run-tests: store skipped state on Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21452
diff
changeset
|
1110 self._skipped = None |
21446
9a3b4f795f62
run-tests: support setUp() and tearDown() in TestCase wrapper
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21445
diff
changeset
|
1111 |
21497
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
1112 try: |
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
1113 os.mkdir(self._threadtmp) |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
1114 except OSError as e: |
21497
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
1115 if e.errno != errno.EEXIST: |
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
1116 raise |
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
1117 |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1118 name = self._tmpname |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1119 self._testtmp = os.path.join(self._threadtmp, name) |
21454
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1120 os.mkdir(self._testtmp) |
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1121 |
21457
12dd94e32102
run-tests: move errpath deletion to setUp()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21456
diff
changeset
|
1122 # Remove any previous output files. |
21507
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
1123 if os.path.exists(self.errpath): |
24332
9612b96730d7
run-tests: ignore ENOENT failures when removing old .err results
Augie Fackler <augie@google.com>
parents:
24331
diff
changeset
|
1124 try: |
9612b96730d7
run-tests: ignore ENOENT failures when removing old .err results
Augie Fackler <augie@google.com>
parents:
24331
diff
changeset
|
1125 os.remove(self.errpath) |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
1126 except OSError as e: |
24332
9612b96730d7
run-tests: ignore ENOENT failures when removing old .err results
Augie Fackler <augie@google.com>
parents:
24331
diff
changeset
|
1127 # We might have raced another test to clean up a .err |
9612b96730d7
run-tests: ignore ENOENT failures when removing old .err results
Augie Fackler <augie@google.com>
parents:
24331
diff
changeset
|
1128 # file, so ignore ENOENT when removing a previous .err |
9612b96730d7
run-tests: ignore ENOENT failures when removing old .err results
Augie Fackler <augie@google.com>
parents:
24331
diff
changeset
|
1129 # file. |
9612b96730d7
run-tests: ignore ENOENT failures when removing old .err results
Augie Fackler <augie@google.com>
parents:
24331
diff
changeset
|
1130 if e.errno != errno.ENOENT: |
9612b96730d7
run-tests: ignore ENOENT failures when removing old .err results
Augie Fackler <augie@google.com>
parents:
24331
diff
changeset
|
1131 raise |
21457
12dd94e32102
run-tests: move errpath deletion to setUp()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21456
diff
changeset
|
1132 |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1133 if self._usechg: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1134 self._chgsockdir = os.path.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1135 self._threadtmp, b'%s.chgsock' % name |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1136 ) |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1137 os.mkdir(self._chgsockdir) |
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1138 |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1139 def run(self, result): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1140 """Run this test and report results against a TestResult instance.""" |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1141 # This function is extremely similar to unittest.TestCase.run(). Once |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1142 # we require Python 2.7 (or at least its version of unittest), this |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1143 # function can largely go away. |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1144 self._result = result |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1145 result.startTest(self) |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1146 try: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1147 try: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1148 self.setUp() |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1149 except (KeyboardInterrupt, SystemExit): |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1150 self._aborted = True |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1151 raise |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1152 except Exception: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1153 result.addError(self, sys.exc_info()) |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1154 return |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1155 |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1156 success = False |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1157 try: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1158 self.runTest() |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1159 except KeyboardInterrupt: |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1160 self._aborted = True |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1161 raise |
32950
240183a04429
tests: use unittest.SkipTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32925
diff
changeset
|
1162 except unittest.SkipTest as e: |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1163 result.addSkip(self, str(e)) |
21997
93c3b3f55d59
run-tests: fix test result counts with --keyword specified or skips occurring
Augie Fackler <raf@durin42.com>
parents:
21993
diff
changeset
|
1164 # The base class will have already counted this as a |
93c3b3f55d59
run-tests: fix test result counts with --keyword specified or skips occurring
Augie Fackler <raf@durin42.com>
parents:
21993
diff
changeset
|
1165 # test we "ran", but we want to exclude skipped tests |
93c3b3f55d59
run-tests: fix test result counts with --keyword specified or skips occurring
Augie Fackler <raf@durin42.com>
parents:
21993
diff
changeset
|
1166 # from those we count towards those run. |
93c3b3f55d59
run-tests: fix test result counts with --keyword specified or skips occurring
Augie Fackler <raf@durin42.com>
parents:
21993
diff
changeset
|
1167 result.testsRun -= 1 |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
1168 except self.failureException as e: |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1169 # This differs from unittest in that we don't capture |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1170 # the stack trace. This is for historical reasons and |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23077
diff
changeset
|
1171 # this decision could be revisited in the future, |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1172 # especially for PythonTest instances. |
21753
b7baef94a333
run-tests: checks behaviour of test on failure while testing
anuraggoel <anurag.dsps@gmail.com>
parents:
21740
diff
changeset
|
1173 if result.addFailure(self, str(e)): |
b7baef94a333
run-tests: checks behaviour of test on failure while testing
anuraggoel <anurag.dsps@gmail.com>
parents:
21740
diff
changeset
|
1174 success = True |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1175 except Exception: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1176 result.addError(self, sys.exc_info()) |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1177 else: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1178 success = True |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1179 |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1180 try: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1181 self.tearDown() |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1182 except (KeyboardInterrupt, SystemExit): |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1183 self._aborted = True |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1184 raise |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1185 except Exception: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1186 result.addError(self, sys.exc_info()) |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1187 success = False |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1188 |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1189 if success: |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1190 result.addSuccess(self) |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1191 finally: |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1192 result.stopTest(self, interrupted=self._aborted) |
21488
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1193 |
feb8ad2d57ee
run-tests: merge MercurialTest into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21464
diff
changeset
|
1194 def runTest(self): |
21383
772ed56e2519
run-tests: add some docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21382
diff
changeset
|
1195 """Run this test instance. |
772ed56e2519
run-tests: add some docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21382
diff
changeset
|
1196 |
772ed56e2519
run-tests: add some docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21382
diff
changeset
|
1197 This will return a tuple describing the result of the test. |
772ed56e2519
run-tests: add some docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21382
diff
changeset
|
1198 """ |
21514
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1199 env = self._getenv() |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1200 self._genrestoreenv(env) |
21319
44c96e2bab20
run-tests: kill daemons during Test.cleanup()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21318
diff
changeset
|
1201 self._daemonpids.append(env['DAEMON_PIDS']) |
21382
4b8ffe3abdd2
run-tests: move createhgrc into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21381
diff
changeset
|
1202 self._createhgrc(env['HGRCPATH']) |
21300
a2774731a51a
run-tests: move createhgrc() call into Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21299
diff
changeset
|
1203 |
21435
f376f56a354e
run-tests: rename Test._test to Test.name
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21434
diff
changeset
|
1204 vlog('# Test', self.name) |
21337
79930515604f
run-tests: move logging of test start into Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21336
diff
changeset
|
1205 |
24516
62fb03e0d990
run-tests: obtain replacements inside Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24510
diff
changeset
|
1206 ret, out = self._run(env) |
21500
130cc0d7bfde
run-tests: don't trap exceptions in Test.runTest()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21499
diff
changeset
|
1207 self._finished = True |
130cc0d7bfde
run-tests: don't trap exceptions in Test.runTest()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21499
diff
changeset
|
1208 self._ret = ret |
130cc0d7bfde
run-tests: don't trap exceptions in Test.runTest()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21499
diff
changeset
|
1209 self._out = out |
21305
d7a7825ff2cf
run-tests: capture execution results in a TestResult class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21304
diff
changeset
|
1210 |
21326
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1211 def describe(ret): |
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1212 if ret < 0: |
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1213 return 'killed by signal: %d' % -ret |
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1214 return 'returned error code %d' % ret |
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1215 |
21453
aaf52b78327e
run-tests: store skipped state on Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21452
diff
changeset
|
1216 self._skipped = False |
21336
45ab0668d1b2
run-tests: remove remaining uses of TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21335
diff
changeset
|
1217 |
21380
de6ea36ca9f7
run-tests: move SKIPPED_STATUS into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21379
diff
changeset
|
1218 if ret == self.SKIPPED_STATUS: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1219 if out is None: # Debug mode, nothing to parse. |
21324
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1220 missing = ['unknown'] |
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1221 failed = None |
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1222 else: |
21379
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
1223 missing, failed = TTest.parsehghaveoutput(out) |
21324
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1224 |
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1225 if not missing: |
22292
102f0e926668
run-tests: report skipped tests as "skipped" - they might still be "relevant"
Mads Kiilerich <madski@unity3d.com>
parents:
22165
diff
changeset
|
1226 missing = ['skipped'] |
21324
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1227 |
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1228 if failed: |
21523
9fb6f328576a
run-tests: move interactive test acceptance into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21522
diff
changeset
|
1229 self.fail('hg have failed checking for %s' % failed[-1]) |
21324
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1230 else: |
21453
aaf52b78327e
run-tests: store skipped state on Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21452
diff
changeset
|
1231 self._skipped = True |
32950
240183a04429
tests: use unittest.SkipTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32925
diff
changeset
|
1232 raise unittest.SkipTest(missing[-1]) |
21325
0e66eb57e42a
run-tests: generate timeout result in Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21324
diff
changeset
|
1233 elif ret == 'timeout': |
21523
9fb6f328576a
run-tests: move interactive test acceptance into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21522
diff
changeset
|
1234 self.fail('timed out') |
21522
eeaec308ad5f
run-tests: raise WarnTest outside of Test.fail()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21521
diff
changeset
|
1235 elif ret is False: |
32952
6123a5267119
tests: remove WarnTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32951
diff
changeset
|
1236 self.fail('no result code from test') |
21326
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1237 elif out != self._refout: |
21614
609a642dff61
run-tests: write .err files earlier
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21613
diff
changeset
|
1238 # Diff generation may rely on written .err file. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1239 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1240 (ret != 0 or out != self._refout) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1241 and not self._skipped |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1242 and not self._debug |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1243 ): |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1244 with open(self.errpath, 'wb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1245 for line in out: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1246 f.write(line) |
21614
609a642dff61
run-tests: write .err files earlier
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21613
diff
changeset
|
1247 |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1248 # The result object handles diff calculation for us. |
35011
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1249 with firstlock: |
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1250 if self._result.addOutputMismatch(self, ret, out, self._refout): |
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1251 # change was accepted, skip failing |
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1252 return |
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1253 if self._first: |
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1254 global firsterror |
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
1255 firsterror = True |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1256 |
21326
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1257 if ret: |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1258 msg = 'output changed and ' + describe(ret) |
21326
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1259 else: |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1260 msg = 'output changed' |
21326
04e04766065f
run-tests: move output difference processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21325
diff
changeset
|
1261 |
21523
9fb6f328576a
run-tests: move interactive test acceptance into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21522
diff
changeset
|
1262 self.fail(msg) |
21327
206814c9072a
run-tests: move remaining result processing to Test.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21326
diff
changeset
|
1263 elif ret: |
21523
9fb6f328576a
run-tests: move interactive test acceptance into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21522
diff
changeset
|
1264 self.fail(describe(ret)) |
21324
6454ddaee991
run-tests: add skip processing to Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21323
diff
changeset
|
1265 |
21446
9a3b4f795f62
run-tests: support setUp() and tearDown() in TestCase wrapper
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21445
diff
changeset
|
1266 def tearDown(self): |
9a3b4f795f62
run-tests: support setUp() and tearDown() in TestCase wrapper
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21445
diff
changeset
|
1267 """Tasks to perform after run().""" |
21456
a06a4142ad1f
run-tests: kill daemons during tearDown()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21455
diff
changeset
|
1268 for entry in self._daemonpids: |
a06a4142ad1f
run-tests: kill daemons during tearDown()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21455
diff
changeset
|
1269 killdaemons(entry) |
a06a4142ad1f
run-tests: kill daemons during tearDown()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21455
diff
changeset
|
1270 self._daemonpids = [] |
a06a4142ad1f
run-tests: kill daemons during tearDown()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21455
diff
changeset
|
1271 |
26422
41436beaf463
run-tests: report paths saved by --keep-tmpdir
timeless@mozdev.org
parents:
26158
diff
changeset
|
1272 if self._keeptmpdir: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1273 log( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1274 '\nKeeping testtmp dir: %s\nKeeping threadtmp dir: %s' |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
1275 % ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
1276 _bytes2sys(self._testtmp), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
1277 _bytes2sys(self._threadtmp), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
1278 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1279 ) |
26422
41436beaf463
run-tests: report paths saved by --keep-tmpdir
timeless@mozdev.org
parents:
26158
diff
changeset
|
1280 else: |
40471
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
1281 try: |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
1282 shutil.rmtree(self._testtmp) |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
1283 except OSError: |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
1284 # unreadable directory may be left in $TESTTMP; fix permission |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
1285 # and try again |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
1286 makecleanable(self._testtmp) |
bb5d74a35477
run-tests: fix permission to clean up unreadable directories
Yuya Nishihara <yuya@tcha.org>
parents:
40270
diff
changeset
|
1287 shutil.rmtree(self._testtmp, True) |
21497
798c81e32b5e
run-tests: refactor temporary directories in Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21496
diff
changeset
|
1288 shutil.rmtree(self._threadtmp, True) |
21454
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1289 |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1290 if self._usechg: |
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1291 # chgservers will stop automatically after they find the socket |
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1292 # files are deleted |
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1293 shutil.rmtree(self._chgsockdir, True) |
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1294 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1295 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1296 (self._ret != 0 or self._out != self._refout) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1297 and not self._skipped |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1298 and not self._debug |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1299 and self._out |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1300 ): |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1301 with open(self.errpath, 'wb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1302 for line in self._out: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1303 f.write(line) |
21455
0f0bace82149
run-tests: move err file writing to tearDown()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21454
diff
changeset
|
1304 |
24926
3fe1e07f1a32
run-test: include test name in the return vlog
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24811
diff
changeset
|
1305 vlog("# Ret was:", self._ret, '(%s)' % self.name) |
21452
1517c0461b75
run-tests: move some functionality to Test.tearDown()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21451
diff
changeset
|
1306 |
24516
62fb03e0d990
run-tests: obtain replacements inside Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24510
diff
changeset
|
1307 def _run(self, env): |
21339
de25e968b4d8
run-tests: refactor runone() into gettest() and scheduletests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21338
diff
changeset
|
1308 # This should be implemented in child classes to run tests. |
32950
240183a04429
tests: use unittest.SkipTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32925
diff
changeset
|
1309 raise unittest.SkipTest('unknown test type') |
21296
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
1310 |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1311 def abort(self): |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1312 """Terminate execution of this test.""" |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1313 self._aborted = True |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1314 |
28169
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1315 def _portmap(self, i): |
28284
0fe00bdb2f4f
run-tests: fix Python 3 incompatibilities
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28180
diff
changeset
|
1316 offset = b'' if i == 0 else b'%d' % i |
28169
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1317 return (br':%d\b' % (self._startport + i), b':$HGPORT%s' % offset) |
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1318 |
21454
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1319 def _getreplacements(self): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1320 """Obtain a mapping of text replacements to apply to test output. |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1321 |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1322 Test output needs to be normalized so it can be compared to expected |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1323 output. This function defines how some of that normalization will |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1324 occur. |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1325 """ |
21298
ba4750352180
run-tests: move replacements generation into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21297
diff
changeset
|
1326 r = [ |
28169
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1327 # This list should be parallel to defineport in _getenv |
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1328 self._portmap(0), |
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1329 self._portmap(1), |
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1330 self._portmap(2), |
31028 | 1331 (br'([^0-9])%s' % re.escape(self._localip()), br'\1$LOCALIP'), |
31746
728d37353e1e
run-tests: auto-replace 'TXNID' output
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31678
diff
changeset
|
1332 (br'\bHG_TXNID=TXN:[a-f0-9]{40}\b', br'HG_TXNID=TXN:$ID$'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1333 ] |
28055
92e8e3f20a6f
run-tests: factor out _escapepath
timeless <timeless@mozdev.org>
parents:
28037
diff
changeset
|
1334 r.append((self._escapepath(self._testtmp), b'$TESTTMP')) |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
1335 if WINDOWS: |
47571
e9c5c368be17
run-tests: also catch double-escapes for $TESTTMP
Raphaël Gomès <rgomes@octobus.net>
parents:
47505
diff
changeset
|
1336 # JSON output escapes backslashes in Windows paths, so also catch a |
e9c5c368be17
run-tests: also catch double-escapes for $TESTTMP
Raphaël Gomès <rgomes@octobus.net>
parents:
47505
diff
changeset
|
1337 # double-escape. |
e9c5c368be17
run-tests: also catch double-escapes for $TESTTMP
Raphaël Gomès <rgomes@octobus.net>
parents:
47505
diff
changeset
|
1338 replaced = self._testtmp.replace(b'\\', br'\\') |
e9c5c368be17
run-tests: also catch double-escapes for $TESTTMP
Raphaël Gomès <rgomes@octobus.net>
parents:
47505
diff
changeset
|
1339 r.append((self._escapepath(replaced), b'$STR_REPR_TESTTMP')) |
21298
ba4750352180
run-tests: move replacements generation into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21297
diff
changeset
|
1340 |
35205
779c6cf2967b
run-tests: avoid calculating _testdir again
Martin von Zweigbergk <martinvonz@google.com>
parents:
35204
diff
changeset
|
1341 replacementfile = os.path.join(self._testdir, b'common-pattern.py') |
35092
4fb489a998c9
run-tests: allow to register any arbitrary pattern for replacement
Boris Feld <boris.feld@octobus.net>
parents:
35089
diff
changeset
|
1342 |
4fb489a998c9
run-tests: allow to register any arbitrary pattern for replacement
Boris Feld <boris.feld@octobus.net>
parents:
35089
diff
changeset
|
1343 if os.path.exists(replacementfile): |
4fb489a998c9
run-tests: allow to register any arbitrary pattern for replacement
Boris Feld <boris.feld@octobus.net>
parents:
35089
diff
changeset
|
1344 data = {} |
35115
1ac4c0887de4
run-test: drop 'execfile' usage for 'common-pattern.py' file
Boris Feld <boris.feld@octobus.net>
parents:
35114
diff
changeset
|
1345 with open(replacementfile, mode='rb') as source: |
1ac4c0887de4
run-test: drop 'execfile' usage for 'common-pattern.py' file
Boris Feld <boris.feld@octobus.net>
parents:
35114
diff
changeset
|
1346 # the intermediate 'compile' step help with debugging |
1ac4c0887de4
run-test: drop 'execfile' usage for 'common-pattern.py' file
Boris Feld <boris.feld@octobus.net>
parents:
35114
diff
changeset
|
1347 code = compile(source.read(), replacementfile, 'exec') |
1ac4c0887de4
run-test: drop 'execfile' usage for 'common-pattern.py' file
Boris Feld <boris.feld@octobus.net>
parents:
35114
diff
changeset
|
1348 exec(code, data) |
36030
04304b779df1
tests: raise a better error when patterns are wrongly formatted
Boris Feld <boris.feld@octobus.net>
parents:
35895
diff
changeset
|
1349 for value in data.get('substitutions', ()): |
04304b779df1
tests: raise a better error when patterns are wrongly formatted
Boris Feld <boris.feld@octobus.net>
parents:
35895
diff
changeset
|
1350 if len(value) != 2: |
04304b779df1
tests: raise a better error when patterns are wrongly formatted
Boris Feld <boris.feld@octobus.net>
parents:
35895
diff
changeset
|
1351 msg = 'malformatted substitution in %s: %r' |
04304b779df1
tests: raise a better error when patterns are wrongly formatted
Boris Feld <boris.feld@octobus.net>
parents:
35895
diff
changeset
|
1352 msg %= (replacementfile, value) |
04304b779df1
tests: raise a better error when patterns are wrongly formatted
Boris Feld <boris.feld@octobus.net>
parents:
35895
diff
changeset
|
1353 raise ValueError(msg) |
04304b779df1
tests: raise a better error when patterns are wrongly formatted
Boris Feld <boris.feld@octobus.net>
parents:
35895
diff
changeset
|
1354 r.append(value) |
28055
92e8e3f20a6f
run-tests: factor out _escapepath
timeless <timeless@mozdev.org>
parents:
28037
diff
changeset
|
1355 return r |
92e8e3f20a6f
run-tests: factor out _escapepath
timeless <timeless@mozdev.org>
parents:
28037
diff
changeset
|
1356 |
92e8e3f20a6f
run-tests: factor out _escapepath
timeless <timeless@mozdev.org>
parents:
28037
diff
changeset
|
1357 def _escapepath(self, p): |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
1358 if WINDOWS: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1359 return b''.join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1360 c.isalpha() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1361 and b'[%s%s]' % (c.lower(), c.upper()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1362 or c in b'/\\' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1363 and br'[/\\]' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1364 or c.isdigit() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1365 and c |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1366 or b'\\' + c |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1367 for c in [p[i : i + 1] for i in range(len(p))] |
28055
92e8e3f20a6f
run-tests: factor out _escapepath
timeless <timeless@mozdev.org>
parents:
28037
diff
changeset
|
1368 ) |
21298
ba4750352180
run-tests: move replacements generation into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21297
diff
changeset
|
1369 else: |
28055
92e8e3f20a6f
run-tests: factor out _escapepath
timeless <timeless@mozdev.org>
parents:
28037
diff
changeset
|
1370 return re.escape(p) |
21298
ba4750352180
run-tests: move replacements generation into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21297
diff
changeset
|
1371 |
31026 | 1372 def _localip(self): |
1373 if self._useipv6: | |
1374 return b'::1' | |
1375 else: | |
1376 return b'127.0.0.1' | |
1377 | |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1378 def _genrestoreenv(self, testenv): |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1379 """Generate a script that can be used by tests to restore the original |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1380 environment.""" |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1381 # Put the restoreenv script inside self._threadtmp |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1382 scriptpath = os.path.join(self._threadtmp, b'restoreenv.sh') |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1383 testenv['HGTEST_RESTOREENV'] = _bytes2sys(scriptpath) |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1384 |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1385 # Only restore environment variable names that the shell allows |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1386 # us to export. |
33147
f458a6701983
tests: fix variable name regular expression in _genrestoreenv()
Adam Simpkins <simpkins@fb.com>
parents:
33133
diff
changeset
|
1387 name_regex = re.compile('^[a-zA-Z][a-zA-Z0-9_]*$') |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1388 |
33203
cf826b9e9ea4
tests: actually restore the original environment before running syshg
Yuya Nishihara <yuya@tcha.org>
parents:
33147
diff
changeset
|
1389 # Do not restore these variables; otherwise tests would fail. |
cf826b9e9ea4
tests: actually restore the original environment before running syshg
Yuya Nishihara <yuya@tcha.org>
parents:
33147
diff
changeset
|
1390 reqnames = {'PYTHON', 'TESTDIR', 'TESTTMP'} |
cf826b9e9ea4
tests: actually restore the original environment before running syshg
Yuya Nishihara <yuya@tcha.org>
parents:
33147
diff
changeset
|
1391 |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1392 with open(scriptpath, 'w') as envf: |
33203
cf826b9e9ea4
tests: actually restore the original environment before running syshg
Yuya Nishihara <yuya@tcha.org>
parents:
33147
diff
changeset
|
1393 for name, value in origenviron.items(): |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1394 if not name_regex.match(name): |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1395 # Skip environment variables with unusual names not |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1396 # allowed by most shells. |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1397 continue |
33203
cf826b9e9ea4
tests: actually restore the original environment before running syshg
Yuya Nishihara <yuya@tcha.org>
parents:
33147
diff
changeset
|
1398 if name in reqnames: |
cf826b9e9ea4
tests: actually restore the original environment before running syshg
Yuya Nishihara <yuya@tcha.org>
parents:
33147
diff
changeset
|
1399 continue |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1400 envf.write('%s=%s\n' % (name, shellquote(value))) |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1401 |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1402 for name in testenv: |
33203
cf826b9e9ea4
tests: actually restore the original environment before running syshg
Yuya Nishihara <yuya@tcha.org>
parents:
33147
diff
changeset
|
1403 if name in origenviron or name in reqnames: |
33133
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1404 continue |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1405 envf.write('unset %s\n' % (name,)) |
98e2c78e309c
tests: more completely restore the environment in syshgenv
Adam Simpkins <simpkins@fb.com>
parents:
33127
diff
changeset
|
1406 |
21514
59fe123dbb00
run-tests: refactor port number declaration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21513
diff
changeset
|
1407 def _getenv(self): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1408 """Obtain environment variables to use during test execution.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1409 |
28169
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1410 def defineport(i): |
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1411 offset = '' if i == 0 else '%s' % i |
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1412 env["HGPORT%s" % offset] = '%s' % (self._startport + i) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1413 |
21299
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1414 env = os.environ.copy() |
35010
f948c5b3f5c9
run-tests: avoid set PYTHONUSERBASE environment variable to None
Mihai Popescu <mihai@unity3d.com>
parents:
34842
diff
changeset
|
1415 env['PYTHONUSERBASE'] = sysconfig.get_config_var('userbase') or '' |
31950
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31829
diff
changeset
|
1416 env['HGEMITWARNINGS'] = '1' |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1417 env['TESTTMP'] = _bytes2sys(self._testtmp) |
47323
7ea39d633cf3
docket: move the uid logic in the `revlogutils.docket` module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47321
diff
changeset
|
1418 uid_file = os.path.join(_bytes2sys(self._testtmp), 'UID') |
7ea39d633cf3
docket: move the uid logic in the `revlogutils.docket` module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47321
diff
changeset
|
1419 env['HGTEST_UUIDFILE'] = uid_file |
36075
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
1420 env['TESTNAME'] = self.name |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1421 env['HOME'] = _bytes2sys(self._testtmp) |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
1422 if WINDOWS: |
46870
41d43d12c2c4
tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
46819
diff
changeset
|
1423 env['REALUSERPROFILE'] = env['USERPROFILE'] |
46093
08fd76a553c9
run-tests: configure the environment to expand `~` properly with Windows py38+
Matt Harbison <matt_harbison@yahoo.com>
parents:
46092
diff
changeset
|
1424 # py3.8+ ignores HOME: https://bugs.python.org/issue36264 |
08fd76a553c9
run-tests: configure the environment to expand `~` properly with Windows py38+
Matt Harbison <matt_harbison@yahoo.com>
parents:
46092
diff
changeset
|
1425 env['USERPROFILE'] = env['HOME'] |
44636
82543879b48e
testlib: adjust wait-on-file timeout according to the global test timeout
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44619
diff
changeset
|
1426 formated_timeout = _bytes2sys(b"%d" % default_defaults['timeout'][1]) |
82543879b48e
testlib: adjust wait-on-file timeout according to the global test timeout
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44619
diff
changeset
|
1427 env['HGTEST_TIMEOUT_DEFAULT'] = formated_timeout |
82543879b48e
testlib: adjust wait-on-file timeout according to the global test timeout
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44619
diff
changeset
|
1428 env['HGTEST_TIMEOUT'] = _bytes2sys(b"%d" % self._timeout) |
28169
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1429 # This number should match portneeded in _getport |
28170
bc010fcd836b
run-tests: stop allocating HGPORT3+HGPORT4
timeless <timeless@mozdev.org>
parents:
28169
diff
changeset
|
1430 for port in xrange(3): |
28169
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1431 # This list should be parallel to _portmap in _getreplacements |
1b07331f5900
run-tests: refactor port allocation into functions
timeless <timeless@mozdev.org>
parents:
28143
diff
changeset
|
1432 defineport(port) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1433 env["HGRCPATH"] = _bytes2sys(os.path.join(self._threadtmp, b'.hgrc')) |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1434 env["DAEMON_PIDS"] = _bytes2sys( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1435 os.path.join(self._threadtmp, b'daemon.pids') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1436 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1437 env["HGEDITOR"] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1438 '"' + sysexecutable + '"' + ' -c "import sys; sys.exit(0)"' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1439 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1440 env["HGUSER"] = "test" |
21299
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1441 env["HGENCODING"] = "ascii" |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1442 env["HGENCODINGMODE"] = "strict" |
39156
1f987f7c832b
tests: force a stable hostname in patchbomb tests
Augie Fackler <raf@durin42.com>
parents:
38972
diff
changeset
|
1443 env["HGHOSTNAME"] = "test-hostname" |
31023
225f574e0645
runtests: export HGIPV6 to hint test scripts whether to use IPv6
Jun Wu <quark@fb.com>
parents:
31022
diff
changeset
|
1444 env['HGIPV6'] = str(int(self._useipv6)) |
40541
c311424ea579
catapult: add a bit more documentation on how to use catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40540
diff
changeset
|
1445 # See contrib/catapipe.py for how to use this functionality. |
40540
889424be7ad2
catapult: introduce HGTESTCATAPULTSERVERPIPE to control run-tests' tracing
Kyle Lippincott <spectral@google.com>
parents:
40539
diff
changeset
|
1446 if 'HGTESTCATAPULTSERVERPIPE' not in env: |
889424be7ad2
catapult: introduce HGTESTCATAPULTSERVERPIPE to control run-tests' tracing
Kyle Lippincott <spectral@google.com>
parents:
40539
diff
changeset
|
1447 # If we don't have HGTESTCATAPULTSERVERPIPE explicitly set, pull the |
889424be7ad2
catapult: introduce HGTESTCATAPULTSERVERPIPE to control run-tests' tracing
Kyle Lippincott <spectral@google.com>
parents:
40539
diff
changeset
|
1448 # non-test one in as a default, otherwise set to devnull |
41768
aaad36b88298
cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents:
41767
diff
changeset
|
1449 env['HGTESTCATAPULTSERVERPIPE'] = env.get( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1450 'HGCATAPULTSERVERPIPE', os.devnull |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1451 ) |
21299
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1452 |
37342
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1453 extraextensions = [] |
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1454 for opt in self._extraconfigopts: |
46092
af3a6900f893
run-tests: fix `HGTESTEXTRAEXTENSIONS` with py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
46072
diff
changeset
|
1455 section, key = opt.split('.', 1) |
37342
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1456 if section != 'extensions': |
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1457 continue |
46092
af3a6900f893
run-tests: fix `HGTESTEXTRAEXTENSIONS` with py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
46072
diff
changeset
|
1458 name = key.split('=', 1)[0] |
37342
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1459 extraextensions.append(name) |
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1460 |
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1461 if extraextensions: |
46092
af3a6900f893
run-tests: fix `HGTESTEXTRAEXTENSIONS` with py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
46072
diff
changeset
|
1462 env['HGTESTEXTRAEXTENSIONS'] = ' '.join(extraextensions) |
37342
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37012
diff
changeset
|
1463 |
31026 | 1464 # LOCALIP could be ::1 or 127.0.0.1. Useful for tests that require raw |
1465 # IP addresses. | |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1466 env['LOCALIP'] = _bytes2sys(self._localip()) |
31026 | 1467 |
40994
08f5482a6755
py3: spawn all python instances with legacy stdio enabled on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40989
diff
changeset
|
1468 # This has the same effect as Py_LegacyWindowsStdioFlag in exewrapper.c, |
08f5482a6755
py3: spawn all python instances with legacy stdio enabled on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40989
diff
changeset
|
1469 # but this is needed for testing python instances like dummyssh, |
08f5482a6755
py3: spawn all python instances with legacy stdio enabled on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40989
diff
changeset
|
1470 # dummysmtpd.py, and dumbhttp.py. |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
1471 if PYTHON3 and WINDOWS: |
40994
08f5482a6755
py3: spawn all python instances with legacy stdio enabled on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40989
diff
changeset
|
1472 env['PYTHONLEGACYWINDOWSSTDIO'] = '1' |
08f5482a6755
py3: spawn all python instances with legacy stdio enabled on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40989
diff
changeset
|
1473 |
43837
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1474 # Modified HOME in test environment can confuse Rust tools. So set |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1475 # CARGO_HOME and RUSTUP_HOME automatically if a Rust toolchain is |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1476 # present and these variables aren't already defined. |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1477 cargo_home_path = os.path.expanduser('~/.cargo') |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1478 rustup_home_path = os.path.expanduser('~/.rustup') |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1479 |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1480 if os.path.exists(cargo_home_path) and b'CARGO_HOME' not in osenvironb: |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1481 env['CARGO_HOME'] = cargo_home_path |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1482 if ( |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1483 os.path.exists(rustup_home_path) |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1484 and b'RUSTUP_HOME' not in osenvironb |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1485 ): |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1486 env['RUSTUP_HOME'] = rustup_home_path |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
1487 |
21299
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1488 # Reset some environment variables to well-known values so that |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1489 # the tests produce repeatable output. |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1490 env['LANG'] = env['LC_ALL'] = env['LANGUAGE'] = 'C' |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1491 env['TZ'] = 'GMT' |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1492 env["EMAIL"] = "Foo Bar <foo.bar@example.com>" |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1493 env['COLUMNS'] = '80' |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1494 env['TERM'] = 'xterm' |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1495 |
40521
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1496 dropped = [ |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1497 'CDPATH', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1498 'CHGDEBUG', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1499 'EDITOR', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1500 'GREP_OPTIONS', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1501 'HG', |
40522
d6b6f1b441cf
run-tests: define the default merge tool through configuration
Boris Feld <boris.feld@octobus.net>
parents:
40521
diff
changeset
|
1502 'HGMERGE', |
40521
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1503 'HGPLAIN', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1504 'HGPLAINEXCEPT', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1505 'HGPROF', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1506 'http_proxy', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1507 'no_proxy', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1508 'NO_PROXY', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1509 'PAGER', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1510 'VISUAL', |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1511 ] |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1512 |
f8154ddaaed3
run-tests: explicitly declare the list of dropped environment variable
Boris Feld <boris.feld@octobus.net>
parents:
40270
diff
changeset
|
1513 for k in dropped: |
21299
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1514 if k in env: |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1515 del env[k] |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1516 |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1517 # unset env related to hooks |
36551
c3df20906689
tests: fix run-tests environment cleanup on Python 3
Augie Fackler <augie@google.com>
parents:
36492
diff
changeset
|
1518 for k in list(env): |
21299
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1519 if k.startswith('HG_'): |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1520 del env[k] |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1521 |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1522 if self._usechg: |
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1523 env['CHGSOCKNAME'] = os.path.join(self._chgsockdir, b'server') |
44619
78a8f65eacc8
run-tests: add --chg-debug flag to show chg debug output
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44586
diff
changeset
|
1524 if self._chgdebug: |
78a8f65eacc8
run-tests: add --chg-debug flag to show chg debug output
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44586
diff
changeset
|
1525 env['CHGDEBUG'] = 'true' |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
1526 |
21299
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1527 return env |
7861de61583b
run-tests: move createenv() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21298
diff
changeset
|
1528 |
21382
4b8ffe3abdd2
run-tests: move createhgrc into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21381
diff
changeset
|
1529 def _createhgrc(self, path): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
1530 """Create an hgrc file for this test.""" |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1531 with open(path, 'wb') as hgrc: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1532 hgrc.write(b'[ui]\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1533 hgrc.write(b'slash = True\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1534 hgrc.write(b'interactive = False\n') |
45845
21733e8c924f
errors: add config that lets user get more detailed exit codes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45521
diff
changeset
|
1535 hgrc.write(b'detailed-exit-code = True\n') |
40522
d6b6f1b441cf
run-tests: define the default merge tool through configuration
Boris Feld <boris.feld@octobus.net>
parents:
40521
diff
changeset
|
1536 hgrc.write(b'merge = internal:merge\n') |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1537 hgrc.write(b'mergemarkers = detailed\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1538 hgrc.write(b'promptecho = True\n') |
47950
a28a7dcb9158
tests: setup dummyssh as the default ssh
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47829
diff
changeset
|
1539 dummyssh = os.path.join(self._testdir, b'dummyssh') |
a28a7dcb9158
tests: setup dummyssh as the default ssh
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47829
diff
changeset
|
1540 hgrc.write(b'ssh = "%s" "%s"\n' % (PYTHON, dummyssh)) |
46030
f44b9c72f061
run-tests: allow some slack about 'waiting on lock' message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45970
diff
changeset
|
1541 hgrc.write(b'timeout.warn=15\n') |
47775
036b9b3cc79a
run-tests: use a small timeout for chg instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47774
diff
changeset
|
1542 hgrc.write(b'[chgserver]\n') |
036b9b3cc79a
run-tests: use a small timeout for chg instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47774
diff
changeset
|
1543 hgrc.write(b'idletimeout=60\n') |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1544 hgrc.write(b'[defaults]\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1545 hgrc.write(b'[devel]\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1546 hgrc.write(b'all-warnings = true\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1547 hgrc.write(b'default-date = 0 0\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1548 hgrc.write(b'[largefiles]\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1549 hgrc.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1550 b'usercache = %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1551 % (os.path.join(self._testtmp, b'.cache/largefiles')) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1552 ) |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1553 hgrc.write(b'[lfs]\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1554 hgrc.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1555 b'usercache = %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1556 % (os.path.join(self._testtmp, b'.cache/lfs')) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1557 ) |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1558 hgrc.write(b'[web]\n') |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1559 hgrc.write(b'address = localhost\n') |
44466
109322cd322a
tests: avoid implicit conversion of str to unicode
Manuel Jacob <me@manueljacob.de>
parents:
44229
diff
changeset
|
1560 hgrc.write(b'ipv6 = %r\n' % self._useipv6) |
37012
5890e5872f36
hgweb: allow defining Server response header for HTTP server
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36706
diff
changeset
|
1561 hgrc.write(b'server-header = testing stub value\n') |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1562 |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1563 for opt in self._extraconfigopts: |
44469
ff72bd52d56a
tests: avoid implicit conversion of str to unicode
Manuel Jacob <me@manueljacob.de>
parents:
44468
diff
changeset
|
1564 section, key = _sys2bytes(opt).split(b'.', 1) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1565 assert b'=' in key, ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1566 'extra config opt %s must ' 'have an = for assignment' % opt |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1567 ) |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1568 hgrc.write(b'[%s]\n%s\n' % (section, key)) |
21382
4b8ffe3abdd2
run-tests: move createhgrc into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21381
diff
changeset
|
1569 |
21523
9fb6f328576a
run-tests: move interactive test acceptance into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21522
diff
changeset
|
1570 def fail(self, msg): |
21522
eeaec308ad5f
run-tests: raise WarnTest outside of Test.fail()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21521
diff
changeset
|
1571 # unittest differentiates between errored and failed. |
eeaec308ad5f
run-tests: raise WarnTest outside of Test.fail()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21521
diff
changeset
|
1572 # Failed is denoted by AssertionError (by default at least). |
eeaec308ad5f
run-tests: raise WarnTest outside of Test.fail()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21521
diff
changeset
|
1573 raise AssertionError(msg) |
21323
a7c677e2f6ae
run-tests: move fail() into Test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21322
diff
changeset
|
1574 |
24516
62fb03e0d990
run-tests: obtain replacements inside Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24510
diff
changeset
|
1575 def _runcommand(self, cmd, env, normalizenewlines=False): |
24508
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1576 """Run command in a sub-process, capturing the output (stdout and |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1577 stderr). |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1578 |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1579 Return a tuple (exitcode, output). output is None in debug mode. |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1580 """ |
24509
27092bb70293
run-tests: remove arguments from Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24508
diff
changeset
|
1581 if self._debug: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1582 proc = subprocess.Popen( |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1583 _bytes2sys(cmd), |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1584 shell=True, |
47774
c405c089611a
run-tests: do not inherit file descriptor when running a command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47639
diff
changeset
|
1585 close_fds=closefds, |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1586 cwd=_bytes2sys(self._testtmp), |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1587 env=env, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1588 ) |
24508
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1589 ret = proc.wait() |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1590 return (ret, None) |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1591 |
24509
27092bb70293
run-tests: remove arguments from Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24508
diff
changeset
|
1592 proc = Popen4(cmd, self._testtmp, self._timeout, env) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1593 |
24508
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1594 def cleanup(): |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1595 terminate(proc) |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1596 ret = proc.wait() |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1597 if ret == 0: |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1598 ret = signal.SIGTERM << 8 |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1599 killdaemons(env['DAEMON_PIDS']) |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1600 return ret |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1601 |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1602 proc.tochild.close() |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1603 |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1604 try: |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1605 output = proc.fromchild.read() |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1606 except KeyboardInterrupt: |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1607 vlog('# Handling keyboard interrupt') |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1608 cleanup() |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1609 raise |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1610 |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1611 ret = proc.wait() |
25177
c3459555318e
run-tests: resurrect the wifexited polyfill (backout 6ab5a1c9ea3c)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25162
diff
changeset
|
1612 if wifexited(ret): |
24508
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1613 ret = os.WEXITSTATUS(ret) |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1614 |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1615 if proc.timeout: |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1616 ret = 'timeout' |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1617 |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1618 if ret: |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1619 killdaemons(env['DAEMON_PIDS']) |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1620 |
24516
62fb03e0d990
run-tests: obtain replacements inside Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24510
diff
changeset
|
1621 for s, r in self._getreplacements(): |
24508
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1622 output = re.sub(s, r, output) |
24510
8d6fd0b8f622
run-tests: separate newline normalization from replacements
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24509
diff
changeset
|
1623 |
8d6fd0b8f622
run-tests: separate newline normalization from replacements
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24509
diff
changeset
|
1624 if normalizenewlines: |
39722
030d558c6456
py3: add a missing b'' for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39679
diff
changeset
|
1625 output = output.replace(b'\r\n', b'\n') |
24510
8d6fd0b8f622
run-tests: separate newline normalization from replacements
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24509
diff
changeset
|
1626 |
24508
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1627 return ret, output.splitlines(True) |
fbe2fb71a6e6
run-tests: move run into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24507
diff
changeset
|
1628 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1629 |
21296
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
1630 class PythonTest(Test): |
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
1631 """A Python-based test.""" |
21501
98a0c58ee200
run-tests: factor refpath into Test classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21500
diff
changeset
|
1632 |
98a0c58ee200
run-tests: factor refpath into Test classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21500
diff
changeset
|
1633 @property |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1634 def refpath(self): |
25058
caa2043cc322
run-tests: unblock running python tests in python 3
Augie Fackler <augie@google.com>
parents:
25057
diff
changeset
|
1635 return os.path.join(self._testdir, b'%s.out' % self.bname) |
21501
98a0c58ee200
run-tests: factor refpath into Test classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21500
diff
changeset
|
1636 |
24516
62fb03e0d990
run-tests: obtain replacements inside Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24510
diff
changeset
|
1637 def _run(self, env): |
40270
8783710b1d58
run-tests: restore quoting the python executable for running *.py tests
Matt Harbison <matt_harbison@yahoo.com>
parents:
40263
diff
changeset
|
1638 # Quote the python(3) executable for Windows |
44229
bd0de73cf810
run-tests: remove --py3-warnings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
44023
diff
changeset
|
1639 cmd = b'"%s" "%s"' % (PYTHON, self.path) |
43309
b4b1131187c4
py3: decode bytes before logging in run-tests.py
Denis Laxalde <denis@laxalde.org>
parents:
43283
diff
changeset
|
1640 vlog("# Running", cmd.decode("utf-8")) |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
1641 result = self._runcommand(cmd, env, normalizenewlines=WINDOWS) |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1642 if self._aborted: |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1643 raise KeyboardInterrupt() |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1644 |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1645 return result |
21311
f9a7018a35ff
run-tests: roll pytest() into PythonTest._run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21310
diff
changeset
|
1646 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1647 |
29518
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1648 # Some glob patterns apply only in some circumstances, so the script |
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1649 # might want to remove (glob) annotations that otherwise should be |
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1650 # retained. |
23352
5bd04faaa3ee
run-tests: don't warn on unnecessary globs mandated by check-code.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
23347
diff
changeset
|
1651 checkcodeglobpats = [ |
29518
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1652 # On Windows it looks like \ doesn't require a (glob), but we know |
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1653 # better. |
25059
0e0f1068b878
run-tests: fix checking a line to see if it needs globbing
Augie Fackler <augie@google.com>
parents:
25058
diff
changeset
|
1654 re.compile(br'^pushing to \$TESTTMP/.*[^)]$'), |
0e0f1068b878
run-tests: fix checking a line to see if it needs globbing
Augie Fackler <augie@google.com>
parents:
25058
diff
changeset
|
1655 re.compile(br'^moving \S+/.*[^)]$'), |
29518
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1656 re.compile(br'^pulling from \$TESTTMP/.*[^)]$'), |
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1657 # Not all platforms have 127.0.0.1 as loopback (though most do), |
348b2b9da703
run-tests: add support for using 127.0.0.1 as a glob
Augie Fackler <raf@durin42.com>
parents:
29485
diff
changeset
|
1658 # so we always glob that too. |
31678
6a2959acae1a
runtests: change local IP glob pattern from "127.0.0.1" to "$LOCALIP"
Jun Wu <quark@fb.com>
parents:
31640
diff
changeset
|
1659 re.compile(br'.*\$LOCALIP.*$'), |
23352
5bd04faaa3ee
run-tests: don't warn on unnecessary globs mandated by check-code.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
23347
diff
changeset
|
1660 ] |
5bd04faaa3ee
run-tests: don't warn on unnecessary globs mandated by check-code.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
23347
diff
changeset
|
1661 |
25036
61fc2cdbc57c
run-tests: work around chr() producing unicode in Python 3
Augie Fackler <augie@google.com>
parents:
25035
diff
changeset
|
1662 bchr = chr |
25159
138dc8381049
run-tests: move all open-coded sys.version_info checks to PYTHON3 (issue4668)
Augie Fackler <augie@google.com>
parents:
25158
diff
changeset
|
1663 if PYTHON3: |
25036
61fc2cdbc57c
run-tests: work around chr() producing unicode in Python 3
Augie Fackler <augie@google.com>
parents:
25035
diff
changeset
|
1664 bchr = lambda x: bytes([x]) |
61fc2cdbc57c
run-tests: work around chr() producing unicode in Python 3
Augie Fackler <augie@google.com>
parents:
25035
diff
changeset
|
1665 |
42872
141bb77b606b
run-tests: use symbolic constant instead of arbitrary number line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42827
diff
changeset
|
1666 WARN_UNDEFINED = 1 |
141bb77b606b
run-tests: use symbolic constant instead of arbitrary number line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42827
diff
changeset
|
1667 WARN_YES = 2 |
141bb77b606b
run-tests: use symbolic constant instead of arbitrary number line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42827
diff
changeset
|
1668 WARN_NO = 3 |
141bb77b606b
run-tests: use symbolic constant instead of arbitrary number line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42827
diff
changeset
|
1669 |
42907
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
1670 MARK_OPTIONAL = b" (?)\n" |
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
1671 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1672 |
42907
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
1673 def isoptional(line): |
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
1674 return line.endswith(MARK_OPTIONAL) |
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
1675 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1676 |
21296
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
1677 class TTest(Test): |
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
1678 """A "t test" is a test backed by a .t file.""" |
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
1679 |
28284
0fe00bdb2f4f
run-tests: fix Python 3 incompatibilities
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28180
diff
changeset
|
1680 SKIPPED_PREFIX = b'skipped: ' |
0fe00bdb2f4f
run-tests: fix Python 3 incompatibilities
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28180
diff
changeset
|
1681 FAILED_PREFIX = b'hghave check failed: ' |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1682 NEEDESCAPE = re.compile(br'[\x00-\x08\x0b-\x1f\x7f-\xff]').search |
21384
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
1683 |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1684 ESCAPESUB = re.compile(br'[\x00-\x08\x0b-\x1f\\\x7f-\xff]').sub |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44469
diff
changeset
|
1685 ESCAPEMAP = {bchr(i): br'\x%02x' % i for i in range(256)} |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1686 ESCAPEMAP.update({b'\\': b'\\\\', b'\r': br'\r'}) |
21381
9aa5784992d4
run-tests: move SKIPPED_PREFIX and FAILED_PREFIX into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21380
diff
changeset
|
1687 |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1688 def __init__(self, path, *args, **kwds): |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1689 # accept an extra "case" parameter |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
1690 case = kwds.pop('case', []) |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1691 self._case = case |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
1692 self._allcases = {x for y in parsettestcases(path) for x in y} |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1693 super(TTest, self).__init__(path, *args, **kwds) |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1694 if case: |
38972
35180ade80c1
tests: fix bytes/str issues in run-tests.py caught by python3
Augie Fackler <augie@google.com>
parents:
38864
diff
changeset
|
1695 casepath = b'#'.join(case) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
1696 self.name = '%s#%s' % (self.name, _bytes2sys(casepath)) |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
1697 self.errpath = b'%s#%s.err' % (self.errpath[:-4], casepath) |
45108
a659d5a4d2d5
run-tests: replace '#' with '-' in temp path of repos created for tests
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45049
diff
changeset
|
1698 self._tmpname += b'-%s' % casepath.replace(b'#', b'-') |
36492
5c1cea8a3e60
run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com>
parents:
36491
diff
changeset
|
1699 self._have = {} |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1700 |
21501
98a0c58ee200
run-tests: factor refpath into Test classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21500
diff
changeset
|
1701 @property |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
1702 def refpath(self): |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1703 return os.path.join(self._testdir, self.bname) |
21501
98a0c58ee200
run-tests: factor refpath into Test classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21500
diff
changeset
|
1704 |
24516
62fb03e0d990
run-tests: obtain replacements inside Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24510
diff
changeset
|
1705 def _run(self, env): |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1706 with open(self.path, 'rb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1707 lines = f.readlines() |
21313
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1708 |
32999
02bca6dc5f41
run-tests: update .t reference output after reading the test
Jun Wu <quark@fb.com>
parents:
32998
diff
changeset
|
1709 # .t file is both reference output and the test input, keep reference |
02bca6dc5f41
run-tests: update .t reference output after reading the test
Jun Wu <quark@fb.com>
parents:
32998
diff
changeset
|
1710 # output updated with the the test input. This avoids some race |
02bca6dc5f41
run-tests: update .t reference output after reading the test
Jun Wu <quark@fb.com>
parents:
32998
diff
changeset
|
1711 # conditions where the reference output does not match the actual test. |
02bca6dc5f41
run-tests: update .t reference output after reading the test
Jun Wu <quark@fb.com>
parents:
32998
diff
changeset
|
1712 if self._refout is not None: |
02bca6dc5f41
run-tests: update .t reference output after reading the test
Jun Wu <quark@fb.com>
parents:
32998
diff
changeset
|
1713 self._refout = lines |
02bca6dc5f41
run-tests: update .t reference output after reading the test
Jun Wu <quark@fb.com>
parents:
32998
diff
changeset
|
1714 |
21454
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1715 salt, script, after, expected = self._parsetest(lines) |
21313
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1716 |
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1717 # Write out the generated script. |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1718 fname = b'%s.sh' % self._testtmp |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1719 with open(fname, 'wb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1720 for l in script: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
1721 f.write(l) |
21313
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1722 |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1723 cmd = b'%s "%s"' % (self._shell, fname) |
43309
b4b1131187c4
py3: decode bytes before logging in run-tests.py
Denis Laxalde <denis@laxalde.org>
parents:
43283
diff
changeset
|
1724 vlog("# Running", cmd.decode("utf-8")) |
21313
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1725 |
24516
62fb03e0d990
run-tests: obtain replacements inside Test._runcommand
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24510
diff
changeset
|
1726 exitcode, output = self._runcommand(cmd, env) |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1727 |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1728 if self._aborted: |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1729 raise KeyboardInterrupt() |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
1730 |
21313
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1731 # Do not merge output if skipped. Return hghave message instead. |
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1732 # Similarly, with --debug, output is None. |
21380
de6ea36ca9f7
run-tests: move SKIPPED_STATUS into Test class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21379
diff
changeset
|
1733 if exitcode == self.SKIPPED_STATUS or output is None: |
21313
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1734 return exitcode, output |
a2bd02a3b6d2
run-tests: move t test execution from tsttest() to TTest.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21312
diff
changeset
|
1735 |
21314
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1736 return self._processoutput(exitcode, output, salt, after, expected) |
21296
cd8776030833
run-tests: create classes for representing tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21231
diff
changeset
|
1737 |
21454
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1738 def _hghave(self, reqs): |
36492
5c1cea8a3e60
run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com>
parents:
36491
diff
changeset
|
1739 allreqs = b' '.join(reqs) |
41808
bc1c1435a874
runtest: move slow timeout process earlier in the `_hghave` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41807
diff
changeset
|
1740 |
bc1c1435a874
runtest: move slow timeout process earlier in the `_hghave` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41807
diff
changeset
|
1741 self._detectslow(reqs) |
bc1c1435a874
runtest: move slow timeout process earlier in the `_hghave` method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41807
diff
changeset
|
1742 |
36492
5c1cea8a3e60
run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com>
parents:
36491
diff
changeset
|
1743 if allreqs in self._have: |
5c1cea8a3e60
run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com>
parents:
36491
diff
changeset
|
1744 return self._have.get(allreqs) |
5c1cea8a3e60
run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com>
parents:
36491
diff
changeset
|
1745 |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1746 # TODO do something smarter when all other uses of hghave are gone. |
44203
fb7da4759a18
run-tests: fix conditional when tests are run outside of `tests`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44202
diff
changeset
|
1747 runtestdir = osenvironb[b'RUNTESTDIR'] |
25728
905c32321cfb
run-tests.py: execute hghave by the path relative to run-tests.py
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25388
diff
changeset
|
1748 tdir = runtestdir.replace(b'\\', b'/') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1749 proc = Popen4( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1750 b'%s -c "%s/hghave %s"' % (self._shell, tdir, allreqs), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1751 self._testtmp, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1752 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1753 self._getenv(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1754 ) |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1755 stdout, stderr = proc.communicate() |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1756 ret = proc.wait() |
25177
c3459555318e
run-tests: resurrect the wifexited polyfill (backout 6ab5a1c9ea3c)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25162
diff
changeset
|
1757 if wifexited(ret): |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1758 ret = os.WEXITSTATUS(ret) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1759 if ret == 2: |
28699
5cc59dbd199f
py3: convert hghave output to text
timeless <timeless@mozdev.org>
parents:
28698
diff
changeset
|
1760 print(stdout.decode('utf-8')) |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1761 sys.exit(1) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1762 |
27141
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
1763 if ret != 0: |
36492
5c1cea8a3e60
run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com>
parents:
36491
diff
changeset
|
1764 self._have[allreqs] = (False, stdout) |
27564
80b53082a353
run-tests: report missing feature for skipped tests
timeless <timeless@mozdev.org>
parents:
27396
diff
changeset
|
1765 return False, stdout |
27141
a4e3dec3010e
run-tests: add --slowtimeout and use it for slow tests
timeless <timeless@mozdev.org>
parents:
27101
diff
changeset
|
1766 |
36492
5c1cea8a3e60
run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com>
parents:
36491
diff
changeset
|
1767 self._have[allreqs] = (True, None) |
27564
80b53082a353
run-tests: report missing feature for skipped tests
timeless <timeless@mozdev.org>
parents:
27396
diff
changeset
|
1768 return True, None |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1769 |
41807
7eb4e62d4760
runtest: extract the logic that update timeout for slow tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41806
diff
changeset
|
1770 def _detectslow(self, reqs): |
7eb4e62d4760
runtest: extract the logic that update timeout for slow tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41806
diff
changeset
|
1771 """update the timeout of slow test when appropriate""" |
7eb4e62d4760
runtest: extract the logic that update timeout for slow tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41806
diff
changeset
|
1772 if b'slow' in reqs: |
7eb4e62d4760
runtest: extract the logic that update timeout for slow tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41806
diff
changeset
|
1773 self._timeout = self._slowtimeout |
7eb4e62d4760
runtest: extract the logic that update timeout for slow tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41806
diff
changeset
|
1774 |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1775 def _iftest(self, args): |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1776 # implements "#if" |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1777 reqs = [] |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1778 for arg in args: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1779 if arg.startswith(b'no-') and arg[3:] in self._allcases: |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
1780 if arg[3:] in self._case: |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1781 return False |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1782 elif arg in self._allcases: |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
1783 if arg not in self._case: |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1784 return False |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1785 else: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1786 reqs.append(arg) |
41809
4cbccb50df46
runtest: also update slow test timeout during `#if` clauses
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41808
diff
changeset
|
1787 self._detectslow(reqs) |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1788 return self._hghave(reqs)[0] |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1789 |
21454
046587aa1c8a
run-tests: refactor testtmp
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21453
diff
changeset
|
1790 def _parsetest(self, lines): |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1791 # We generate a shell script which outputs unique markers to line |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1792 # up script results with our source. These markers include input |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1793 # line number and the last return code. |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1794 salt = b"SALT%d" % time.time() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1795 |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1796 def addsalt(line, inpython): |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1797 if inpython: |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1798 script.append(b'%s %d 0\n' % (salt, line)) |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1799 else: |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
1800 script.append(b'echo %s %d $?\n' % (salt, line)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1801 |
40539
a9e00c48c5ef
catapult: rename 'active' to 'activetrace'; this isn't storing a boolean state
Kyle Lippincott <spectral@google.com>
parents:
40538
diff
changeset
|
1802 activetrace = [] |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1803 session = str(uuid.uuid4()) |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1804 if PYTHON3: |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1805 session = session.encode('ascii') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1806 hgcatapult = os.getenv('HGTESTCATAPULTSERVERPIPE') or os.getenv( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1807 'HGCATAPULTSERVERPIPE' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1808 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1809 |
40538
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1810 def toggletrace(cmd=None): |
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1811 if not hgcatapult or hgcatapult == os.devnull: |
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1812 return |
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1813 |
40539
a9e00c48c5ef
catapult: rename 'active' to 'activetrace'; this isn't storing a boolean state
Kyle Lippincott <spectral@google.com>
parents:
40538
diff
changeset
|
1814 if activetrace: |
40538
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1815 script.append( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1816 b'echo END %s %s >> "$HGTESTCATAPULTSERVERPIPE"\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1817 % (session, activetrace[0]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1818 ) |
40538
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1819 if cmd is None: |
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1820 return |
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1821 |
39423
f57682dca1c1
tests: avoid shellquoting bytes on Python 3
Augie Fackler <augie@google.com>
parents:
39406
diff
changeset
|
1822 if isinstance(cmd, str): |
f57682dca1c1
tests: avoid shellquoting bytes on Python 3
Augie Fackler <augie@google.com>
parents:
39406
diff
changeset
|
1823 quoted = shellquote(cmd.strip()) |
f57682dca1c1
tests: avoid shellquoting bytes on Python 3
Augie Fackler <augie@google.com>
parents:
39406
diff
changeset
|
1824 else: |
f57682dca1c1
tests: avoid shellquoting bytes on Python 3
Augie Fackler <augie@google.com>
parents:
39406
diff
changeset
|
1825 quoted = shellquote(cmd.strip().decode('utf8')).encode('utf8') |
f57682dca1c1
tests: avoid shellquoting bytes on Python 3
Augie Fackler <augie@google.com>
parents:
39406
diff
changeset
|
1826 quoted = quoted.replace(b'\\', b'\\\\') |
40538
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1827 script.append( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1828 b'echo START %s %s >> "$HGTESTCATAPULTSERVERPIPE"\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1829 % (session, quoted) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1830 ) |
40539
a9e00c48c5ef
catapult: rename 'active' to 'activetrace'; this isn't storing a boolean state
Kyle Lippincott <spectral@google.com>
parents:
40538
diff
changeset
|
1831 activetrace[0:] = [quoted] |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1832 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1833 script = [] |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1834 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1835 # After we run the shell script, we re-unify the script output |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1836 # with non-active parts of the source, with synchronization by our |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1837 # SALT line number markers. The after table contains the non-active |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1838 # components, ordered by line number. |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1839 after = {} |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1840 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1841 # Expected shell script output. |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1842 expected = {} |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1843 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1844 pos = prepos = -1 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1845 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1846 # True or False when in a true or false conditional section |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1847 skipping = None |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1848 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1849 # We keep track of whether or not we're in a Python block so we |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1850 # can generate the surrounding doctest magic. |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1851 inpython = False |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1852 |
21510
97127c4ce460
run-tests: move debug into an argument to Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21509
diff
changeset
|
1853 if self._debug: |
25060
29e54fe22a3f
run-tests: make sure all script lines are bytes
Augie Fackler <augie@google.com>
parents:
25059
diff
changeset
|
1854 script.append(b'set -x\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1855 if os.getenv('MSYSTEM'): |
25060
29e54fe22a3f
run-tests: make sure all script lines are bytes
Augie Fackler <augie@google.com>
parents:
25059
diff
changeset
|
1856 script.append(b'alias pwd="pwd -W"\n') |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1857 |
39406
b64d36e5ca31
run-tests: replace '/dev/null' with os.devnull for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39316
diff
changeset
|
1858 if hgcatapult and hgcatapult != os.devnull: |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
1859 hgcatapult = hgcatapult.encode('utf8') |
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
1860 cataname = self.name.encode('utf8') |
42532
9913fffd744b
py3: make catapult usable from the test runner in py3
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42530
diff
changeset
|
1861 |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1862 # Kludge: use a while loop to keep the pipe from getting |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1863 # closed by our echo commands. The still-running file gets |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1864 # reaped at the end of the script, which causes the while |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1865 # loop to exit and closes the pipe. Sigh. |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1866 script.append( |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1867 b'rtendtracing() {\n' |
40540
889424be7ad2
catapult: introduce HGTESTCATAPULTSERVERPIPE to control run-tests' tracing
Kyle Lippincott <spectral@google.com>
parents:
40539
diff
changeset
|
1868 b' echo END %(session)s %(name)s >> %(catapult)s\n' |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1869 b' rm -f "$TESTTMP/.still-running"\n' |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1870 b'}\n' |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1871 b'trap "rtendtracing" 0\n' |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1872 b'touch "$TESTTMP/.still-running"\n' |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1873 b'while [ -f "$TESTTMP/.still-running" ]; do sleep 1; done ' |
40540
889424be7ad2
catapult: introduce HGTESTCATAPULTSERVERPIPE to control run-tests' tracing
Kyle Lippincott <spectral@google.com>
parents:
40539
diff
changeset
|
1874 b'> %(catapult)s &\n' |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1875 b'HGCATAPULTSESSION=%(session)s ; export HGCATAPULTSESSION\n' |
40540
889424be7ad2
catapult: introduce HGTESTCATAPULTSERVERPIPE to control run-tests' tracing
Kyle Lippincott <spectral@google.com>
parents:
40539
diff
changeset
|
1876 b'echo START %(session)s %(name)s >> %(catapult)s\n' |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1877 % { |
42532
9913fffd744b
py3: make catapult usable from the test runner in py3
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42530
diff
changeset
|
1878 b'name': cataname, |
9913fffd744b
py3: make catapult usable from the test runner in py3
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42530
diff
changeset
|
1879 b'session': session, |
9913fffd744b
py3: make catapult usable from the test runner in py3
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42530
diff
changeset
|
1880 b'catapult': hgcatapult, |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1881 } |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1882 ) |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1883 |
35540
f04d16bef2c7
tests: make #testcase available as env var in test
Martin von Zweigbergk <martinvonz@google.com>
parents:
35493
diff
changeset
|
1884 if self._case: |
38972
35180ade80c1
tests: fix bytes/str issues in run-tests.py caught by python3
Augie Fackler <augie@google.com>
parents:
38864
diff
changeset
|
1885 casestr = b'#'.join(self._case) |
44202
9803b374389a
tests: fix isinstance test of wrong variable
Manuel Jacob <me@manueljacob.de>
parents:
44023
diff
changeset
|
1886 if isinstance(casestr, str): |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
1887 quoted = shellquote(casestr) |
35863
4be991331a46
tests: get run-tests to reliably hand shellquote a string and not a bytes
Augie Fackler <augie@google.com>
parents:
35751
diff
changeset
|
1888 else: |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
1889 quoted = shellquote(casestr.decode('utf8')).encode('utf8') |
35863
4be991331a46
tests: get run-tests to reliably hand shellquote a string and not a bytes
Augie Fackler <augie@google.com>
parents:
35751
diff
changeset
|
1890 script.append(b'TESTCASE=%s\n' % quoted) |
35540
f04d16bef2c7
tests: make #testcase available as env var in test
Martin von Zweigbergk <martinvonz@google.com>
parents:
35493
diff
changeset
|
1891 script.append(b'export TESTCASE\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1892 |
28812
f1de5a612a74
run-tests: handle empty tests
timeless <timeless@mozdev.org>
parents:
28701
diff
changeset
|
1893 n = 0 |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1894 for n, l in enumerate(lines): |
25035
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1895 if not l.endswith(b'\n'): |
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1896 l += b'\n' |
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1897 if l.startswith(b'#require'): |
22045
769198c6a62d
run-tests: add #require to abort full test
Matt Mackall <mpm@selenic.com>
parents:
22044
diff
changeset
|
1898 lsplit = l.split() |
25035
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1899 if len(lsplit) < 2 or lsplit[0] != b'#require': |
43408
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1900 after.setdefault(pos, []).append( |
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1901 b' !!! invalid #require\n' |
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1902 ) |
36706
a247a0e82e7d
run-tests: allow #require inside #if
Jun Wu <quark@fb.com>
parents:
36694
diff
changeset
|
1903 if not skipping: |
a247a0e82e7d
run-tests: allow #require inside #if
Jun Wu <quark@fb.com>
parents:
36694
diff
changeset
|
1904 haveresult, message = self._hghave(lsplit[1:]) |
a247a0e82e7d
run-tests: allow #require inside #if
Jun Wu <quark@fb.com>
parents:
36694
diff
changeset
|
1905 if not haveresult: |
a247a0e82e7d
run-tests: allow #require inside #if
Jun Wu <quark@fb.com>
parents:
36694
diff
changeset
|
1906 script = [b'echo "%s"\nexit 80\n' % message] |
a247a0e82e7d
run-tests: allow #require inside #if
Jun Wu <quark@fb.com>
parents:
36694
diff
changeset
|
1907 break |
22045
769198c6a62d
run-tests: add #require to abort full test
Matt Mackall <mpm@selenic.com>
parents:
22044
diff
changeset
|
1908 after.setdefault(pos, []).append(l) |
25035
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1909 elif l.startswith(b'#if'): |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1910 lsplit = l.split() |
25035
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1911 if len(lsplit) < 2 or lsplit[0] != b'#if': |
43408
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1912 after.setdefault(pos, []).append(b' !!! invalid #if\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1913 if skipping is not None: |
43408
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1914 after.setdefault(pos, []).append(b' !!! nested #if\n') |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
1915 skipping = not self._iftest(lsplit[1:]) |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1916 after.setdefault(pos, []).append(l) |
25035
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1917 elif l.startswith(b'#else'): |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1918 if skipping is None: |
43408
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1919 after.setdefault(pos, []).append(b' !!! missing #if\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1920 skipping = not skipping |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1921 after.setdefault(pos, []).append(l) |
25035
1203ca7005fa
run-tests: use bytes when constructing shell script
Augie Fackler <augie@google.com>
parents:
25034
diff
changeset
|
1922 elif l.startswith(b'#endif'): |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1923 if skipping is None: |
43408
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1924 after.setdefault(pos, []).append(b' !!! missing #if\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1925 skipping = None |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1926 after.setdefault(pos, []).append(l) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1927 elif skipping: |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1928 after.setdefault(pos, []).append(l) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1929 elif l.startswith(b' >>> '): # python inlines |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1930 after.setdefault(pos, []).append(l) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1931 prepos = pos |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1932 pos = n |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1933 if not inpython: |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1934 # We've just entered a Python block. Add the header. |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1935 inpython = True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1936 addsalt(prepos, False) # Make sure we report the exit code. |
39733
7f8b7a060584
run-tests: quote PYTHON when spawning a subprocess
Matt Harbison <matt_harbison@yahoo.com>
parents:
39730
diff
changeset
|
1937 script.append(b'"%s" -m heredoctest <<EOF\n' % PYTHON) |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1938 addsalt(n, True) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1939 script.append(l[2:]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1940 elif l.startswith(b' ... '): # python inlines |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1941 after.setdefault(prepos, []).append(l) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1942 script.append(l[2:]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1943 elif l.startswith(b' $ '): # commands |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1944 if inpython: |
25060
29e54fe22a3f
run-tests: make sure all script lines are bytes
Augie Fackler <augie@google.com>
parents:
25059
diff
changeset
|
1945 script.append(b'EOF\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1946 inpython = False |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1947 after.setdefault(pos, []).append(l) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1948 prepos = pos |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1949 pos = n |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1950 addsalt(n, False) |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1951 rawcmd = l[4:] |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1952 cmd = rawcmd.split() |
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1953 toggletrace(rawcmd) |
25060
29e54fe22a3f
run-tests: make sure all script lines are bytes
Augie Fackler <augie@google.com>
parents:
25059
diff
changeset
|
1954 if len(cmd) == 2 and cmd[0] == b'cd': |
43987
bd3fa45c0662
run-tests: ensure the script exits when it fails to change directories
Matt Harbison <matt_harbison@yahoo.com>
parents:
43837
diff
changeset
|
1955 rawcmd = b'cd %s || exit 1\n' % cmd[1] |
39281
c496e8c14b9e
tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com>
parents:
39156
diff
changeset
|
1956 script.append(rawcmd) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1957 elif l.startswith(b' > '): # continuations |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1958 after.setdefault(prepos, []).append(l) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1959 script.append(l[4:]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1960 elif l.startswith(b' '): # results |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1961 # Queue up a list of expected results. |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1962 expected.setdefault(pos, []).append(l[2:]) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1963 else: |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1964 if inpython: |
25060
29e54fe22a3f
run-tests: make sure all script lines are bytes
Augie Fackler <augie@google.com>
parents:
25059
diff
changeset
|
1965 script.append(b'EOF\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1966 inpython = False |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1967 # Non-command/result. Queue up for merged output. |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1968 after.setdefault(pos, []).append(l) |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1969 |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1970 if inpython: |
25060
29e54fe22a3f
run-tests: make sure all script lines are bytes
Augie Fackler <augie@google.com>
parents:
25059
diff
changeset
|
1971 script.append(b'EOF\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1972 if skipping is not None: |
43408
d9e7ac50b80a
run-tests: use byte strings for inserted output
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43346
diff
changeset
|
1973 after.setdefault(pos, []).append(b' !!! missing #endif\n') |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1974 addsalt(n + 1, False) |
40538
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1975 # Need to end any current per-command trace |
40539
a9e00c48c5ef
catapult: rename 'active' to 'activetrace'; this isn't storing a boolean state
Kyle Lippincott <spectral@google.com>
parents:
40538
diff
changeset
|
1976 if activetrace: |
40538
d95358143ce6
catapult: fix broken run-tests catapult tracing
Kyle Lippincott <spectral@google.com>
parents:
40537
diff
changeset
|
1977 toggletrace() |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1978 return salt, script, after, expected |
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
1979 |
21314
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1980 def _processoutput(self, exitcode, output, salt, after, expected): |
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1981 # Merge the script output back into a unified test. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1982 warnonly = WARN_UNDEFINED # 1: not yet; 2: yes; 3: for sure not |
21314
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1983 if exitcode != 0: |
42872
141bb77b606b
run-tests: use symbolic constant instead of arbitrary number line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42827
diff
changeset
|
1984 warnonly = WARN_NO |
21314
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1985 |
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1986 pos = -1 |
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1987 postout = [] |
42873
eab66266180e
run-tests: clarify "l" variable as "out_rawline"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42872
diff
changeset
|
1988 for out_rawline in output: |
42875
5ca351ba2478
run-tests: rename `lcmd` variable to `line_cmd`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42874
diff
changeset
|
1989 out_line, cmd_line = out_rawline, None |
42873
eab66266180e
run-tests: clarify "l" variable as "out_rawline"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42872
diff
changeset
|
1990 if salt in out_rawline: |
42875
5ca351ba2478
run-tests: rename `lcmd` variable to `line_cmd`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42874
diff
changeset
|
1991 out_line, cmd_line = out_rawline.split(salt, 1) |
42874
35ef1e957a62
run-tests: rename `lout` variable to `out_line`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42873
diff
changeset
|
1992 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1993 pos, postout, warnonly = self._process_out_line( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1994 out_line, pos, postout, expected, warnonly |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1995 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
1996 pos, postout = self._process_cmd_line(cmd_line, pos, postout, after) |
21314
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1997 |
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1998 if pos in after: |
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
1999 postout += after.pop(pos) |
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
2000 |
42905
f461b65866e9
run-tests: extract a `process_out_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42904
diff
changeset
|
2001 if warnonly == WARN_YES: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2002 exitcode = False # Set exitcode to warned. |
21314
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
2003 |
76d7967d8f3d
run-tests: finish moving tsttest() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21313
diff
changeset
|
2004 return exitcode, postout |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
2005 |
42905
f461b65866e9
run-tests: extract a `process_out_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42904
diff
changeset
|
2006 def _process_out_line(self, out_line, pos, postout, expected, warnonly): |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2007 while out_line: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2008 if not out_line.endswith(b'\n'): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2009 out_line += b' (no-eol)\n' |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2010 |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2011 # Find the expected output at the current position. |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2012 els = [None] |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2013 if expected.get(pos, None): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2014 els = expected[pos] |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2015 |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2016 optional = [] |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2017 for i, el in enumerate(els): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2018 r = False |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2019 if el: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2020 r, exact = self.linematch(el, out_line) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2021 if isinstance(r, str): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2022 if r == '-glob': |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2023 out_line = ''.join(el.rsplit(' (glob)', 1)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2024 r = '' # Warn only this line. |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2025 elif r == "retry": |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2026 postout.append(b' ' + el) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2027 else: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2028 log('\ninfo, unknown linematch result: %r\n' % r) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2029 r = False |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2030 if r: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2031 els.pop(i) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2032 break |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2033 if el: |
42907
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
2034 if isoptional(el): |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2035 optional.append(i) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2036 else: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2037 m = optline.match(el) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2038 if m: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2039 conditions = [c for c in m.group(2).split(b' ')] |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2040 |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2041 if not self._iftest(conditions): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2042 optional.append(i) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2043 if exact: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2044 # Don't allow line to be matches against a later |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2045 # line in the output |
28569
1ad0ddf8cccc
run-tests: teach _processoutput to handle multiple lines of churn
timeless <timeless@mozdev.org>
parents:
28568
diff
changeset
|
2046 els.pop(i) |
1ad0ddf8cccc
run-tests: teach _processoutput to handle multiple lines of churn
timeless <timeless@mozdev.org>
parents:
28568
diff
changeset
|
2047 break |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2048 |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2049 if r: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2050 if r == "retry": |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2051 continue |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2052 # clean up any optional leftovers |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2053 for i in optional: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2054 postout.append(b' ' + els[i]) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2055 for i in reversed(optional): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2056 del els[i] |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2057 postout.append(b' ' + el) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2058 else: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2059 if self.NEEDESCAPE(out_line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2060 out_line = TTest._stringescape( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2061 b'%s (esc)\n' % out_line.rstrip(b'\n') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2062 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2063 postout.append(b' ' + out_line) # Let diff deal with it. |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2064 if r != '': # If line failed. |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2065 warnonly = WARN_NO |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2066 elif warnonly == WARN_UNDEFINED: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2067 warnonly = WARN_YES |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2068 break |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2069 else: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2070 # clean up any optional leftovers |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2071 while expected.get(pos, None): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2072 el = expected[pos].pop(0) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2073 if el: |
42907
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
2074 if not isoptional(el): |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2075 m = optline.match(el) |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2076 if m: |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2077 conditions = [c for c in m.group(2).split(b' ')] |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2078 |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2079 if self._iftest(conditions): |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2080 # Don't append as optional line |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2081 continue |
31829
4eec2f04a672
run-tests: support per-line conditional output in tests
Matt Harbison <matt_harbison@yahoo.com>
parents:
31827
diff
changeset
|
2082 else: |
42906
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2083 continue |
8510566b2bef
run-tests: remove the artificial indentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42905
diff
changeset
|
2084 postout.append(b' ' + el) |
42905
f461b65866e9
run-tests: extract a `process_out_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42904
diff
changeset
|
2085 return pos, postout, warnonly |
21312
986b8a58a6d3
run-tests: move t test parsing into its own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21311
diff
changeset
|
2086 |
42904
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2087 def _process_cmd_line(self, cmd_line, pos, postout, after): |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2088 """process a "command" part of a line from unified test output""" |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2089 if cmd_line: |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2090 # Add on last return code. |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2091 ret = int(cmd_line.split()[1]) |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2092 if ret != 0: |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2093 postout.append(b' [%d]\n' % ret) |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2094 if pos in after: |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2095 # Merge in non-active test bits. |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2096 postout += after.pop(pos) |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2097 pos = int(cmd_line.split()[0]) |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2098 return pos, postout |
fc8072f38fd6
run-tests: extract a `process_cmd_line` from the main function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42875
diff
changeset
|
2099 |
21315
56610da39b48
run-tests: make linematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21314
diff
changeset
|
2100 @staticmethod |
21316
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2101 def rematch(el, l): |
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2102 try: |
43819
3fe91bcd5199
tests: fix deprecation warning about regex flags not at beginning of expr
Kyle Lippincott <spectral@google.com>
parents:
43639
diff
changeset
|
2103 # parse any flags at the beginning of the regex. Only 'i' is |
3fe91bcd5199
tests: fix deprecation warning about regex flags not at beginning of expr
Kyle Lippincott <spectral@google.com>
parents:
43639
diff
changeset
|
2104 # supported right now, but this should be easy to extend. |
3fe91bcd5199
tests: fix deprecation warning about regex flags not at beginning of expr
Kyle Lippincott <spectral@google.com>
parents:
43639
diff
changeset
|
2105 flags, el = re.match(br'^(\(\?i\))?(.*)', el).groups()[0:2] |
3fe91bcd5199
tests: fix deprecation warning about regex flags not at beginning of expr
Kyle Lippincott <spectral@google.com>
parents:
43639
diff
changeset
|
2106 flags = flags or b'' |
3fe91bcd5199
tests: fix deprecation warning about regex flags not at beginning of expr
Kyle Lippincott <spectral@google.com>
parents:
43639
diff
changeset
|
2107 el = flags + b'(?:' + el + b')' |
21316
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2108 # use \Z to ensure that the regex matches to the end of the string |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
2109 if WINDOWS: |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2110 return re.match(el + br'\r?\n\Z', l) |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2111 return re.match(el + br'\n\Z', l) |
21316
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2112 except re.error: |
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2113 # el is an invalid regex |
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2114 return False |
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2115 |
ab9bf8a5e573
run-tests: make rematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21315
diff
changeset
|
2116 @staticmethod |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2117 def globmatch(el, l): |
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2118 # The only supported special characters are * and ? plus / which also |
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2119 # matches \ on windows. Escaping of these characters is supported. |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2120 if el + b'\n' == l: |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2121 if os.altsep: |
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2122 # matching on "/" is not needed for this line |
23352
5bd04faaa3ee
run-tests: don't warn on unnecessary globs mandated by check-code.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
23347
diff
changeset
|
2123 for pat in checkcodeglobpats: |
5bd04faaa3ee
run-tests: don't warn on unnecessary globs mandated by check-code.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
23347
diff
changeset
|
2124 if pat.match(el): |
5bd04faaa3ee
run-tests: don't warn on unnecessary globs mandated by check-code.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
23347
diff
changeset
|
2125 return True |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2126 return b'-glob' |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2127 return True |
31678
6a2959acae1a
runtests: change local IP glob pattern from "127.0.0.1" to "$LOCALIP"
Jun Wu <quark@fb.com>
parents:
31640
diff
changeset
|
2128 el = el.replace(b'$LOCALIP', b'*') |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2129 i, n = 0, len(el) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2130 res = b'' |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2131 while i < n: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2132 c = el[i : i + 1] |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2133 i += 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2134 if c == b'\\' and i < n and el[i : i + 1] in b'*?\\/': |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2135 res += el[i - 1 : i + 1] |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2136 i += 1 |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2137 elif c == b'*': |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2138 res += b'.*' |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2139 elif c == b'?': |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2140 res += b'.' |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2141 elif c == b'/' and os.altsep: |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
2142 res += b'[/\\\\]' |
21317
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2143 else: |
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2144 res += re.escape(c) |
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2145 return TTest.rematch(res, l) |
58a599784a0c
run-tests: make globmatch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21316
diff
changeset
|
2146 |
33721
eeed23508383
run-tests: drop required (feature !) style lines when the output is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
33592
diff
changeset
|
2147 def linematch(self, el, l): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2148 if el == l: # perfect match (fast) |
38555
f83600efa1ca
tests: don't allow reodering of glob/re lines across non-glob/re lines
Martin von Zweigbergk <martinvonz@google.com>
parents:
38553
diff
changeset
|
2149 return True, True |
38553
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2150 retry = False |
42907
75bd5990d8fe
run-tests: add a dedicated 'isoptional' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42906
diff
changeset
|
2151 if isoptional(el): |
38553
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2152 retry = "retry" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2153 el = el[: -len(MARK_OPTIONAL)] + b"\n" |
38553
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2154 else: |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2155 m = optline.match(el) |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2156 if m: |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2157 conditions = [c for c in m.group(2).split(b' ')] |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2158 |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2159 el = m.group(1) + b"\n" |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2160 if not self._iftest(conditions): |
42177
c1850798f995
run-tests: stop matching line for missing feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41809
diff
changeset
|
2161 # listed feature missing, should not match |
c1850798f995
run-tests: stop matching line for missing feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41809
diff
changeset
|
2162 return "retry", False |
38553
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2163 |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2164 if el.endswith(b" (esc)\n"): |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
2165 el = el[:-7].decode('unicode_escape') + '\n' |
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
2166 el = el.encode('latin-1') |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
2167 if el == l or WINDOWS and el[:-1] + b'\r\n' == l: |
38555
f83600efa1ca
tests: don't allow reodering of glob/re lines across non-glob/re lines
Martin von Zweigbergk <martinvonz@google.com>
parents:
38553
diff
changeset
|
2168 return True, True |
38553
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2169 if el.endswith(b" (re)\n"): |
38555
f83600efa1ca
tests: don't allow reodering of glob/re lines across non-glob/re lines
Martin von Zweigbergk <martinvonz@google.com>
parents:
38553
diff
changeset
|
2170 return (TTest.rematch(el[:-6], l) or retry), False |
38553
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2171 if el.endswith(b" (glob)\n"): |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2172 # ignore '(glob)' added to l by 'replacements' |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2173 if l.endswith(b" (glob)\n"): |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2174 l = l[:-8] + b"\n" |
38555
f83600efa1ca
tests: don't allow reodering of glob/re lines across non-glob/re lines
Martin von Zweigbergk <martinvonz@google.com>
parents:
38553
diff
changeset
|
2175 return (TTest.globmatch(el[:-8], l) or retry), False |
38553
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2176 if os.altsep: |
5a20b6090a6e
tests: move handling of None "el" out of linematch()
Martin von Zweigbergk <martinvonz@google.com>
parents:
38552
diff
changeset
|
2177 _l = l.replace(b'\\', b'/') |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
2178 if el == _l or WINDOWS and el[:-1] + b'\r\n' == _l: |
38555
f83600efa1ca
tests: don't allow reodering of glob/re lines across non-glob/re lines
Martin von Zweigbergk <martinvonz@google.com>
parents:
38553
diff
changeset
|
2179 return True, True |
f83600efa1ca
tests: don't allow reodering of glob/re lines across non-glob/re lines
Martin von Zweigbergk <martinvonz@google.com>
parents:
38553
diff
changeset
|
2180 return retry, True |
21315
56610da39b48
run-tests: make linematch a static method of TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21314
diff
changeset
|
2181 |
21379
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2182 @staticmethod |
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2183 def parsehghaveoutput(lines): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
2184 """Parse hghave log lines. |
21379
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2185 |
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2186 Return tuple of lists (missing, failed): |
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2187 * the missing/unknown features |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
2188 * the features for which existence check failed""" |
21379
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2189 missing = [] |
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2190 failed = [] |
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2191 for line in lines: |
21381
9aa5784992d4
run-tests: move SKIPPED_PREFIX and FAILED_PREFIX into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21380
diff
changeset
|
2192 if line.startswith(TTest.SKIPPED_PREFIX): |
21379
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2193 line = line.splitlines()[0] |
44487
69ae64637be5
tests: use native string type for parsed hghave log lines
Manuel Jacob <me@manueljacob.de>
parents:
44486
diff
changeset
|
2194 missing.append(_bytes2sys(line[len(TTest.SKIPPED_PREFIX) :])) |
21381
9aa5784992d4
run-tests: move SKIPPED_PREFIX and FAILED_PREFIX into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21380
diff
changeset
|
2195 elif line.startswith(TTest.FAILED_PREFIX): |
21379
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2196 line = line.splitlines()[0] |
44487
69ae64637be5
tests: use native string type for parsed hghave log lines
Manuel Jacob <me@manueljacob.de>
parents:
44486
diff
changeset
|
2197 failed.append(_bytes2sys(line[len(TTest.FAILED_PREFIX) :])) |
21379
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2198 |
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2199 return missing, failed |
ab1a95270a50
run-tests: move parsehghaveoutput() into TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21378
diff
changeset
|
2200 |
21384
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2201 @staticmethod |
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2202 def _escapef(m): |
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2203 return TTest.ESCAPEMAP[m.group(0)] |
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2204 |
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2205 @staticmethod |
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2206 def _stringescape(s): |
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2207 return TTest.ESCAPESUB(TTest._escapef, s) |
a36cc85a5b7b
run-tests: move string escaping to TTest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21383
diff
changeset
|
2208 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2209 |
22104
70bdf59d27b6
run-tests: attempt to fix iolock handling
Matt Mackall <mpm@selenic.com>
parents:
22045
diff
changeset
|
2210 iolock = threading.RLock() |
35011
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
2211 firstlock = threading.RLock() |
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
2212 firsterror = False |
14000
636a6f5aa2cd
run-tests: add locking on results struct
Matt Mackall <mpm@selenic.com>
parents:
13999
diff
changeset
|
2213 |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
2214 base_class = unittest.TextTestResult |
47898
3a95a4e660b9
python: compatibility for python 3.11 (issue6604)
Raphaël Gomès <rgomes@octobus.net>
parents:
47829
diff
changeset
|
2215 |
3a95a4e660b9
python: compatibility for python 3.11 (issue6604)
Raphaël Gomès <rgomes@octobus.net>
parents:
47829
diff
changeset
|
2216 |
3a95a4e660b9
python: compatibility for python 3.11 (issue6604)
Raphaël Gomès <rgomes@octobus.net>
parents:
47829
diff
changeset
|
2217 class TestResult(base_class): |
21429
203ed3cf6c81
run-tests: define custom result and runner classes for unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21428
diff
changeset
|
2218 """Holds results when executing via unittest.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2219 |
21460
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2220 def __init__(self, options, *args, **kwargs): |
21429
203ed3cf6c81
run-tests: define custom result and runner classes for unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21428
diff
changeset
|
2221 super(TestResult, self).__init__(*args, **kwargs) |
203ed3cf6c81
run-tests: define custom result and runner classes for unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21428
diff
changeset
|
2222 |
21460
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2223 self._options = options |
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2224 |
21430
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2225 # unittest.TestResult didn't have skipped until 2.7. We need to |
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2226 # polyfill it. |
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2227 self.skipped = [] |
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2228 |
21431
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2229 # We have a custom "ignored" result that isn't present in any Python |
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2230 # unittest implementation. It is very similar to skipped. It may make |
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2231 # sense to map it into skip some day. |
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2232 self.ignored = [] |
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2233 |
21495
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2234 self.times = [] |
27637
b502138f5faa
cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents:
27636
diff
changeset
|
2235 self._firststarttime = None |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2236 # Data stored for the benefit of generating xunit reports. |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2237 self.successes = [] |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2238 self.faildata = {} |
21495
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2239 |
33565
0982d900dccb
run-tests: pass color option via test case object , not global var
Martin von Zweigbergk <martinvonz@google.com>
parents:
33561
diff
changeset
|
2240 if options.color == 'auto': |
47320
af4d1a177548
run-tests: disable color in 'auto' mode on Windows if stdout is redirected
Matt Harbison <matt_harbison@yahoo.com>
parents:
47319
diff
changeset
|
2241 isatty = self.stream.isatty() |
af4d1a177548
run-tests: disable color in 'auto' mode on Windows if stdout is redirected
Matt Harbison <matt_harbison@yahoo.com>
parents:
47319
diff
changeset
|
2242 # For some reason, redirecting stdout on Windows disables the ANSI |
af4d1a177548
run-tests: disable color in 'auto' mode on Windows if stdout is redirected
Matt Harbison <matt_harbison@yahoo.com>
parents:
47319
diff
changeset
|
2243 # color processing of stderr, which is what is used to print the |
af4d1a177548
run-tests: disable color in 'auto' mode on Windows if stdout is redirected
Matt Harbison <matt_harbison@yahoo.com>
parents:
47319
diff
changeset
|
2244 # output. Therefore, both must be tty on Windows to enable color. |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
2245 if WINDOWS: |
47320
af4d1a177548
run-tests: disable color in 'auto' mode on Windows if stdout is redirected
Matt Harbison <matt_harbison@yahoo.com>
parents:
47319
diff
changeset
|
2246 isatty = isatty and sys.stdout.isatty() |
af4d1a177548
run-tests: disable color in 'auto' mode on Windows if stdout is redirected
Matt Harbison <matt_harbison@yahoo.com>
parents:
47319
diff
changeset
|
2247 self.color = pygmentspresent and isatty |
33565
0982d900dccb
run-tests: pass color option via test case object , not global var
Martin von Zweigbergk <martinvonz@google.com>
parents:
33561
diff
changeset
|
2248 elif options.color == 'never': |
0982d900dccb
run-tests: pass color option via test case object , not global var
Martin von Zweigbergk <martinvonz@google.com>
parents:
33561
diff
changeset
|
2249 self.color = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2250 else: # 'always', for testing purposes |
33565
0982d900dccb
run-tests: pass color option via test case object , not global var
Martin von Zweigbergk <martinvonz@google.com>
parents:
33561
diff
changeset
|
2251 self.color = pygmentspresent |
33561
2893face0af5
run-tests: check if stream is a tty before using color
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
33552
diff
changeset
|
2252 |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2253 def onStart(self, test): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
2254 """Can be overriden by custom TestResult""" |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2255 |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2256 def onEnd(self): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
2257 """Can be overriden by custom TestResult""" |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2258 |
21462
8a4ef661f08d
run-tests: make failure reporting in unittest mode equivalent to default
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21461
diff
changeset
|
2259 def addFailure(self, test, reason): |
8a4ef661f08d
run-tests: make failure reporting in unittest mode equivalent to default
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21461
diff
changeset
|
2260 self.failures.append((test, reason)) |
21460
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2261 |
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2262 if self._options.first: |
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2263 self.stop() |
21735
5ee547fdb0be
run-tests: produce error on running a failing test
anuraggoel <anurag.dsps@gmail.com>
parents:
21733
diff
changeset
|
2264 else: |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2265 with iolock: |
27393
a40b623e6380
run-tests: report timeouts in a less alarming fashion
Matt Mackall <mpm@selenic.com>
parents:
27141
diff
changeset
|
2266 if reason == "timed out": |
a40b623e6380
run-tests: report timeouts in a less alarming fashion
Matt Mackall <mpm@selenic.com>
parents:
27141
diff
changeset
|
2267 self.stream.write('t') |
a40b623e6380
run-tests: report timeouts in a less alarming fashion
Matt Mackall <mpm@selenic.com>
parents:
27141
diff
changeset
|
2268 else: |
a40b623e6380
run-tests: report timeouts in a less alarming fashion
Matt Mackall <mpm@selenic.com>
parents:
27141
diff
changeset
|
2269 if not self._options.nodiff: |
34842
8bce3e51b101
run-tests: move newline out of colorized message
Martin von Zweigbergk <martinvonz@google.com>
parents:
34804
diff
changeset
|
2270 self.stream.write('\n') |
8bce3e51b101
run-tests: move newline out of colorized message
Martin von Zweigbergk <martinvonz@google.com>
parents:
34804
diff
changeset
|
2271 # Exclude the '\n' from highlighting to lex correctly |
8bce3e51b101
run-tests: move newline out of colorized message
Martin von Zweigbergk <martinvonz@google.com>
parents:
34804
diff
changeset
|
2272 formatted = 'ERROR: %s output changed\n' % test |
33948
f5d4bb8e944d
run-tests: factor out highlight functions
Yuya Nishihara <yuya@tcha.org>
parents:
33947
diff
changeset
|
2273 self.stream.write(highlightmsg(formatted, self.color)) |
27393
a40b623e6380
run-tests: report timeouts in a less alarming fashion
Matt Mackall <mpm@selenic.com>
parents:
27141
diff
changeset
|
2274 self.stream.write('!') |
21754
7e14d026c4c4
run-tests: fixes the '--interactive' option error
anuraggoel <anurag.dsps@gmail.com>
parents:
21753
diff
changeset
|
2275 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2276 self.stream.flush() |
21460
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2277 |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2278 def addSuccess(self, test): |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2279 with iolock: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2280 super(TestResult, self).addSuccess(test) |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2281 self.successes.append(test) |
21460
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2282 |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2283 def addError(self, test, err): |
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2284 super(TestResult, self).addError(test, err) |
21460
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2285 if self._options.first: |
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2286 self.stop() |
df580990507e
run-tests: abort tests after first failure in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21459
diff
changeset
|
2287 |
21430
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2288 # Polyfill. |
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2289 def addSkip(self, test, reason): |
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2290 self.skipped.append((test, reason)) |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2291 with iolock: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2292 if self.showAll: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2293 self.stream.writeln('skipped %s' % reason) |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2294 else: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2295 self.stream.write('s') |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2296 self.stream.flush() |
21430
cf2992656bf8
run-tests: teach unittest about skipped tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21429
diff
changeset
|
2297 |
21431
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2298 def addIgnore(self, test, reason): |
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2299 self.ignored.append((test, reason)) |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2300 with iolock: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2301 if self.showAll: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2302 self.stream.writeln('ignored %s' % reason) |
21997
93c3b3f55d59
run-tests: fix test result counts with --keyword specified or skips occurring
Augie Fackler <raf@durin42.com>
parents:
21993
diff
changeset
|
2303 else: |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2304 if reason not in ('not retesting', "doesn't match keyword"): |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2305 self.stream.write('i') |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2306 else: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2307 self.testsRun += 1 |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2308 self.stream.flush() |
21431
0f12bc8aed80
run-tests: teach unittest about ignored tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21430
diff
changeset
|
2309 |
21523
9fb6f328576a
run-tests: move interactive test acceptance into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21522
diff
changeset
|
2310 def addOutputMismatch(self, test, ret, got, expected): |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
2311 """Record a mismatch in test output for a particular test.""" |
35011
87676e8ee056
test-run-tests: stabilize the test (issue5735)
Jun Wu <quark@fb.com>
parents:
35010
diff
changeset
|
2312 if self.shouldStop or firsterror: |
22838
9a20f53e436f
run-tests: handle --jobs and --first gracefully
Augie Fackler <raf@durin42.com>
parents:
22486
diff
changeset
|
2313 # don't print, some other test case already failed and |
9a20f53e436f
run-tests: handle --jobs and --first gracefully
Augie Fackler <raf@durin42.com>
parents:
22486
diff
changeset
|
2314 # printed, we're just stale and probably failed due to our |
9a20f53e436f
run-tests: handle --jobs and --first gracefully
Augie Fackler <raf@durin42.com>
parents:
22486
diff
changeset
|
2315 # temp dir getting cleaned up. |
9a20f53e436f
run-tests: handle --jobs and --first gracefully
Augie Fackler <raf@durin42.com>
parents:
22486
diff
changeset
|
2316 return |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
2317 |
21763
84cd5ee787ed
run-tests: hold iolock across diff/prompt when interactive
Matt Mackall <mpm@selenic.com>
parents:
21754
diff
changeset
|
2318 accepted = False |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2319 lines = [] |
21763
84cd5ee787ed
run-tests: hold iolock across diff/prompt when interactive
Matt Mackall <mpm@selenic.com>
parents:
21754
diff
changeset
|
2320 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2321 with iolock: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2322 if self._options.nodiff: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2323 pass |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2324 elif self._options.view: |
25056
e5f6c6ec21b8
run-tests: be more paranoid about os.system using bytes
Augie Fackler <augie@google.com>
parents:
25055
diff
changeset
|
2325 v = self._options.view |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2326 subprocess.call( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2327 r'"%s" "%s" "%s"' |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
2328 % (v, _bytes2sys(test.refpath), _bytes2sys(test.errpath)), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2329 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2330 ) |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
2331 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2332 servefail, lines = getdiff( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2333 expected, got, test.refpath, test.errpath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2334 ) |
36468
93228b2a1fc0
run-tests: don't mask errors when a server fails to start
Matt Harbison <matt_harbison@yahoo.com>
parents:
36075
diff
changeset
|
2335 self.stream.write('\n') |
93228b2a1fc0
run-tests: don't mask errors when a server fails to start
Matt Harbison <matt_harbison@yahoo.com>
parents:
36075
diff
changeset
|
2336 for line in lines: |
93228b2a1fc0
run-tests: don't mask errors when a server fails to start
Matt Harbison <matt_harbison@yahoo.com>
parents:
36075
diff
changeset
|
2337 line = highlightdiff(line, self.color) |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
2338 self.stream.flush() |
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
2339 self.stream.buffer.write(line) |
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
2340 self.stream.buffer.flush() |
21521
855f092c96e5
run-tests: move diff generation into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21520
diff
changeset
|
2341 |
36491
51a9f0246931
run-tests: resume raising an exception when a server fails to start
Matt Harbison <matt_harbison@yahoo.com>
parents:
36468
diff
changeset
|
2342 if servefail: |
51a9f0246931
run-tests: resume raising an exception when a server fails to start
Matt Harbison <matt_harbison@yahoo.com>
parents:
36468
diff
changeset
|
2343 raise test.failureException( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2344 'server failed to start (HGPORT=%s)' % test._startport |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2345 ) |
36491
51a9f0246931
run-tests: resume raising an exception when a server fails to start
Matt Harbison <matt_harbison@yahoo.com>
parents:
36468
diff
changeset
|
2346 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2347 # handle interactive prompt without releasing iolock |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2348 if self._options.interactive: |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2349 if test.readrefout() != expected: |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2350 self.stream.write( |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2351 'Reference output has changed (run again to prompt ' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2352 'changes)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2353 ) |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2354 else: |
44985
617cd3b1e9cd
tests: make it clear what happen when no response entered
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
44636
diff
changeset
|
2355 self.stream.write('Accept this change? [y/N] ') |
39914
0f8ff3ff5d5c
run-tests: flush output stream before prompting to accept changes
Matt Harbison <matt_harbison@yahoo.com>
parents:
39758
diff
changeset
|
2356 self.stream.flush() |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2357 answer = sys.stdin.readline().strip() |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2358 if answer.lower() in ('y', 'yes'): |
33000
573baab2a797
run-tests: fix -i when "#testcases" is used in .t test
Jun Wu <quark@fb.com>
parents:
32999
diff
changeset
|
2359 if test.path.endswith(b'.t'): |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2360 rename(test.errpath, test.path) |
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2361 else: |
46456
7bb31c367847
run-test: avoid byte issue when replacing output file of python test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46327
diff
changeset
|
2362 rename(test.errpath, b'%s.out' % test.path) |
32998
8dc62c97a665
run-tests: do not prompt changes (-i) if a race condition is detected
Jun Wu <quark@fb.com>
parents:
32961
diff
changeset
|
2363 accepted = True |
28127
807bc140e915
run-tests: remove useless "failed" flag from addOutputMismatch()
Yuya Nishihara <yuya@tcha.org>
parents:
28126
diff
changeset
|
2364 if not accepted: |
25052
c4217a046b62
run-tests: record faildata using bytes instead of str
Augie Fackler <augie@google.com>
parents:
25051
diff
changeset
|
2365 self.faildata[test.name] = b''.join(lines) |
21763
84cd5ee787ed
run-tests: hold iolock across diff/prompt when interactive
Matt Mackall <mpm@selenic.com>
parents:
21754
diff
changeset
|
2366 |
84cd5ee787ed
run-tests: hold iolock across diff/prompt when interactive
Matt Mackall <mpm@selenic.com>
parents:
21754
diff
changeset
|
2367 return accepted |
21523
9fb6f328576a
run-tests: move interactive test acceptance into TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21522
diff
changeset
|
2368 |
21495
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2369 def startTest(self, test): |
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2370 super(TestResult, self).startTest(test) |
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2371 |
21977
4ca4e1572022
run-tests: '--time' option provide more details to Linux users
anuraggoel <anurag.dsps@gmail.com>
parents:
21919
diff
changeset
|
2372 # os.times module computes the user time and system time spent by |
4ca4e1572022
run-tests: '--time' option provide more details to Linux users
anuraggoel <anurag.dsps@gmail.com>
parents:
21919
diff
changeset
|
2373 # child's processes along with real elapsed time taken by a process. |
4ca4e1572022
run-tests: '--time' option provide more details to Linux users
anuraggoel <anurag.dsps@gmail.com>
parents:
21919
diff
changeset
|
2374 # This module has one limitation. It can only work for Linux user |
43639
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2375 # and not for Windows. Hence why we fall back to another function |
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2376 # for wall time calculations. |
43638
ae91e4e4c9b0
tests: rename stopped and started variables to reflect times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43408
diff
changeset
|
2377 test.started_times = os.times() |
43639
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2378 # TODO use a monotonic clock once support for Python 2.7 is dropped. |
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2379 test.started_time = time.time() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2380 if self._firststarttime is None: # thread racy but irrelevant |
43639
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2381 self._firststarttime = test.started_time |
21495
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2382 |
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2383 def stopTest(self, test, interrupted=False): |
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2384 super(TestResult, self).stopTest(test) |
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2385 |
43638
ae91e4e4c9b0
tests: rename stopped and started variables to reflect times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43408
diff
changeset
|
2386 test.stopped_times = os.times() |
43639
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2387 stopped_time = time.time() |
43638
ae91e4e4c9b0
tests: rename stopped and started variables to reflect times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43408
diff
changeset
|
2388 |
ae91e4e4c9b0
tests: rename stopped and started variables to reflect times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43408
diff
changeset
|
2389 starttime = test.started_times |
ae91e4e4c9b0
tests: rename stopped and started variables to reflect times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43408
diff
changeset
|
2390 endtime = test.stopped_times |
25097
a4fce7905721
run-tests: track start and end time of tests
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25068
diff
changeset
|
2391 origin = self._firststarttime |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2392 self.times.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2393 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2394 test.name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2395 endtime[2] - starttime[2], # user space CPU time |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2396 endtime[3] - starttime[3], # sys space CPU time |
43639
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2397 stopped_time - test.started_time, # real time |
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2398 test.started_time - origin, # start date in run context |
ac140b85aae9
tests: use time.time() for relative start and stop times
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43638
diff
changeset
|
2399 stopped_time - origin, # end date in run context |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2400 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2401 ) |
21977
4ca4e1572022
run-tests: '--time' option provide more details to Linux users
anuraggoel <anurag.dsps@gmail.com>
parents:
21919
diff
changeset
|
2402 |
21495
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2403 if interrupted: |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2404 with iolock: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2405 self.stream.writeln( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2406 'INTERRUPTED: %s (after %d seconds)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2407 % (test.name, self.times[-1][3]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2408 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2409 |
21495
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2410 |
38616
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2411 def getTestResult(): |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2412 """ |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2413 Returns the relevant test result |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2414 """ |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2415 if "CUSTOM_TEST_RESULT" in os.environ: |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2416 testresultmodule = __import__(os.environ["CUSTOM_TEST_RESULT"]) |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2417 return testresultmodule.TestResult |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2418 else: |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2419 return TestResult |
c44ae5997869
run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
38555
diff
changeset
|
2420 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2421 |
21439
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2422 class TestSuite(unittest.TestSuite): |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23077
diff
changeset
|
2423 """Custom unittest TestSuite that knows how to execute Mercurial tests.""" |
21528
32b9bbca2052
run-tests: pass jobs into TestSuite constructor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21523
diff
changeset
|
2424 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2425 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2426 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2427 testdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2428 jobs=1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2429 whitelist=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2430 blacklist=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2431 keywords=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2432 loop=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2433 runs_per_test=1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2434 loadtest=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2435 showchannels=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2436 *args, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2437 **kwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2438 ): |
21528
32b9bbca2052
run-tests: pass jobs into TestSuite constructor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21523
diff
changeset
|
2439 """Create a new instance that can run tests with a configuration. |
21439
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2440 |
21533
aecac8059c00
run-tests: make testdir an argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21532
diff
changeset
|
2441 testdir specifies the directory where tests are executed from. This |
aecac8059c00
run-tests: make testdir an argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21532
diff
changeset
|
2442 is typically the ``tests`` directory from Mercurial's source |
aecac8059c00
run-tests: make testdir an argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21532
diff
changeset
|
2443 repository. |
aecac8059c00
run-tests: make testdir an argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21532
diff
changeset
|
2444 |
21528
32b9bbca2052
run-tests: pass jobs into TestSuite constructor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21523
diff
changeset
|
2445 jobs specifies the number of jobs to run concurrently. Each test |
32b9bbca2052
run-tests: pass jobs into TestSuite constructor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21523
diff
changeset
|
2446 executes on its own thread. Tests actually spawn new processes, so |
32b9bbca2052
run-tests: pass jobs into TestSuite constructor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21523
diff
changeset
|
2447 state mutation should not be an issue. |
21529
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2448 |
27880
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2449 If there is only one job, it will use the main thread. |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2450 |
21529
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2451 whitelist and blacklist denote tests that have been whitelisted and |
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2452 blacklisted, respectively. These arguments don't belong in TestSuite. |
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2453 Instead, whitelist and blacklist should be handled by the thing that |
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2454 populates the TestSuite with tests. They are present to preserve |
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2455 backwards compatible behavior which reports skipped tests as part |
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2456 of the results. |
21530
78289625e986
run-tests: make retest a named argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21529
diff
changeset
|
2457 |
21531
7fcda22acc43
run-tests: make keywords a named argument to TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21530
diff
changeset
|
2458 keywords denotes key words that will be used to filter which tests |
7fcda22acc43
run-tests: make keywords a named argument to TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21530
diff
changeset
|
2459 to execute. This arguably belongs outside of TestSuite. |
21532
9d2ba7e2324d
run-tests: move loop to a named argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21531
diff
changeset
|
2460 |
9d2ba7e2324d
run-tests: move loop to a named argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21531
diff
changeset
|
2461 loop denotes whether to loop over tests forever. |
21528
32b9bbca2052
run-tests: pass jobs into TestSuite constructor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21523
diff
changeset
|
2462 """ |
21439
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2463 super(TestSuite, self).__init__(*args, **kwargs) |
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2464 |
21528
32b9bbca2052
run-tests: pass jobs into TestSuite constructor
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21523
diff
changeset
|
2465 self._jobs = jobs |
21529
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2466 self._whitelist = whitelist |
117e027390ab
run-tests: move whitelist and blacklist to named arguments of TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21528
diff
changeset
|
2467 self._blacklist = blacklist |
21531
7fcda22acc43
run-tests: make keywords a named argument to TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21530
diff
changeset
|
2468 self._keywords = keywords |
21532
9d2ba7e2324d
run-tests: move loop to a named argument of TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21531
diff
changeset
|
2469 self._loop = loop |
24329
e7ca4d4b10e1
run-tests: add --runs-per-test flag
Augie Fackler <augie@google.com>
parents:
24306
diff
changeset
|
2470 self._runs_per_test = runs_per_test |
24330
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
2471 self._loadtest = loadtest |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2472 self._showchannels = showchannels |
21439
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2473 |
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2474 def run(self, result): |
21507
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2475 # We have a number of filters that need to be applied. We do this |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2476 # here instead of inside Test because it makes the running logic for |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2477 # Test simpler. |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2478 tests = [] |
24330
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
2479 num_tests = [0] |
21507
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2480 for test in self._tests: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2481 |
24330
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
2482 def get(): |
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
2483 num_tests[0] += 1 |
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
2484 if getattr(test, 'should_reload', False): |
32350
b96be0098624
run-tests: change test identity from a path to a dict
Jun Wu <quark@fb.com>
parents:
32343
diff
changeset
|
2485 return self._loadtest(test, num_tests[0]) |
24330
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
2486 return test |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2487 |
21507
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2488 if not os.path.exists(test.path): |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2489 result.addSkip(test, "Doesn't exist") |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2490 continue |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2491 |
45521
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2492 is_whitelisted = self._whitelist and ( |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2493 test.relpath in self._whitelist or test.bname in self._whitelist |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2494 ) |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2495 if not is_whitelisted: |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2496 is_blacklisted = self._blacklist and ( |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2497 test.relpath in self._blacklist |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2498 or test.bname in self._blacklist |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2499 ) |
22140fd783d2
run-test: allow relative path in `--blacklist` and `--whitelist` (issue6351)
Antoine cezar<acezar@chwitlabs.fr>
parents:
45453
diff
changeset
|
2500 if is_blacklisted: |
21507
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2501 result.addSkip(test, 'blacklisted') |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2502 continue |
21531
7fcda22acc43
run-tests: make keywords a named argument to TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21530
diff
changeset
|
2503 if self._keywords: |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
2504 with open(test.path, 'rb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
2505 t = f.read().lower() + test.bname.lower() |
21507
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2506 ignored = False |
21531
7fcda22acc43
run-tests: make keywords a named argument to TestSuite.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21530
diff
changeset
|
2507 for k in self._keywords.lower().split(): |
21507
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2508 if k not in t: |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2509 result.addIgnore(test, "doesn't match keyword") |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2510 ignored = True |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2511 break |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2512 |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2513 if ignored: |
d839e4820da7
run-tests: move test filtering into TestSuite.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21506
diff
changeset
|
2514 continue |
24329
e7ca4d4b10e1
run-tests: add --runs-per-test flag
Augie Fackler <augie@google.com>
parents:
24306
diff
changeset
|
2515 for _ in xrange(self._runs_per_test): |
24330
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
2516 tests.append(get()) |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2517 |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
2518 runtests = list(tests) |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2519 done = queue.Queue() |
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2520 running = 0 |
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2521 |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2522 channels = [""] * self._jobs |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2523 |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2524 def job(test, result): |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2525 for n, v in enumerate(channels): |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2526 if not v: |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2527 channel = n |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2528 break |
32644
c59451e11cbf
tests: make run-tests fail early if no channel is found
Augie Fackler <augie@google.com>
parents:
32452
diff
changeset
|
2529 else: |
c59451e11cbf
tests: make run-tests fail early if no channel is found
Augie Fackler <augie@google.com>
parents:
32452
diff
changeset
|
2530 raise ValueError('Could not find output channel') |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2531 channels[channel] = "=" + test.name[5:].split(".")[0] |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2532 try: |
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2533 test(result) |
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2534 done.put(None) |
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2535 except KeyboardInterrupt: |
27933
a6833e464b07
run-tests: "fix" race condition in race condition fix
Bryan O'Sullivan <bryano@fb.com>
parents:
27927
diff
changeset
|
2536 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2537 except: # re-raises |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2538 done.put(('!', test, 'run-test raised an error, see traceback')) |
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2539 raise |
32645
931bb962e0eb
tests: fix run-tests when there's a bad #if in a test
Augie Fackler <augie@google.com>
parents:
32644
diff
changeset
|
2540 finally: |
931bb962e0eb
tests: fix run-tests when there's a bad #if in a test
Augie Fackler <augie@google.com>
parents:
32644
diff
changeset
|
2541 try: |
931bb962e0eb
tests: fix run-tests when there's a bad #if in a test
Augie Fackler <augie@google.com>
parents:
32644
diff
changeset
|
2542 channels[channel] = '' |
931bb962e0eb
tests: fix run-tests when there's a bad #if in a test
Augie Fackler <augie@google.com>
parents:
32644
diff
changeset
|
2543 except IndexError: |
931bb962e0eb
tests: fix run-tests when there's a bad #if in a test
Augie Fackler <augie@google.com>
parents:
32644
diff
changeset
|
2544 pass |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2545 |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2546 def stat(): |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2547 count = 0 |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2548 while channels: |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2549 d = '\n%03s ' % count |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2550 for n, v in enumerate(channels): |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2551 if v: |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2552 d += v[0] |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2553 channels[n] = v[1:] or '.' |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2554 else: |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2555 d += ' ' |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2556 d += ' ' |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2557 with iolock: |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2558 sys.stdout.write(d + ' ') |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2559 sys.stdout.flush() |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2560 for x in xrange(10): |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2561 if channels: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2562 time.sleep(0.1) |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2563 count += 1 |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2564 |
24507
a0668a587c04
run-tests: wait for test threads after first error
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24506
diff
changeset
|
2565 stoppedearly = False |
a0668a587c04
run-tests: wait for test threads after first error
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24506
diff
changeset
|
2566 |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2567 if self._showchannels: |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2568 statthread = threading.Thread(target=stat, name="stat") |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2569 statthread.start() |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2570 |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2571 try: |
27880
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2572 while tests or running: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2573 if not done.empty() or running == self._jobs or not tests: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2574 try: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2575 done.get(True, 1) |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2576 running -= 1 |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2577 if result and result.shouldStop: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2578 stoppedearly = True |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2579 break |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2580 except queue.Empty: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2581 continue |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2582 if tests and not running == self._jobs: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2583 test = tests.pop(0) |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2584 if self._loop: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2585 if getattr(test, 'should_reload', False): |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2586 num_tests[0] += 1 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2587 tests.append(self._loadtest(test, num_tests[0])) |
27880
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2588 else: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2589 tests.append(test) |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2590 if self._jobs == 1: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2591 job(test, result) |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2592 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2593 t = threading.Thread( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2594 target=job, name=test.name, args=(test, result) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2595 ) |
27689
50e621fe0362
run-tests: skip threading for a single test
timeless <timeless@mozdev.org>
parents:
27686
diff
changeset
|
2596 t.start() |
27880
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2597 running += 1 |
24507
a0668a587c04
run-tests: wait for test threads after first error
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24506
diff
changeset
|
2598 |
27880
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2599 # If we stop early we still need to wait on started tests to |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2600 # finish. Otherwise, there is a race between the test completing |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2601 # and the test's cleanup code running. This could result in the |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2602 # test reporting incorrect. |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2603 if stoppedearly: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2604 while running: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2605 try: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2606 done.get(True, 1) |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2607 running -= 1 |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2608 except queue.Empty: |
b04df9ce1fb0
run-tests: skip threading for a single test (issue5040)
timeless <timeless@mozdev.org>
parents:
27777
diff
changeset
|
2609 continue |
21496
f145914e698d
run-tests: move _executetests into TestSuite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21495
diff
changeset
|
2610 except KeyboardInterrupt: |
21520
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
2611 for test in runtests: |
fa6ba4372678
run-tests: remove global abort flag
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21518
diff
changeset
|
2612 test.abort() |
21439
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2613 |
27396
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2614 channels = [] |
64c584070fc7
run-tests: show scheduling with --showchannels
Matt Mackall <mpm@selenic.com>
parents:
27394
diff
changeset
|
2615 |
21439
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2616 return result |
2e22954b97e3
run-tests: define a custom TestSuite that uses _executetests()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21438
diff
changeset
|
2617 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2618 |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2619 # Save the most recent 5 wall-clock runtimes of each test to a |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2620 # human-readable text file named .testtimes. Tests are sorted |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2621 # alphabetically, while times for each test are listed from oldest to |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2622 # newest. |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2623 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2624 |
32737
e5680cb1414f
run-tests: write test times to output dir
Siddharth Agarwal <sid0@fb.com>
parents:
32736
diff
changeset
|
2625 def loadtimes(outputdir): |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2626 times = [] |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2627 try: |
35895
69d7fcd91696
testrunner: fix updating of .testtimes file
Martin von Zweigbergk <martinvonz@google.com>
parents:
35894
diff
changeset
|
2628 with open(os.path.join(outputdir, b'.testtimes')) as fp: |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2629 for line in fp: |
35894
568917059243
testrunner: make reading of test times work with #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
35888
diff
changeset
|
2630 m = re.match('(.*?) ([0-9. ]+)', line) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2631 times.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2632 (m.group(1), [float(t) for t in m.group(2).split()]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2633 ) |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2634 except IOError as err: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2635 if err.errno != errno.ENOENT: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2636 raise |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2637 return times |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2638 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2639 |
32737
e5680cb1414f
run-tests: write test times to output dir
Siddharth Agarwal <sid0@fb.com>
parents:
32736
diff
changeset
|
2640 def savetimes(outputdir, result): |
e5680cb1414f
run-tests: write test times to output dir
Siddharth Agarwal <sid0@fb.com>
parents:
32736
diff
changeset
|
2641 saved = dict(loadtimes(outputdir)) |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2642 maxruns = 5 |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44469
diff
changeset
|
2643 skipped = {str(t[0]) for t in result.skipped} |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2644 for tdata in result.times: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2645 test, real = tdata[0], tdata[3] |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2646 if test not in skipped: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2647 ts = saved.setdefault(test, []) |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2648 ts.append(real) |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2649 ts[:] = ts[-maxruns:] |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2650 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2651 fd, tmpname = tempfile.mkstemp( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2652 prefix=b'.testtimes', dir=outputdir, text=True |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2653 ) |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2654 with os.fdopen(fd, 'w') as fp: |
28284
0fe00bdb2f4f
run-tests: fix Python 3 incompatibilities
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28180
diff
changeset
|
2655 for name, ts in sorted(saved.items()): |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2656 fp.write('%s %s\n' % (name, ' '.join(['%.3f' % (t,) for t in ts]))) |
32737
e5680cb1414f
run-tests: write test times to output dir
Siddharth Agarwal <sid0@fb.com>
parents:
32736
diff
changeset
|
2657 timepath = os.path.join(outputdir, b'.testtimes') |
27634
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2658 try: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2659 os.unlink(timepath) |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2660 except OSError: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2661 pass |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2662 try: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2663 os.rename(tmpname, timepath) |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2664 except OSError: |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2665 pass |
a1eff44c432b
tests: write recent run times to a file named tests/.testtimes
Bryan O'Sullivan <bos@serpentine.com>
parents:
27602
diff
changeset
|
2666 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2667 |
21429
203ed3cf6c81
run-tests: define custom result and runner classes for unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21428
diff
changeset
|
2668 class TextTestRunner(unittest.TextTestRunner): |
203ed3cf6c81
run-tests: define custom result and runner classes for unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21428
diff
changeset
|
2669 """Custom unittest test runner that uses appropriate settings.""" |
203ed3cf6c81
run-tests: define custom result and runner classes for unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21428
diff
changeset
|
2670 |
21459
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2671 def __init__(self, runner, *args, **kwargs): |
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2672 super(TextTestRunner, self).__init__(*args, **kwargs) |
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2673 |
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2674 self._runner = runner |
38620
875e033fbbdd
run-tests: fix test result verbosity
Boris Feld <boris.feld@octobus.net>
parents:
38617
diff
changeset
|
2675 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2676 self._result = getTestResult()( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2677 self._runner.options, self.stream, self.descriptions, self.verbosity |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2678 ) |
21459
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2679 |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2680 def listtests(self, test): |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2681 test = sorted(test, key=lambda t: t.name) |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2682 |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2683 self._result.onStart(test) |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2684 |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2685 for t in test: |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2686 print(t.name) |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2687 self._result.addSuccess(t) |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2688 |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2689 if self._runner.options.xunit: |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2690 with open(self._runner.options.xunit, "wb") as xuf: |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2691 self._writexunit(self._result, xuf) |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2692 |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2693 if self._runner.options.json: |
32738
232875623c27
run-tests: write JSON reports to output dir
Siddharth Agarwal <sid0@fb.com>
parents:
32737
diff
changeset
|
2694 jsonpath = os.path.join(self._runner._outputdir, b'report.json') |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2695 with open(jsonpath, 'w') as fp: |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2696 self._writejson(self._result, fp) |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2697 |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2698 return self._result |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
2699 |
21459
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2700 def run(self, test): |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2701 self._result.onStart(test) |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2702 test(self._result) |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2703 |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2704 failed = len(self._result.failures) |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2705 skipped = len(self._result.skipped) |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2706 ignored = len(self._result.ignored) |
21459
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2707 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2708 with iolock: |
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2709 self.stream.writeln('') |
21459
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2710 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2711 if not self._runner.options.noskips: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2712 for test, msg in sorted( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2713 self._result.skipped, key=lambda s: s[0].name |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2714 ): |
33947
5d2ce90c71f1
run-tests: include "\n" in formatted message instead of calling writeln()
Yuya Nishihara <yuya@tcha.org>
parents:
33890
diff
changeset
|
2715 formatted = 'Skipped %s: %s\n' % (test.name, msg) |
38622
fa6edc6a02a9
run-tests: fix a too long line
Boris Feld <boris.feld@octobus.net>
parents:
38620
diff
changeset
|
2716 msg = highlightmsg(formatted, self._result.color) |
fa6edc6a02a9
run-tests: fix a too long line
Boris Feld <boris.feld@octobus.net>
parents:
38620
diff
changeset
|
2717 self.stream.write(msg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2718 for test, msg in sorted( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2719 self._result.failures, key=lambda f: f[0].name |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2720 ): |
33947
5d2ce90c71f1
run-tests: include "\n" in formatted message instead of calling writeln()
Yuya Nishihara <yuya@tcha.org>
parents:
33890
diff
changeset
|
2721 formatted = 'Failed %s: %s\n' % (test.name, msg) |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2722 self.stream.write(highlightmsg(formatted, self._result.color)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2723 for test, msg in sorted( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2724 self._result.errors, key=lambda e: e[0].name |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2725 ): |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2726 self.stream.writeln('Errored %s: %s' % (test.name, msg)) |
21459
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2727 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2728 if self._runner.options.xunit: |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2729 with open(self._runner.options.xunit, "wb") as xuf: |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2730 self._writexunit(self._result, xuf) |
22044
a06172e85fd4
run-tests: add support for xunit test reports
Augie Fackler <raf@durin42.com>
parents:
21997
diff
changeset
|
2731 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2732 if self._runner.options.json: |
32738
232875623c27
run-tests: write JSON reports to output dir
Siddharth Agarwal <sid0@fb.com>
parents:
32737
diff
changeset
|
2733 jsonpath = os.path.join(self._runner._outputdir, b'report.json') |
27773
bf45edfa9d90
run-tests: use a context manager for file I/O
Bryan O'Sullivan <bryano@fb.com>
parents:
27689
diff
changeset
|
2734 with open(jsonpath, 'w') as fp: |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2735 self._writejson(self._result, fp) |
22391
c42e69268f5b
run-tests: added '--json' functionality to store test result in json file
anuraggoel <anurag.dsps@gmail.com>
parents:
22361
diff
changeset
|
2736 |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2737 self._runner._checkhglib('Tested') |
21459
d5945324b130
run-tests: print compatible output from TextTestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21458
diff
changeset
|
2738 |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2739 savetimes(self._runner._outputdir, self._result) |
28596
9949950664cd
run-tests: add support for automatically bisecting test failures
Augie Fackler <augie@google.com>
parents:
28582
diff
changeset
|
2740 |
9949950664cd
run-tests: add support for automatically bisecting test failures
Augie Fackler <augie@google.com>
parents:
28582
diff
changeset
|
2741 if failed and self._runner.options.known_good_rev: |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2742 self._bisecttests(t for t, m in self._result.failures) |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2743 self.stream.writeln( |
32960
5af78c524f34
tests: remove support for warned tests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32952
diff
changeset
|
2744 '# Ran %d tests, %d skipped, %d failed.' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2745 % (self._result.testsRun, skipped + ignored, failed) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2746 ) |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2747 if failed: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2748 self.stream.writeln( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2749 'python hash seed: %s' % os.environ['PYTHONHASHSEED'] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2750 ) |
25046
40b4308d5653
run-tests: switch all uses of iolock.acquire() to a context manager
Augie Fackler <augie@google.com>
parents:
25045
diff
changeset
|
2751 if self._runner.options.time: |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2752 self.printtimes(self._result.times) |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
2753 |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
2754 if self._runner.options.exceptions: |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
2755 exceptions = aggregateexceptions( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2756 os.path.join(self._runner._outputdir, b'exceptions') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2757 ) |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
2758 |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
2759 self.stream.writeln('Exceptions Report:') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2760 self.stream.writeln( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2761 '%d total from %d frames' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2762 % (exceptions['total'], len(exceptions['exceptioncounts'])) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2763 ) |
36075
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
2764 combined = exceptions['combined'] |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
2765 for key in sorted(combined, key=combined.get, reverse=True): |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
2766 frame, line, exc = key |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
2767 totalcount, testcount, leastcount, leasttest = combined[key] |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
2768 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2769 self.stream.writeln( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2770 '%d (%d tests)\t%s: %s (%s - %d total)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2771 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2772 totalcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2773 testcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2774 frame, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2775 exc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2776 leasttest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2777 leastcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2778 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2779 ) |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
2780 |
32925
bd77ac2bd23a
run-tests: explicitly flush test runner output for Windows stability
Matt Harbison <matt_harbison@yahoo.com>
parents:
32871
diff
changeset
|
2781 self.stream.flush() |
22104
70bdf59d27b6
run-tests: attempt to fix iolock handling
Matt Mackall <mpm@selenic.com>
parents:
22045
diff
changeset
|
2782 |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
2783 return self._result |
21613
b3213b9fafed
run-tests: exit with non-0 exit code when tests fail or warn
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21539
diff
changeset
|
2784 |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2785 def _bisecttests(self, tests): |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2786 bisectcmd = ['hg', 'bisect'] |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2787 bisectrepo = self._runner.options.bisect_repo |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2788 if bisectrepo: |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2789 bisectcmd.extend(['-R', os.path.abspath(bisectrepo)]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2790 |
34803
d817bf1fc675
run-tests: extract Popen logic to a single method
Jun Wu <quark@fb.com>
parents:
34802
diff
changeset
|
2791 def pread(args): |
34804
149109c96904
run-tests: set HGPLAIN=1 when bisecting
Jun Wu <quark@fb.com>
parents:
34803
diff
changeset
|
2792 env = os.environ.copy() |
149109c96904
run-tests: set HGPLAIN=1 when bisecting
Jun Wu <quark@fb.com>
parents:
34803
diff
changeset
|
2793 env['HGPLAIN'] = '1' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2794 p = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2795 args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, env=env |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2796 ) |
34803
d817bf1fc675
run-tests: extract Popen logic to a single method
Jun Wu <quark@fb.com>
parents:
34802
diff
changeset
|
2797 data = p.stdout.read() |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2798 p.wait() |
34803
d817bf1fc675
run-tests: extract Popen logic to a single method
Jun Wu <quark@fb.com>
parents:
34802
diff
changeset
|
2799 return data |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2800 |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2801 for test in tests: |
34803
d817bf1fc675
run-tests: extract Popen logic to a single method
Jun Wu <quark@fb.com>
parents:
34802
diff
changeset
|
2802 pread(bisectcmd + ['--reset']), |
d817bf1fc675
run-tests: extract Popen logic to a single method
Jun Wu <quark@fb.com>
parents:
34802
diff
changeset
|
2803 pread(bisectcmd + ['--bad', '.']) |
d817bf1fc675
run-tests: extract Popen logic to a single method
Jun Wu <quark@fb.com>
parents:
34802
diff
changeset
|
2804 pread(bisectcmd + ['--good', self._runner.options.known_good_rev]) |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2805 # TODO: we probably need to forward more options |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2806 # that alter hg's behavior inside the tests. |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2807 opts = '' |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2808 withhg = self._runner.options.with_hg |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2809 if withhg: |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
2810 opts += ' --with-hg=%s ' % shellquote(_bytes2sys(withhg)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2811 rtc = '%s %s %s %s' % (sysexecutable, sys.argv[0], opts, test) |
34803
d817bf1fc675
run-tests: extract Popen logic to a single method
Jun Wu <quark@fb.com>
parents:
34802
diff
changeset
|
2812 data = pread(bisectcmd + ['--command', rtc]) |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2813 m = re.search( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2814 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2815 br'\nThe first (?P<goodbad>bad|good) revision ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2816 br'is:\nchangeset: +\d+:(?P<node>[a-f0-9]+)\n.*\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2817 br'summary: +(?P<summary>[^\n]+)\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2818 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2819 data, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2820 (re.MULTILINE | re.DOTALL), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2821 ) |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2822 if m is None: |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2823 self.stream.writeln( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2824 'Failed to identify failure point for %s' % test |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2825 ) |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2826 continue |
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2827 dat = m.groupdict() |
37741
700aaa19de63
tests: fix up a couple of minor bytes inconsistencies in run-tests.py
Augie Fackler <augie@google.com>
parents:
37342
diff
changeset
|
2828 verb = 'broken' if dat['goodbad'] == b'bad' else 'fixed' |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2829 self.stream.writeln( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2830 '%s %s by %s (%s)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2831 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2832 test, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2833 verb, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2834 dat['node'].decode('ascii'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2835 dat['summary'].decode('utf8', 'ignore'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2836 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2837 ) |
34802
9c7548eb7d1c
run-tests: move bisect logic to a separate method
Jun Wu <quark@fb.com>
parents:
34445
diff
changeset
|
2838 |
21495
b162bdc78bef
run-tests: capture execution times in TestResult
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21494
diff
changeset
|
2839 def printtimes(self, times): |
22104
70bdf59d27b6
run-tests: attempt to fix iolock handling
Matt Mackall <mpm@selenic.com>
parents:
22045
diff
changeset
|
2840 # iolock held by run |
21494
dcefc4091c86
run-tests: move outputtimes() into unittest runner class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21493
diff
changeset
|
2841 self.stream.writeln('# Producing time report') |
21977
4ca4e1572022
run-tests: '--time' option provide more details to Linux users
anuraggoel <anurag.dsps@gmail.com>
parents:
21919
diff
changeset
|
2842 times.sort(key=lambda t: (t[3])) |
25098
bf84ab53c2fd
run-tests: include 'start' and 'end' in --time output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25097
diff
changeset
|
2843 cols = '%7.3f %7.3f %7.3f %7.3f %7.3f %s' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2844 self.stream.writeln( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2845 '%-7s %-7s %-7s %-7s %-7s %s' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2846 % ('start', 'end', 'cuser', 'csys', 'real', 'Test') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2847 ) |
24982
5c15f7e0f52b
run-tests: stop explicit expansion of time data
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24981
diff
changeset
|
2848 for tdata in times: |
5c15f7e0f52b
run-tests: stop explicit expansion of time data
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24981
diff
changeset
|
2849 test = tdata[0] |
25098
bf84ab53c2fd
run-tests: include 'start' and 'end' in --time output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25097
diff
changeset
|
2850 cuser, csys, real, start, end = tdata[1:6] |
bf84ab53c2fd
run-tests: include 'start' and 'end' in --time output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25097
diff
changeset
|
2851 self.stream.writeln(cols % (start, end, cuser, csys, real, test)) |
21429
203ed3cf6c81
run-tests: define custom result and runner classes for unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21428
diff
changeset
|
2852 |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2853 @staticmethod |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2854 def _writexunit(result, outf): |
32734
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2855 # See http://llg.cubic.org/docs/junit/ for a reference. |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44469
diff
changeset
|
2856 timesd = {t[0]: t[3] for t in result.times} |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2857 doc = minidom.Document() |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2858 s = doc.createElement('testsuite') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2859 s.setAttribute('errors', "0") # TODO |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2860 s.setAttribute('failures', str(len(result.failures))) |
41560
20e62312e016
run-tests: set attributes in sorted order
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41554
diff
changeset
|
2861 s.setAttribute('name', 'run-tests') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2862 s.setAttribute( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2863 'skipped', str(len(result.skipped) + len(result.ignored)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2864 ) |
41560
20e62312e016
run-tests: set attributes in sorted order
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41554
diff
changeset
|
2865 s.setAttribute('tests', str(result.testsRun)) |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2866 doc.appendChild(s) |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2867 for tc in result.successes: |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2868 t = doc.createElement('testcase') |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2869 t.setAttribute('name', tc.name) |
32722
d0b9c36851f5
run-tests: make time field optional for xunit report
Siddharth Agarwal <sid0@fb.com>
parents:
32721
diff
changeset
|
2870 tctime = timesd.get(tc.name) |
d0b9c36851f5
run-tests: make time field optional for xunit report
Siddharth Agarwal <sid0@fb.com>
parents:
32721
diff
changeset
|
2871 if tctime is not None: |
d0b9c36851f5
run-tests: make time field optional for xunit report
Siddharth Agarwal <sid0@fb.com>
parents:
32721
diff
changeset
|
2872 t.setAttribute('time', '%.3f' % tctime) |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2873 s.appendChild(t) |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2874 for tc, err in sorted(result.faildata.items()): |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2875 t = doc.createElement('testcase') |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2876 t.setAttribute('name', tc) |
32722
d0b9c36851f5
run-tests: make time field optional for xunit report
Siddharth Agarwal <sid0@fb.com>
parents:
32721
diff
changeset
|
2877 tctime = timesd.get(tc) |
d0b9c36851f5
run-tests: make time field optional for xunit report
Siddharth Agarwal <sid0@fb.com>
parents:
32721
diff
changeset
|
2878 if tctime is not None: |
d0b9c36851f5
run-tests: make time field optional for xunit report
Siddharth Agarwal <sid0@fb.com>
parents:
32721
diff
changeset
|
2879 t.setAttribute('time', '%.3f' % tctime) |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2880 # createCDATASection expects a unicode or it will |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2881 # convert using default conversion rules, which will |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2882 # fail if string isn't ASCII. |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2883 err = cdatasafe(err).decode('utf-8', 'replace') |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2884 cd = doc.createCDATASection(err) |
32734
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2885 # Use 'failure' here instead of 'error' to match errors = 0, |
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2886 # failures = len(result.failures) in the testsuite element. |
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2887 failelem = doc.createElement('failure') |
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2888 failelem.setAttribute('message', 'output changed') |
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2889 failelem.setAttribute('type', 'output-mismatch') |
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2890 failelem.appendChild(cd) |
ef8d24539612
run-tests: wrap failures in an XUnit 'failure' element
Siddharth Agarwal <sid0@fb.com>
parents:
32731
diff
changeset
|
2891 t.appendChild(failelem) |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2892 s.appendChild(t) |
32735
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2893 for tc, message in result.skipped: |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2894 # According to the schema, 'skipped' has no attributes. So store |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2895 # the skip message as a text node instead. |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2896 t = doc.createElement('testcase') |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2897 t.setAttribute('name', tc.name) |
34276
20f547806a4d
tests: fix run-tests XML reporting on Python 3
Augie Fackler <augie@google.com>
parents:
34275
diff
changeset
|
2898 binmessage = message.encode('utf-8') |
20f547806a4d
tests: fix run-tests XML reporting on Python 3
Augie Fackler <augie@google.com>
parents:
34275
diff
changeset
|
2899 message = cdatasafe(binmessage).decode('utf-8', 'replace') |
32735
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2900 cd = doc.createCDATASection(message) |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2901 skipelem = doc.createElement('skipped') |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2902 skipelem.appendChild(cd) |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2903 t.appendChild(skipelem) |
a4d0e816a672
run-tests: add information about skipped tests to XUnit output
Siddharth Agarwal <sid0@fb.com>
parents:
32734
diff
changeset
|
2904 s.appendChild(t) |
32720
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2905 outf.write(doc.toprettyxml(indent=' ', encoding='utf-8')) |
3afe258fb0fe
run-tests: factor out xunit write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32645
diff
changeset
|
2906 |
32721
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2907 @staticmethod |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2908 def _writejson(result, outf): |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2909 timesd = {} |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2910 for tdata in result.times: |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2911 test = tdata[0] |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2912 timesd[test] = tdata[1:] |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2913 |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2914 outcome = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2915 groups = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2916 ('success', ((tc, None) for tc in result.successes)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2917 ('failure', result.failures), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2918 ('skip', result.skipped), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2919 ] |
32721
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2920 for res, testcases in groups: |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2921 for tc, __ in testcases: |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2922 if tc.name in timesd: |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2923 diff = result.faildata.get(tc.name, b'') |
32871
3139a7a1e7d4
tests: try and fail more gracefully with broken unicode escapes
Augie Fackler <augie@google.com>
parents:
32740
diff
changeset
|
2924 try: |
3139a7a1e7d4
tests: try and fail more gracefully with broken unicode escapes
Augie Fackler <augie@google.com>
parents:
32740
diff
changeset
|
2925 diff = diff.decode('unicode_escape') |
3139a7a1e7d4
tests: try and fail more gracefully with broken unicode escapes
Augie Fackler <augie@google.com>
parents:
32740
diff
changeset
|
2926 except UnicodeDecodeError as e: |
3139a7a1e7d4
tests: try and fail more gracefully with broken unicode escapes
Augie Fackler <augie@google.com>
parents:
32740
diff
changeset
|
2927 diff = '%r decoding diff, sorry' % e |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2928 tres = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2929 'result': res, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2930 'time': ('%0.3f' % timesd[tc.name][2]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2931 'cuser': ('%0.3f' % timesd[tc.name][0]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2932 'csys': ('%0.3f' % timesd[tc.name][1]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2933 'start': ('%0.3f' % timesd[tc.name][3]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2934 'end': ('%0.3f' % timesd[tc.name][4]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2935 'diff': diff, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2936 } |
32721
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2937 else: |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2938 # blacklisted test |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2939 tres = {'result': res} |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2940 |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2941 outcome[tc.name] = tres |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2942 jsonout = json.dumps( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2943 outcome, sort_keys=True, indent=4, separators=(',', ': ') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2944 ) |
32721
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2945 outf.writelines(("testreport =", jsonout)) |
60c921ff4104
run-tests: factor out json write code into another method
Siddharth Agarwal <sid0@fb.com>
parents:
32720
diff
changeset
|
2946 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2947 |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2948 def sorttests(testdescs, previoustimes, shuffle=False): |
35493
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
2949 """Do an in-place sort of tests.""" |
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
2950 if shuffle: |
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
2951 random.shuffle(testdescs) |
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
2952 return |
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
2953 |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2954 if previoustimes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2955 |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2956 def sortkey(f): |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2957 f = f['path'] |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2958 if f in previoustimes: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2959 # Use most recent time as estimate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2960 return -(previoustimes[f][-1]) |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2961 else: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2962 # Default to a rather arbitrary value of 1 second for new tests |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2963 return -1.0 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2964 |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2965 else: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2966 # keywords for slow tests |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2967 slow = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2968 b'svn': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2969 b'cvs': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2970 b'hghave': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2971 b'largefiles-update': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2972 b'run-tests': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2973 b'corruption': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2974 b'race': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2975 b'i18n': 10, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2976 b'check': 100, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2977 b'gendoc': 100, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2978 b'contrib-perf': 200, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2979 b'merge-combination': 100, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
2980 } |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2981 perf = {} |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2982 |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2983 def sortkey(f): |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2984 # run largest tests first, as they tend to take the longest |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2985 f = f['path'] |
35493
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
2986 try: |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2987 return perf[f] |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2988 except KeyError: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2989 try: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2990 val = -os.stat(f).st_size |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2991 except OSError as e: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2992 if e.errno != errno.ENOENT: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2993 raise |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2994 perf[f] = -1e9 # file does not exist, tell early |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2995 return -1e9 |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2996 for kw, mul in slow.items(): |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2997 if kw in f: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2998 val *= mul |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
2999 if f.endswith(b'.py'): |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
3000 val /= 10.0 |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
3001 perf[f] = val / 1000.0 |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
3002 return perf[f] |
35493
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
3003 |
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
3004 testdescs.sort(key=sortkey) |
212a6e9aecb0
run-tests: extract sorting of tests to own function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35492
diff
changeset
|
3005 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3006 |
21340
fda36de1cb0e
run-tests: establish a class to hold testing state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21339
diff
changeset
|
3007 class TestRunner(object): |
fda36de1cb0e
run-tests: establish a class to hold testing state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21339
diff
changeset
|
3008 """Holds context for executing tests. |
fda36de1cb0e
run-tests: establish a class to hold testing state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21339
diff
changeset
|
3009 |
fda36de1cb0e
run-tests: establish a class to hold testing state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21339
diff
changeset
|
3010 Tests rely on a lot of state. This object holds it for them. |
fda36de1cb0e
run-tests: establish a class to hold testing state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21339
diff
changeset
|
3011 """ |
21357
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3012 |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3013 # Programs required to run tests. |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3014 REQUIREDTOOLS = [ |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3015 b'diff', |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3016 b'grep', |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3017 b'unzip', |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3018 b'gunzip', |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3019 b'bunzip2', |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3020 b'sed', |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3021 ] |
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3022 |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3023 # Maps file extensions to test class. |
21357
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3024 TESTTYPES = [ |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3025 (b'.py', PythonTest), |
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3026 (b'.t', TTest), |
21357
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3027 ] |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3028 |
21341
cb88d4a04f58
run-tests: move TESTDIR out of a global
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21340
diff
changeset
|
3029 def __init__(self): |
21348
b3399154505f
run-tests: add options to runner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21347
diff
changeset
|
3030 self.options = None |
24506
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
3031 self._hgroot = None |
21534
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3032 self._testdir = None |
32736
2146f01a2577
run-tests: allow specifying an output dir to write .errs to
Siddharth Agarwal <sid0@fb.com>
parents:
32735
diff
changeset
|
3033 self._outputdir = None |
21534
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3034 self._hgtmp = None |
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3035 self._installdir = None |
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3036 self._bindir = None |
47575
27fb9f32e1a3
run-tests: always define a custom-bin directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47574
diff
changeset
|
3037 # a place for run-tests.py to generate executable it needs |
27fb9f32e1a3
run-tests: always define a custom-bin directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47574
diff
changeset
|
3038 self._custom_bin_dir = None |
21534
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3039 self._pythondir = None |
47574
2b2f5cf979c3
run-tests: explicitly track that `pythondir` was inferred
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47573
diff
changeset
|
3040 # True if we had to infer the pythondir from --with-hg |
2b2f5cf979c3
run-tests: explicitly track that `pythondir` was inferred
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47573
diff
changeset
|
3041 self._pythondir_inferred = False |
21534
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3042 self._coveragefile = None |
21352
39fd89fbbc3c
run-tests: move createdfiles out of a global and into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21351
diff
changeset
|
3043 self._createdfiles = [] |
28099
a5f0c0aab2bb
run-tests: allow to specify executable of any name by --with-hg
Yuya Nishihara <yuya@tcha.org>
parents:
28098
diff
changeset
|
3044 self._hgcommand = None |
21385
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3045 self._hgpath = None |
24967
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3046 self._portoffset = 0 |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3047 self._ports = {} |
21340
fda36de1cb0e
run-tests: establish a class to hold testing state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21339
diff
changeset
|
3048 |
21376
e4366bc08879
run-tests: move option parser logic to TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21375
diff
changeset
|
3049 def run(self, args, parser=None): |
21366
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3050 """Run the test suite.""" |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3051 oldmask = os.umask(0o22) |
21375
bd70dcb91af6
run-tests: move umask into TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21374
diff
changeset
|
3052 try: |
21376
e4366bc08879
run-tests: move option parser logic to TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21375
diff
changeset
|
3053 parser = parser or getparser() |
35198
b4b0aed7bfaf
run-tests: convert to argparse
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35176
diff
changeset
|
3054 options = parseargs(args, parser) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3055 tests = [_sys2bytes(a) for a in options.tests] |
34270
1533371769b5
tests: add support for listing tests to run in a file
Augie Fackler <augie@google.com>
parents:
34058
diff
changeset
|
3056 if options.test_list is not None: |
1533371769b5
tests: add support for listing tests to run in a file
Augie Fackler <augie@google.com>
parents:
34058
diff
changeset
|
3057 for listfile in options.test_list: |
1533371769b5
tests: add support for listing tests to run in a file
Augie Fackler <augie@google.com>
parents:
34058
diff
changeset
|
3058 with open(listfile, 'rb') as f: |
35198
b4b0aed7bfaf
run-tests: convert to argparse
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35176
diff
changeset
|
3059 tests.extend(t for t in f.read().splitlines() if t) |
21376
e4366bc08879
run-tests: move option parser logic to TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21375
diff
changeset
|
3060 self.options = options |
e4366bc08879
run-tests: move option parser logic to TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21375
diff
changeset
|
3061 |
21375
bd70dcb91af6
run-tests: move umask into TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21374
diff
changeset
|
3062 self._checktools() |
35198
b4b0aed7bfaf
run-tests: convert to argparse
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35176
diff
changeset
|
3063 testdescs = self.findtests(tests) |
25107
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3064 if options.profile_runner: |
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3065 import statprof |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3066 |
25107
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3067 statprof.start() |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3068 result = self._run(testdescs) |
25107
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3069 if options.profile_runner: |
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3070 statprof.stop() |
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3071 statprof.display() |
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3072 return result |
149cc7663ac8
run-tests: add a --profile-runner option
Augie Fackler <augie@google.com>
parents:
25098
diff
changeset
|
3073 |
21375
bd70dcb91af6
run-tests: move umask into TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21374
diff
changeset
|
3074 finally: |
bd70dcb91af6
run-tests: move umask into TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21374
diff
changeset
|
3075 os.umask(oldmask) |
21366
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3076 |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3077 def _run(self, testdescs): |
40537
78e5b9d815fa
test: fix self._testdir to use the right mercurial library during testing
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
40529
diff
changeset
|
3078 testdir = getcwdb() |
35018
a18eef03d879
run-tests: $TESTDIR can be something else than $PWD
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
34842
diff
changeset
|
3079 # assume all tests in same folder for now |
a18eef03d879
run-tests: $TESTDIR can be something else than $PWD
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
34842
diff
changeset
|
3080 if testdescs: |
a18eef03d879
run-tests: $TESTDIR can be something else than $PWD
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
34842
diff
changeset
|
3081 pathname = os.path.dirname(testdescs[0]['path']) |
35089
57d56f603f70
run-tests: fix TESTDIR if testdescs are absolute paths
Kyle Lippincott <spectral@google.com>
parents:
35024
diff
changeset
|
3082 if pathname: |
40537
78e5b9d815fa
test: fix self._testdir to use the right mercurial library during testing
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
40529
diff
changeset
|
3083 testdir = os.path.join(testdir, pathname) |
78e5b9d815fa
test: fix self._testdir to use the right mercurial library during testing
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
40529
diff
changeset
|
3084 self._testdir = osenvironb[b'TESTDIR'] = testdir |
32736
2146f01a2577
run-tests: allow specifying an output dir to write .errs to
Siddharth Agarwal <sid0@fb.com>
parents:
32735
diff
changeset
|
3085 if self.options.outputdir: |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3086 self._outputdir = canonpath(_sys2bytes(self.options.outputdir)) |
32736
2146f01a2577
run-tests: allow specifying an output dir to write .errs to
Siddharth Agarwal <sid0@fb.com>
parents:
32735
diff
changeset
|
3087 else: |
40537
78e5b9d815fa
test: fix self._testdir to use the right mercurial library during testing
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
40529
diff
changeset
|
3088 self._outputdir = getcwdb() |
35120
fc0f3ed071fc
run-tests: outputdir also has to be changed if $TESTDIR is not $PWD
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35115
diff
changeset
|
3089 if testdescs and pathname: |
fc0f3ed071fc
run-tests: outputdir also has to be changed if $TESTDIR is not $PWD
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35115
diff
changeset
|
3090 self._outputdir = os.path.join(self._outputdir, pathname) |
36694
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
3091 previoustimes = {} |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
3092 if self.options.order_by_runtime: |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
3093 previoustimes = dict(loadtimes(self._outputdir)) |
6276cbc704a6
testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com>
parents:
36551
diff
changeset
|
3094 sorttests(testdescs, previoustimes, shuffle=self.options.random) |
21371
a10ba7870c2d
run-tests: assign testdir in TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21370
diff
changeset
|
3095 |
21370
97475f27bebe
run-tests: move hash seed logic to TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21369
diff
changeset
|
3096 if 'PYTHONHASHSEED' not in os.environ: |
97475f27bebe
run-tests: move hash seed logic to TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21369
diff
changeset
|
3097 # use a random python hash seed all the time |
97475f27bebe
run-tests: move hash seed logic to TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21369
diff
changeset
|
3098 # we do the randomness ourself to know what seed is used |
97475f27bebe
run-tests: move hash seed logic to TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21369
diff
changeset
|
3099 os.environ['PYTHONHASHSEED'] = str(random.getrandbits(32)) |
97475f27bebe
run-tests: move hash seed logic to TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21369
diff
changeset
|
3100 |
44528
b2e41723f886
run-tests: restrict Rust thread pool to 3 threads during tests
Raphaël Gomès <rgomes@octobus.net>
parents:
44501
diff
changeset
|
3101 # Rayon (Rust crate for multi-threading) will use all logical CPU cores |
b2e41723f886
run-tests: restrict Rust thread pool to 3 threads during tests
Raphaël Gomès <rgomes@octobus.net>
parents:
44501
diff
changeset
|
3102 # by default, causing thrashing on high-cpu-count systems. |
b2e41723f886
run-tests: restrict Rust thread pool to 3 threads during tests
Raphaël Gomès <rgomes@octobus.net>
parents:
44501
diff
changeset
|
3103 # Setting its limit to 3 during tests should still let us uncover |
b2e41723f886
run-tests: restrict Rust thread pool to 3 threads during tests
Raphaël Gomès <rgomes@octobus.net>
parents:
44501
diff
changeset
|
3104 # multi-threading bugs while keeping the thrashing reasonable. |
b2e41723f886
run-tests: restrict Rust thread pool to 3 threads during tests
Raphaël Gomès <rgomes@octobus.net>
parents:
44501
diff
changeset
|
3105 os.environ.setdefault("RAYON_NUM_THREADS", "3") |
b2e41723f886
run-tests: restrict Rust thread pool to 3 threads during tests
Raphaël Gomès <rgomes@octobus.net>
parents:
44501
diff
changeset
|
3106 |
21369
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3107 if self.options.tmpdir: |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3108 self.options.keep_tmpdir = True |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3109 tmpdir = _sys2bytes(self.options.tmpdir) |
21369
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3110 if os.path.exists(tmpdir): |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3111 # Meaning of tmpdir has changed since 1.3: we used to create |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3112 # HGTMP inside tmpdir; now HGTMP is tmpdir. So fail if |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3113 # tmpdir already exists. |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3114 print("error: temp dir %r already exists" % tmpdir) |
21369
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3115 return 1 |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3116 |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3117 os.makedirs(tmpdir) |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3118 else: |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3119 d = None |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
3120 if WINDOWS: |
21369
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3121 # without this, we get the default temp dir location, but |
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3122 # in all lowercase, which causes troubles with paths (issue3490) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3123 d = osenvironb.get(b'TMP', None) |
25262
5a809deb88e6
run-tests: python3.5 now supports mkdtemp using bytes for paths
Augie Fackler <raf@durin42.com>
parents:
25261
diff
changeset
|
3124 tmpdir = tempfile.mkdtemp(b'', b'hgtests.', d) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3125 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3126 self._hgtmp = osenvironb[b'HGTMP'] = os.path.realpath(tmpdir) |
21369
1d0aa8bccc87
run-tests: move tmpdir calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21368
diff
changeset
|
3127 |
47575
27fb9f32e1a3
run-tests: always define a custom-bin directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47574
diff
changeset
|
3128 self._custom_bin_dir = os.path.join(self._hgtmp, b'custom-bin') |
27fb9f32e1a3
run-tests: always define a custom-bin directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47574
diff
changeset
|
3129 os.makedirs(self._custom_bin_dir) |
27fb9f32e1a3
run-tests: always define a custom-bin directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47574
diff
changeset
|
3130 |
21368
a884548f5421
run-tests: move more path calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21367
diff
changeset
|
3131 if self.options.with_hg: |
21534
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3132 self._installdir = None |
25042
201823c50610
run-tests: work around with_hg being bytes or string depending on provenance
Augie Fackler <augie@google.com>
parents:
25041
diff
changeset
|
3133 whg = self.options.with_hg |
201823c50610
run-tests: work around with_hg being bytes or string depending on provenance
Augie Fackler <augie@google.com>
parents:
25041
diff
changeset
|
3134 self._bindir = os.path.dirname(os.path.realpath(whg)) |
201823c50610
run-tests: work around with_hg being bytes or string depending on provenance
Augie Fackler <augie@google.com>
parents:
25041
diff
changeset
|
3135 assert isinstance(self._bindir, bytes) |
28099
a5f0c0aab2bb
run-tests: allow to specify executable of any name by --with-hg
Yuya Nishihara <yuya@tcha.org>
parents:
28098
diff
changeset
|
3136 self._hgcommand = os.path.basename(whg) |
21368
a884548f5421
run-tests: move more path calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21367
diff
changeset
|
3137 |
35569
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3138 normbin = os.path.normpath(os.path.abspath(whg)) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3139 normbin = normbin.replace(_sys2bytes(os.sep), b'/') |
35569
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3140 |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3141 # Other Python scripts in the test harness need to |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3142 # `import mercurial`. If `hg` is a Python script, we assume |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3143 # the Mercurial modules are relative to its path and tell the tests |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3144 # to load Python modules from its directory. |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3145 with open(whg, 'rb') as fh: |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3146 initial = fh.read(1024) |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3147 |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3148 if re.match(b'#!.*python', initial): |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3149 self._pythondir = self._bindir |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3150 # If it looks like our in-repo Rust binary, use the source root. |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3151 # This is a bit hacky. But rhg is still not supported outside the |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3152 # source directory. So until it is, do the simple thing. |
35600
31acf6619f08
run-tests: fix regular expression for path test
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35569
diff
changeset
|
3153 elif re.search(b'/rust/target/[^/]+/hg', normbin): |
35569
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3154 self._pythondir = os.path.dirname(self._testdir) |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3155 # Fall back to the legacy behavior. |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3156 else: |
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3157 self._pythondir = self._bindir |
47574
2b2f5cf979c3
run-tests: explicitly track that `pythondir` was inferred
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47573
diff
changeset
|
3158 self._pythondir_inferred = True |
35569
964212780daf
rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35540
diff
changeset
|
3159 |
21368
a884548f5421
run-tests: move more path calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21367
diff
changeset
|
3160 else: |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3161 self._installdir = os.path.join(self._hgtmp, b"install") |
28098
d7b0e81b84c2
run-tests: drop redundant assignment to BINDIR
Yuya Nishihara <yuya@tcha.org>
parents:
28097
diff
changeset
|
3162 self._bindir = os.path.join(self._installdir, b"bin") |
28099
a5f0c0aab2bb
run-tests: allow to specify executable of any name by --with-hg
Yuya Nishihara <yuya@tcha.org>
parents:
28098
diff
changeset
|
3163 self._hgcommand = b'hg' |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3164 self._pythondir = os.path.join(self._installdir, b"lib", b"python") |
21368
a884548f5421
run-tests: move more path calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21367
diff
changeset
|
3165 |
40989
ef7119cd4965
py3: enable legacy stdio mode in exewrapper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40988
diff
changeset
|
3166 # Force the use of hg.exe instead of relying on MSYS to recognize hg is |
ef7119cd4965
py3: enable legacy stdio mode in exewrapper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40988
diff
changeset
|
3167 # a python script and feed it to python.exe. Legacy stdio is force |
ef7119cd4965
py3: enable legacy stdio mode in exewrapper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40988
diff
changeset
|
3168 # enabled by hg.exe, and this is a more realistic way to launch hg |
ef7119cd4965
py3: enable legacy stdio mode in exewrapper
Matt Harbison <matt_harbison@yahoo.com>
parents:
40988
diff
changeset
|
3169 # anyway. |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
3170 if WINDOWS and not self._hgcommand.endswith(b'.exe'): |
40988
2465e0b27a0d
run-tests: alias hg to hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40947
diff
changeset
|
3171 self._hgcommand += b'.exe' |
2465e0b27a0d
run-tests: alias hg to hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40947
diff
changeset
|
3172 |
47584
ee1fc8f970e6
run-tests: introduce a `HGTEST_REAL_HG` variable for test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47583
diff
changeset
|
3173 real_hg = os.path.join(self._bindir, self._hgcommand) |
ee1fc8f970e6
run-tests: introduce a `HGTEST_REAL_HG` variable for test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47583
diff
changeset
|
3174 osenvironb[b'HGTEST_REAL_HG'] = real_hg |
28620
759d167f75cf
run-tests: use different chg socket directories for different tests
Jun Wu <quark@fb.com>
parents:
28596
diff
changeset
|
3175 # set CHGHG, then replace "hg" command by "chg" |
28142
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
3176 chgbindir = self._bindir |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3177 if self.options.chg or self.options.with_chg: |
47586
a8e33ab50c4f
run-tests: use more explicit signaling for `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47585
diff
changeset
|
3178 osenvironb[b'CHG_INSTALLED_AS_HG'] = b'1' |
47584
ee1fc8f970e6
run-tests: introduce a `HGTEST_REAL_HG` variable for test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47583
diff
changeset
|
3179 osenvironb[b'CHGHG'] = real_hg |
28880
f74eed3115fd
hghave: add "chg" flag to skip tests that can't be compatible with chg
Yuya Nishihara <yuya@tcha.org>
parents:
28829
diff
changeset
|
3180 else: |
47586
a8e33ab50c4f
run-tests: use more explicit signaling for `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47585
diff
changeset
|
3181 # drop flag for hghave |
a8e33ab50c4f
run-tests: use more explicit signaling for `chg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47585
diff
changeset
|
3182 osenvironb.pop(b'CHG_INSTALLED_AS_HG', None) |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3183 if self.options.chg: |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3184 self._hgcommand = b'chg' |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3185 elif self.options.with_chg: |
28142
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
3186 chgbindir = os.path.dirname(os.path.realpath(self.options.with_chg)) |
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
3187 self._hgcommand = os.path.basename(self.options.with_chg) |
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
3188 |
46736
a6553ba1c598
tests: Enable rhg fallback to Python by default in tests
Simon Sapin <simon.sapin@octobus.net>
parents:
46707
diff
changeset
|
3189 # configure fallback and replace "hg" command by "rhg" |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3190 rhgbindir = self._bindir |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3191 if self.options.rhg or self.options.with_rhg: |
46737
78e6700ab009
tests: Add `rhg` and `no-rhg` for #require and #if in .t files
Simon Sapin <simon.sapin@octobus.net>
parents:
46736
diff
changeset
|
3192 # Affects hghave.py |
78e6700ab009
tests: Add `rhg` and `no-rhg` for #require and #if in .t files
Simon Sapin <simon.sapin@octobus.net>
parents:
46736
diff
changeset
|
3193 osenvironb[b'RHG_INSTALLED_AS_HG'] = b'1' |
46736
a6553ba1c598
tests: Enable rhg fallback to Python by default in tests
Simon Sapin <simon.sapin@octobus.net>
parents:
46707
diff
changeset
|
3194 # Affects configuration. Alternatives would be setting configuration through |
a6553ba1c598
tests: Enable rhg fallback to Python by default in tests
Simon Sapin <simon.sapin@octobus.net>
parents:
46707
diff
changeset
|
3195 # `$HGRCPATH` but some tests override that, or changing `_hgcommand` to include |
a6553ba1c598
tests: Enable rhg fallback to Python by default in tests
Simon Sapin <simon.sapin@octobus.net>
parents:
46707
diff
changeset
|
3196 # `--config` but that disrupts tests that print command lines and check expected |
a6553ba1c598
tests: Enable rhg fallback to Python by default in tests
Simon Sapin <simon.sapin@octobus.net>
parents:
46707
diff
changeset
|
3197 # output. |
a6553ba1c598
tests: Enable rhg fallback to Python by default in tests
Simon Sapin <simon.sapin@octobus.net>
parents:
46707
diff
changeset
|
3198 osenvironb[b'RHG_ON_UNSUPPORTED'] = b'fallback' |
47584
ee1fc8f970e6
run-tests: introduce a `HGTEST_REAL_HG` variable for test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47583
diff
changeset
|
3199 osenvironb[b'RHG_FALLBACK_EXECUTABLE'] = real_hg |
47585
5654323832f0
run-tests: drop the `rhg` flag for `hghave.py` if unset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47584
diff
changeset
|
3200 else: |
5654323832f0
run-tests: drop the `rhg` flag for `hghave.py` if unset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47584
diff
changeset
|
3201 # drop flag for hghave |
5654323832f0
run-tests: drop the `rhg` flag for `hghave.py` if unset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47584
diff
changeset
|
3202 osenvironb.pop(b'RHG_INSTALLED_AS_HG', None) |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3203 if self.options.rhg: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3204 self._hgcommand = b'rhg' |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3205 elif self.options.with_rhg: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3206 rhgbindir = os.path.dirname(os.path.realpath(self.options.with_rhg)) |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3207 self._hgcommand = os.path.basename(self.options.with_rhg) |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3208 |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3209 if self.options.pyoxidized: |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3210 testdir = os.path.dirname(_sys2bytes(canonpath(sys.argv[0]))) |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3211 reporootdir = os.path.dirname(testdir) |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3212 # XXX we should ideally install stuff instead of using the local build |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3213 bin_path = ( |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3214 b'build/pyoxidizer/x86_64-pc-windows-msvc/release/app/hg.exe' |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3215 ) |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3216 full_path = os.path.join(reporootdir, bin_path) |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3217 self._hgcommand = full_path |
47826
94158c541c74
pyoxidized: add a `pyoxidizer` hghave keyword for line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47821
diff
changeset
|
3218 # Affects hghave.py |
94158c541c74
pyoxidized: add a `pyoxidizer` hghave keyword for line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47821
diff
changeset
|
3219 osenvironb[b'PYOXIDIZED_INSTALLED_AS_HG'] = b'1' |
94158c541c74
pyoxidized: add a `pyoxidizer` hghave keyword for line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47821
diff
changeset
|
3220 else: |
94158c541c74
pyoxidized: add a `pyoxidizer` hghave keyword for line matching
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47821
diff
changeset
|
3221 osenvironb.pop(b'PYOXIDIZED_INSTALLED_AS_HG', None) |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3222 |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3223 osenvironb[b"BINDIR"] = self._bindir |
25058
caa2043cc322
run-tests: unblock running python tests in python 3
Augie Fackler <augie@google.com>
parents:
25057
diff
changeset
|
3224 osenvironb[b"PYTHON"] = PYTHON |
21368
a884548f5421
run-tests: move more path calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21367
diff
changeset
|
3225 |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3226 fileb = _sys2bytes(__file__) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3227 runtestdir = os.path.abspath(os.path.dirname(fileb)) |
25729
57dfadc4f46c
run-tests.py: add RUNTESTDIR to refer `tests` of Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25728
diff
changeset
|
3228 osenvironb[b'RUNTESTDIR'] = runtestdir |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
3229 sepb = _sys2bytes(os.pathsep) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3230 path = [self._bindir, runtestdir] + osenvironb[b"PATH"].split(sepb) |
24742
39ee0444e27c
run-tests: also follow symlink when update PATH with 'run-tests.py' dir
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24516
diff
changeset
|
3231 if os.path.islink(__file__): |
39ee0444e27c
run-tests: also follow symlink when update PATH with 'run-tests.py' dir
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24516
diff
changeset
|
3232 # test helper will likely be at the end of the symlink |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3233 realfile = os.path.realpath(fileb) |
24742
39ee0444e27c
run-tests: also follow symlink when update PATH with 'run-tests.py' dir
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24516
diff
changeset
|
3234 realdir = os.path.abspath(os.path.dirname(realfile)) |
39ee0444e27c
run-tests: also follow symlink when update PATH with 'run-tests.py' dir
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24516
diff
changeset
|
3235 path.insert(2, realdir) |
28142
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
3236 if chgbindir != self._bindir: |
85e28a46c7f1
run-tests: add --with-chg option to run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28127
diff
changeset
|
3237 path.insert(1, chgbindir) |
46707
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3238 if rhgbindir != self._bindir: |
fb2368598281
tests: Add `--rhg` and `--with-rhg=<path>` options for `run-tests.py`
Simon Sapin <simon.sapin@octobus.net>
parents:
46456
diff
changeset
|
3239 path.insert(1, rhgbindir) |
25730
c380d5273e91
run-tests.py: add TESTDIR to PATH if it differs from RUNTESTDIR
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25729
diff
changeset
|
3240 if self._testdir != runtestdir: |
c380d5273e91
run-tests.py: add TESTDIR to PATH if it differs from RUNTESTDIR
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25729
diff
changeset
|
3241 path = [self._testdir] + path |
47575
27fb9f32e1a3
run-tests: always define a custom-bin directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47574
diff
changeset
|
3242 path = [self._custom_bin_dir] + path |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3243 osenvironb[b"PATH"] = sepb.join(path) |
21368
a884548f5421
run-tests: move more path calculations into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21367
diff
changeset
|
3244 |
21367
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3245 # Include TESTDIR in PYTHONPATH so that out-of-tree extensions |
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3246 # can run .../tests/run-tests.py test-foo where test-foo |
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3247 # adds an extension to HGRC. Also include run-test.py directory to |
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3248 # import modules like heredoctest. |
23859
661b246bf1c4
run-tests: include testdir in $PATH so tests easily can use helper tools
Mads Kiilerich <madski@unity3d.com>
parents:
23728
diff
changeset
|
3249 pypath = [self._pythondir, self._testdir, runtestdir] |
21367
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3250 # We have to augment PYTHONPATH, rather than simply replacing |
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3251 # it, in case external libraries are only available via current |
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3252 # PYTHONPATH. (In particular, the Subversion bindings on OS X |
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3253 # are in /opt/subversion.) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3254 oldpypath = osenvironb.get(IMPL_PATH) |
21367
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3255 if oldpypath: |
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3256 pypath.append(oldpypath) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3257 osenvironb[IMPL_PATH] = sepb.join(pypath) |
21367
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3258 |
23935
d64dd1252386
run-tests.py: inherit --pure option from outer run-tests.py execution
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23933
diff
changeset
|
3259 if self.options.pure: |
d64dd1252386
run-tests.py: inherit --pure option from outer run-tests.py execution
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23933
diff
changeset
|
3260 os.environ["HGTEST_RUN_TESTS_PURE"] = "--pure" |
28905
c969c72d6cbc
run-tests: set HGMODULEPOLICY for --pure
timeless <timeless@mozdev.org>
parents:
28880
diff
changeset
|
3261 os.environ["HGMODULEPOLICY"] = "py" |
44501
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3262 if self.options.rust: |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3263 os.environ["HGMODULEPOLICY"] = "rust+c" |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3264 if self.options.no_rust: |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3265 current_policy = os.environ.get("HGMODULEPOLICY", "") |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3266 if current_policy.startswith("rust+"): |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3267 os.environ["HGMODULEPOLICY"] = current_policy[len("rust+") :] |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3268 os.environ.pop("HGWITHRUSTEXT", None) |
23935
d64dd1252386
run-tests.py: inherit --pure option from outer run-tests.py execution
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23933
diff
changeset
|
3269 |
26109
bad09bd22b6a
run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents:
26087
diff
changeset
|
3270 if self.options.allow_slow_tests: |
bad09bd22b6a
run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents:
26087
diff
changeset
|
3271 os.environ["HGTEST_SLOW"] = "slow" |
bad09bd22b6a
run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents:
26087
diff
changeset
|
3272 elif 'HGTEST_SLOW' in os.environ: |
bad09bd22b6a
run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents:
26087
diff
changeset
|
3273 del os.environ['HGTEST_SLOW'] |
bad09bd22b6a
run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents:
26087
diff
changeset
|
3274 |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3275 self._coveragefile = os.path.join(self._testdir, b'.coverage') |
21367
522e3d24a461
run-tests: move pypath manipulation into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21366
diff
changeset
|
3276 |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3277 if self.options.exceptions: |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3278 exceptionsdir = os.path.join(self._outputdir, b'exceptions') |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3279 try: |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3280 os.makedirs(exceptionsdir) |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3281 except OSError as e: |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3282 if e.errno != errno.EEXIST: |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3283 raise |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3284 |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3285 # Remove all existing exception reports. |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3286 for f in os.listdir(exceptionsdir): |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3287 os.unlink(os.path.join(exceptionsdir, f)) |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3288 |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3289 osenvironb[b'HGEXCEPTIONSDIR'] = exceptionsdir |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3290 logexceptions = os.path.join(self._testdir, b'logexceptions.py') |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3291 self.options.extra_config_opt.append( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3292 'extensions.logexceptions=%s' % logexceptions.decode('utf-8') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3293 ) |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3294 |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3295 vlog("# Using TESTDIR", _bytes2sys(self._testdir)) |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3296 vlog("# Using RUNTESTDIR", _bytes2sys(osenvironb[b'RUNTESTDIR'])) |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3297 vlog("# Using HGTMP", _bytes2sys(self._hgtmp)) |
21366
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3298 vlog("# Using PATH", os.environ["PATH"]) |
43309
b4b1131187c4
py3: decode bytes before logging in run-tests.py
Denis Laxalde <denis@laxalde.org>
parents:
43283
diff
changeset
|
3299 vlog( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
3300 "# Using", |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
3301 _bytes2sys(IMPL_PATH), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45849
diff
changeset
|
3302 _bytes2sys(osenvironb[IMPL_PATH]), |
43309
b4b1131187c4
py3: decode bytes before logging in run-tests.py
Denis Laxalde <denis@laxalde.org>
parents:
43283
diff
changeset
|
3303 ) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3304 vlog("# Writing to directory", _bytes2sys(self._outputdir)) |
21366
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3305 |
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3306 try: |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3307 return self._runtests(testdescs) or 0 |
21366
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3308 finally: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3309 time.sleep(0.1) |
21366
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3310 self._cleanup() |
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3311 |
21363
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3312 def findtests(self, args): |
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3313 """Finds possible test files from arguments. |
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3314 |
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3315 If you wish to inject custom tests into the test harness, this would |
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3316 be a good function to monkeypatch or override in a derived class. |
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3317 """ |
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3318 if not args: |
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3319 if self.options.changed: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3320 proc = Popen4( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3321 b'hg st --rev "%s" -man0 .' |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3322 % _sys2bytes(self.options.changed), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3323 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3324 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3325 ) |
21363
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3326 stdout, stderr = proc.communicate() |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3327 args = stdout.strip(b'\0').split(b'\0') |
21363
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3328 else: |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3329 args = os.listdir(b'.') |
21363
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3330 |
35024
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3331 expanded_args = [] |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3332 for arg in args: |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3333 if os.path.isdir(arg): |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3334 if not arg.endswith(b'/'): |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3335 arg += b'/' |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3336 expanded_args.extend([arg + a for a in os.listdir(arg)]) |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3337 else: |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3338 expanded_args.append(arg) |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3339 args = expanded_args |
d600bda4a3e1
run-tests: allow automatic test discovery when providing folder as argument
Matthieu Laneuville <matthieu.laneuville@octobus.net>
parents:
35021
diff
changeset
|
3340 |
44023
6d3b67a837a6
cleanup: drop redundant character escapes from `[]` character sets
Matt Harbison <matt_harbison@yahoo.com>
parents:
43987
diff
changeset
|
3341 testcasepattern = re.compile(br'([\w-]+\.t|py)(?:#([a-zA-Z0-9_\-.#]+))') |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3342 tests = [] |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3343 for t in args: |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3344 case = [] |
38234
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3345 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3346 if not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3347 os.path.basename(t).startswith(b'test-') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3348 and (t.endswith(b'.py') or t.endswith(b'.t')) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3349 ): |
38234
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3350 |
41139
8ddc5d8bea25
tests: support passing testcase after .t paths that have path separators
Kyle Lippincott <spectral@google.com>
parents:
40999
diff
changeset
|
3351 m = testcasepattern.match(os.path.basename(t)) |
38234
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3352 if m is not None: |
41142
89d103fc9c19
testrunner: avoid capturing a regex group we don't care about
Martin von Zweigbergk <martinvonz@google.com>
parents:
41139
diff
changeset
|
3353 t_basename, casestr = m.groups() |
41139
8ddc5d8bea25
tests: support passing testcase after .t paths that have path separators
Kyle Lippincott <spectral@google.com>
parents:
40999
diff
changeset
|
3354 t = os.path.join(os.path.dirname(t), t_basename) |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3355 if casestr: |
38972
35180ade80c1
tests: fix bytes/str issues in run-tests.py caught by python3
Augie Fackler <augie@google.com>
parents:
38864
diff
changeset
|
3356 case = casestr.split(b'#') |
38234
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3357 else: |
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3358 continue |
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3359 |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3360 if t.endswith(b'.t'): |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3361 # .t file may contain multiple test cases |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3362 casedimensions = parsettestcases(t) |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3363 if casedimensions: |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3364 cases = [] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3365 |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3366 def addcases(case, casedimensions): |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3367 if not casedimensions: |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3368 cases.append(case) |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3369 else: |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3370 for c in casedimensions[0]: |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3371 addcases(case + [c], casedimensions[1:]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3372 |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3373 addcases([], casedimensions) |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3374 if case and case in cases: |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3375 cases = [case] |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3376 elif case: |
38234
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3377 # Ignore invalid cases |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3378 cases = [] |
38234
507bdc40bb17
run-tests: add support for running specific test cases
Boris Feld <boris.feld@octobus.net>
parents:
37741
diff
changeset
|
3379 else: |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3380 pass |
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3381 tests += [{'path': t, 'case': c} for c in sorted(cases)] |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3382 else: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3383 tests.append({'path': t}) |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3384 else: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3385 tests.append({'path': t}) |
45421
de9ec12ee53c
run-tests: refactor filtering logic for --retest flag
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45108
diff
changeset
|
3386 |
de9ec12ee53c
run-tests: refactor filtering logic for --retest flag
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45108
diff
changeset
|
3387 if self.options.retest: |
de9ec12ee53c
run-tests: refactor filtering logic for --retest flag
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45108
diff
changeset
|
3388 retest_args = [] |
de9ec12ee53c
run-tests: refactor filtering logic for --retest flag
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45108
diff
changeset
|
3389 for test in tests: |
45422
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3390 errpath = self._geterrpath(test) |
45421
de9ec12ee53c
run-tests: refactor filtering logic for --retest flag
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45108
diff
changeset
|
3391 if os.path.exists(errpath): |
de9ec12ee53c
run-tests: refactor filtering logic for --retest flag
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45108
diff
changeset
|
3392 retest_args.append(test) |
de9ec12ee53c
run-tests: refactor filtering logic for --retest flag
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45108
diff
changeset
|
3393 tests = retest_args |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3394 return tests |
21363
00e5f5b9fc90
run-tests: move test discovery logic into a function
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21362
diff
changeset
|
3395 |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3396 def _runtests(self, testdescs): |
32350
b96be0098624
run-tests: change test identity from a path to a dict
Jun Wu <quark@fb.com>
parents:
32343
diff
changeset
|
3397 def _reloadtest(test, i): |
b96be0098624
run-tests: change test identity from a path to a dict
Jun Wu <quark@fb.com>
parents:
32343
diff
changeset
|
3398 # convert a test back to its description dict |
b96be0098624
run-tests: change test identity from a path to a dict
Jun Wu <quark@fb.com>
parents:
32343
diff
changeset
|
3399 desc = {'path': test.path} |
38864
3086a8627b29
testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com>
parents:
38863
diff
changeset
|
3400 case = getattr(test, '_case', []) |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3401 if case: |
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3402 desc['case'] = case |
32350
b96be0098624
run-tests: change test identity from a path to a dict
Jun Wu <quark@fb.com>
parents:
32343
diff
changeset
|
3403 return self._gettest(desc, i) |
b96be0098624
run-tests: change test identity from a path to a dict
Jun Wu <quark@fb.com>
parents:
32343
diff
changeset
|
3404 |
21360
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3405 try: |
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3406 if self.options.restart: |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3407 orig = list(testdescs) |
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3408 while testdescs: |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3409 desc = testdescs[0] |
45422
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3410 errpath = self._geterrpath(desc) |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3411 if os.path.exists(errpath): |
21360
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3412 break |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3413 testdescs.pop(0) |
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3414 if not testdescs: |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3415 print("running all tests") |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3416 testdescs = orig |
21360
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3417 |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3418 tests = [self._gettest(d, i) for i, d in enumerate(testdescs)] |
41178
53327bfbf35d
testrunner: make `-j100 --runs-per-test=100 test-foo.t` use 100 jobs
Martin von Zweigbergk <martinvonz@google.com>
parents:
41142
diff
changeset
|
3419 num_tests = len(tests) * self.options.runs_per_test |
53327bfbf35d
testrunner: make `-j100 --runs-per-test=100 test-foo.t` use 100 jobs
Martin von Zweigbergk <martinvonz@google.com>
parents:
41142
diff
changeset
|
3420 |
53327bfbf35d
testrunner: make `-j100 --runs-per-test=100 test-foo.t` use 100 jobs
Martin von Zweigbergk <martinvonz@google.com>
parents:
41142
diff
changeset
|
3421 jobs = min(num_tests, self.options.jobs) |
40244
1039404c5e1d
run-tests: print number of tests and parallel process count
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39914
diff
changeset
|
3422 |
21458
c42219733f30
run-tests: don't print results in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21457
diff
changeset
|
3423 failed = False |
25050
28526bb5b3b5
run-tests: make sure keyword(s) are in bytes and not str
Augie Fackler <augie@google.com>
parents:
25049
diff
changeset
|
3424 kws = self.options.keywords |
25159
138dc8381049
run-tests: move all open-coded sys.version_info checks to PYTHON3 (issue4668)
Augie Fackler <augie@google.com>
parents:
25158
diff
changeset
|
3425 if kws is not None and PYTHON3: |
25050
28526bb5b3b5
run-tests: make sure keyword(s) are in bytes and not str
Augie Fackler <augie@google.com>
parents:
25049
diff
changeset
|
3426 kws = kws.encode('utf-8') |
21458
c42219733f30
run-tests: don't print results in unittest mode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21457
diff
changeset
|
3427 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3428 suite = TestSuite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3429 self._testdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3430 jobs=jobs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3431 whitelist=self.options.whitelisted, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3432 blacklist=self.options.blacklist, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3433 keywords=kws, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3434 loop=self.options.loop, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3435 runs_per_test=self.options.runs_per_test, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3436 showchannels=self.options.showchannels, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3437 tests=tests, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3438 loadtest=_reloadtest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3439 ) |
21464
d19164a018a1
run-tests: execute tests via unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21463
diff
changeset
|
3440 verbosity = 1 |
38620
875e033fbbdd
run-tests: fix test result verbosity
Boris Feld <boris.feld@octobus.net>
parents:
38617
diff
changeset
|
3441 if self.options.list_tests: |
875e033fbbdd
run-tests: fix test result verbosity
Boris Feld <boris.feld@octobus.net>
parents:
38617
diff
changeset
|
3442 verbosity = 0 |
875e033fbbdd
run-tests: fix test result verbosity
Boris Feld <boris.feld@octobus.net>
parents:
38617
diff
changeset
|
3443 elif self.options.verbose: |
21464
d19164a018a1
run-tests: execute tests via unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21463
diff
changeset
|
3444 verbosity = 2 |
d19164a018a1
run-tests: execute tests via unittest
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21463
diff
changeset
|
3445 runner = TextTestRunner(self, verbosity=verbosity) |
32723
9d1d3199382e
run-tests: install hg after computing tests to run
Siddharth Agarwal <sid0@fb.com>
parents:
32722
diff
changeset
|
3446 |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3447 if self.options.list_tests: |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3448 result = runner.listtests(suite) |
32723
9d1d3199382e
run-tests: install hg after computing tests to run
Siddharth Agarwal <sid0@fb.com>
parents:
32722
diff
changeset
|
3449 else: |
47577
2ee81806831f
run-tests: setup "correct" python earlier
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47576
diff
changeset
|
3450 self._usecorrectpython() |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3451 if self._installdir: |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3452 self._installhg() |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3453 self._checkhglib("Testing") |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3454 if self.options.chg: |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3455 assert self._installdir |
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3456 self._installchg() |
46767
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3457 if self.options.rhg: |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3458 assert self._installdir |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3459 self._installrhg() |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3460 elif self.options.pyoxidized: |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3461 self._build_pyoxidized() |
47588
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3462 self._use_correct_mercurial() |
32723
9d1d3199382e
run-tests: install hg after computing tests to run
Siddharth Agarwal <sid0@fb.com>
parents:
32722
diff
changeset
|
3463 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3464 log( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3465 'running %d tests using %d parallel processes' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3466 % (num_tests, jobs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3467 ) |
40244
1039404c5e1d
run-tests: print number of tests and parallel process count
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39914
diff
changeset
|
3468 |
32724
1270b00a385d
run-tests: add a way to list tests, with JSON and XUnit support
Siddharth Agarwal <sid0@fb.com>
parents:
32723
diff
changeset
|
3469 result = runner.run(suite) |
21613
b3213b9fafed
run-tests: exit with non-0 exit code when tests fail or warn
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21539
diff
changeset
|
3470 |
42405
15d5a2de44aa
tests: make run-tests exit non-zero if there are "errors"
Kyle Lippincott <spectral@google.com>
parents:
41809
diff
changeset
|
3471 if result.failures or result.errors: |
21613
b3213b9fafed
run-tests: exit with non-0 exit code when tests fail or warn
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21539
diff
changeset
|
3472 failed = True |
21360
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3473 |
38617
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
3474 result.onEnd() |
948691ea92a9
run-tests: extract onStart and onEnd into the test result
Boris Feld <boris.feld@octobus.net>
parents:
38616
diff
changeset
|
3475 |
21360
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3476 if self.options.anycoverage: |
21378
f7ac3c63d844
run-tests: make some methods of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21377
diff
changeset
|
3477 self._outputcoverage() |
21360
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3478 except KeyboardInterrupt: |
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3479 failed = True |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3480 print("\ninterrupted!") |
21360
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3481 |
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3482 if failed: |
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3483 return 1 |
becce297ae0c
run-tests: move runtests() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21359
diff
changeset
|
3484 |
45422
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3485 def _geterrpath(self, test): |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3486 # test['path'] is a relative path |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3487 if 'case' in test: |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3488 # for multiple dimensions test cases |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3489 casestr = b'#'.join(test['case']) |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3490 errpath = b'%s#%s.err' % (test['path'], casestr) |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3491 else: |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3492 errpath = b'%s.err' % test['path'] |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3493 if self.options.outputdir: |
45453
c6e332a451d0
py3: fix bytes and str mixup in run-tests
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45422
diff
changeset
|
3494 self._outputdir = canonpath(_sys2bytes(self.options.outputdir)) |
c6e332a451d0
py3: fix bytes and str mixup in run-tests
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45422
diff
changeset
|
3495 errpath = os.path.join(self._outputdir, errpath) |
45422
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3496 return errpath |
543e446204c6
run-tests: extract logic to get errpath in a utility func
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
45421
diff
changeset
|
3497 |
24967
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3498 def _getport(self, count): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3499 port = self._ports.get(count) # do we have a cached entry? |
24967
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3500 if port is None: |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3501 portneeded = 3 |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3502 # above 100 tries we just give up and let test reports failure |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3503 for tries in xrange(100): |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3504 allfree = True |
27602
67aa88e00fc7
run-tests: fix get port to try differing ports
timeless <timeless@mozdev.org>
parents:
27567
diff
changeset
|
3505 port = self.options.port + self._portoffset |
24967
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3506 for idx in xrange(portneeded): |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3507 if not checkportisavailable(port + idx): |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3508 allfree = False |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3509 break |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3510 self._portoffset += portneeded |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3511 if allfree: |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3512 break |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3513 self._ports[count] = port |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3514 return port |
00790cc2b753
run-test: ensure the test ports are available before launching test
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24965
diff
changeset
|
3515 |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3516 def _gettest(self, testdesc, count): |
21357
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3517 """Obtain a Test by looking at its filename. |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3518 |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3519 Returns a Test instance. The Test may not be runnable if it doesn't |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3520 map to a known type. |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3521 """ |
32351
a77a75a428f7
run-tests: rename test description dict to testdesc
Jun Wu <quark@fb.com>
parents:
32350
diff
changeset
|
3522 path = testdesc['path'] |
32350
b96be0098624
run-tests: change test identity from a path to a dict
Jun Wu <quark@fb.com>
parents:
32343
diff
changeset
|
3523 lctest = path.lower() |
21357
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3524 testcls = Test |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3525 |
21501
98a0c58ee200
run-tests: factor refpath into Test classes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21500
diff
changeset
|
3526 for ext, cls in self.TESTTYPES: |
21357
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3527 if lctest.endswith(ext): |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3528 testcls = cls |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3529 break |
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3530 |
40537
78e5b9d815fa
test: fix self._testdir to use the right mercurial library during testing
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com>
parents:
40529
diff
changeset
|
3531 refpath = os.path.join(getcwdb(), path) |
25041
09c71e3da704
run-tests: even more bytestring annotations for Python 3
Augie Fackler <augie@google.com>
parents:
25040
diff
changeset
|
3532 tmpdir = os.path.join(self._hgtmp, b'child%d' % count) |
21504
888a5dfe1569
run-tests: pass temp dir into Test.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21502
diff
changeset
|
3533 |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3534 # extra keyword parameters. 'case' is used by .t tests |
44470
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44469
diff
changeset
|
3535 kwds = {k: testdesc[k] for k in ['case'] if k in testdesc} |
32356
7340465bd788
run-tests: support multiple cases in .t test
Jun Wu <quark@fb.com>
parents:
32351
diff
changeset
|
3536 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3537 t = testcls( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3538 refpath, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3539 self._outputdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3540 tmpdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3541 keeptmpdir=self.options.keep_tmpdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3542 debug=self.options.debug, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3543 first=self.options.first, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3544 timeout=self.options.timeout, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3545 startport=self._getport(count), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3546 extraconfigopts=self.options.extra_config_opt, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3547 shell=self.options.shell, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3548 hgcommand=self._hgcommand, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3549 usechg=bool(self.options.with_chg or self.options.chg), |
44619
78a8f65eacc8
run-tests: add --chg-debug flag to show chg debug output
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44586
diff
changeset
|
3550 chgdebug=self.options.chg_debug, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3551 useipv6=useipv6, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3552 **kwds |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3553 ) |
24330
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
3554 t.should_reload = True |
799bc18e14d1
run-tests: avoid running the same test instance concurrently
Augie Fackler <augie@google.com>
parents:
24329
diff
changeset
|
3555 return t |
21357
4c4f64b8df3c
run-tests: move gettest() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21356
diff
changeset
|
3556 |
21366
5047248536c5
run-tests: establish TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21365
diff
changeset
|
3557 def _cleanup(self): |
21350
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3558 """Clean up state from this test invocation.""" |
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3559 if self.options.keep_tmpdir: |
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3560 return |
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3561 |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3562 vlog("# Cleaning up HGTMP", _bytes2sys(self._hgtmp)) |
21534
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3563 shutil.rmtree(self._hgtmp, True) |
21352
39fd89fbbc3c
run-tests: move createdfiles out of a global and into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21351
diff
changeset
|
3564 for f in self._createdfiles: |
21350
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3565 try: |
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3566 os.remove(f) |
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3567 except OSError: |
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3568 pass |
dfcef61f5bd4
run-tests: move cleanup() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21349
diff
changeset
|
3569 |
21378
f7ac3c63d844
run-tests: make some methods of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21377
diff
changeset
|
3570 def _usecorrectpython(self): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3571 """Configure the environment to use the appropriate Python in tests.""" |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3572 # Tests must use the same interpreter as us or bad things will happen. |
47639
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3573 if WINDOWS and PYTHON3: |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3574 pyexe_names = [b'python', b'python3', b'python.exe'] |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3575 elif WINDOWS: |
47505
23f5ed6dbcb1
run-tests: stop writing a `python3` symlink pointing to python2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47503
diff
changeset
|
3576 pyexe_names = [b'python', b'python.exe'] |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
3577 else: |
47639
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3578 pyexe_names = [b'python', b'python3'] |
39663
543a788eea2d
py3: allow run-tests.py to run on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39662
diff
changeset
|
3579 |
543a788eea2d
py3: allow run-tests.py to run on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39662
diff
changeset
|
3580 # os.symlink() is a thing with py3 on Windows, but it requires |
543a788eea2d
py3: allow run-tests.py to run on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39662
diff
changeset
|
3581 # Administrator rights. |
47639
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3582 if not WINDOWS and getattr(os, 'symlink', None): |
47499
81d70de39c7e
run-tests: unroll a non-so-one-liner
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47323
diff
changeset
|
3583 msg = "# Making python executable in test path a symlink to '%s'" |
81d70de39c7e
run-tests: unroll a non-so-one-liner
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47323
diff
changeset
|
3584 msg %= sysexecutable |
81d70de39c7e
run-tests: unroll a non-so-one-liner
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47323
diff
changeset
|
3585 vlog(msg) |
47505
23f5ed6dbcb1
run-tests: stop writing a `python3` symlink pointing to python2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47503
diff
changeset
|
3586 for pyexename in pyexe_names: |
47575
27fb9f32e1a3
run-tests: always define a custom-bin directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47574
diff
changeset
|
3587 mypython = os.path.join(self._custom_bin_dir, pyexename) |
21351
fe5647506565
run-tests: move usecorrectpython() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21350
diff
changeset
|
3588 try: |
47503
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3589 if os.readlink(mypython) == sysexecutable: |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3590 continue |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3591 os.unlink(mypython) |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3592 except OSError as err: |
47503
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3593 if err.errno != errno.ENOENT: |
21351
fe5647506565
run-tests: move usecorrectpython() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21350
diff
changeset
|
3594 raise |
47503
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3595 if self._findprogram(pyexename) != sysexecutable: |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3596 try: |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3597 os.symlink(sysexecutable, mypython) |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3598 self._createdfiles.append(mypython) |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3599 except OSError as err: |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3600 # child processes may race, which is harmless |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3601 if err.errno != errno.EEXIST: |
9d929f9cb9b4
run-tests: avoid an early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47502
diff
changeset
|
3602 raise |
47639
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3603 elif WINDOWS and not os.getenv('MSYSTEM'): |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3604 raise AssertionError('cannot run test on Windows without MSYSTEM') |
21351
fe5647506565
run-tests: move usecorrectpython() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21350
diff
changeset
|
3605 else: |
47639
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3606 # Generate explicit file instead of symlink |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3607 # |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3608 # This is especially important as Windows doesn't have |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3609 # `python3.exe`, and MSYS cannot understand the reparse point with |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3610 # that name provided by Microsoft. Create a simple script on PATH |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3611 # with that name that delegates to the py3 launcher so the shebang |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3612 # lines work. |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3613 esc_executable = _sys2bytes(shellquote(sysexecutable)) |
47505
23f5ed6dbcb1
run-tests: stop writing a `python3` symlink pointing to python2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47503
diff
changeset
|
3614 for pyexename in pyexe_names: |
47639
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3615 stub_exec_path = os.path.join(self._custom_bin_dir, pyexename) |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3616 with open(stub_exec_path, 'wb') as f: |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3617 f.write(b'#!/bin/sh\n') |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3618 f.write(b'%s "$@"\n' % esc_executable) |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3619 |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3620 if WINDOWS: |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3621 if not PYTHON3: |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3622 # lets try to build a valid python3 executable for the |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3623 # scrip that requires it. |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3624 py3exe_name = os.path.join(self._custom_bin_dir, b'python3') |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3625 with open(py3exe_name, 'wb') as f: |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3626 f.write(b'#!/bin/sh\n') |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3627 f.write(b'py -3 "$@"\n') |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3628 |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3629 # adjust the path to make sur the main python finds it own dll |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3630 path = os.environ['PATH'].split(os.pathsep) |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3631 main_exec_dir = os.path.dirname(sysexecutable) |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3632 extra_paths = [_bytes2sys(self._custom_bin_dir), main_exec_dir] |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3633 |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3634 # Binaries installed by pip into the user area like pylint.exe may |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3635 # not be in PATH by default. |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3636 appdata = os.environ.get('APPDATA') |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3637 vi = sys.version_info |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3638 if appdata is not None: |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3639 python_dir = 'Python%d%d' % (vi[0], vi[1]) |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3640 scripts_path = [appdata, 'Python', python_dir, 'Scripts'] |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3641 if not PYTHON3: |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3642 scripts_path = [appdata, 'Python', 'Scripts'] |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3643 scripts_dir = os.path.join(*scripts_path) |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3644 extra_paths.append(scripts_dir) |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3645 |
e1130abae834
run-test: rework the redirection script for python on windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47638
diff
changeset
|
3646 os.environ['PATH'] = os.pathsep.join(extra_paths + path) |
21351
fe5647506565
run-tests: move usecorrectpython() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21350
diff
changeset
|
3647 |
47588
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3648 def _use_correct_mercurial(self): |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3649 target_exec = os.path.join(self._custom_bin_dir, b'hg') |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3650 if self._hgcommand != b'hg': |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3651 # shutil.which only accept bytes from 3.8 |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3652 real_exec = which(self._hgcommand) |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3653 if real_exec is None: |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3654 raise ValueError('could not find exec path for "%s"', real_exec) |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3655 if real_exec == target_exec: |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3656 # do not overwrite something with itself |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3657 return |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3658 if WINDOWS: |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3659 with open(target_exec, 'wb') as f: |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3660 f.write(b'#!/bin/sh\n') |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3661 escaped_exec = shellquote(_bytes2sys(real_exec)) |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3662 f.write(b'%s "$@"\n' % _sys2bytes(escaped_exec)) |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3663 else: |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3664 os.symlink(real_exec, target_exec) |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3665 self._createdfiles.append(target_exec) |
eb611ecb435c
run-tests: rely on an actual executable in PATH instead of alias for `hg`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47586
diff
changeset
|
3666 |
21378
f7ac3c63d844
run-tests: make some methods of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21377
diff
changeset
|
3667 def _installhg(self): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3668 """Install hg into the test environment. |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3669 |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3670 This will also configure hg with the appropriate testing settings. |
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3671 """ |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3672 vlog("# Performing temporary installation of HG") |
28829
65fb87479792
run-tests: move install.err into test area
timeless <timeless@mozdev.org>
parents:
28823
diff
changeset
|
3673 installerrs = os.path.join(self._hgtmp, b"install.err") |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3674 compiler = '' |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3675 if self.options.compiler: |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3676 compiler = '--compiler ' + self.options.compiler |
44500
0d9ad84a28d9
run-tests: rename "pure" variable to setup_opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44488
diff
changeset
|
3677 setup_opts = b"" |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
24075
diff
changeset
|
3678 if self.options.pure: |
44500
0d9ad84a28d9
run-tests: rename "pure" variable to setup_opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44488
diff
changeset
|
3679 setup_opts = b"--pure" |
44501
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3680 elif self.options.rust: |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3681 setup_opts = b"--rust" |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3682 elif self.options.no_rust: |
9183b7dcfa8d
run-tests: add option for running with and without Rust extensions
Raphaël Gomès <rgomes@octobus.net>
parents:
44500
diff
changeset
|
3683 setup_opts = b"--no-rust" |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3684 |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3685 # Run installer in hg root |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3686 script = os.path.realpath(sys.argv[0]) |
42530
49998d5ba66a
pycompat: make fewer assumptions about sys.executable
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
42520
diff
changeset
|
3687 exe = sysexecutable |
25159
138dc8381049
run-tests: move all open-coded sys.version_info checks to PYTHON3 (issue4668)
Augie Fackler <augie@google.com>
parents:
25158
diff
changeset
|
3688 if PYTHON3: |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3689 compiler = _sys2bytes(compiler) |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3690 script = _sys2bytes(script) |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3691 exe = _sys2bytes(exe) |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3692 hgroot = os.path.dirname(os.path.dirname(script)) |
24506
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
3693 self._hgroot = hgroot |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3694 os.chdir(hgroot) |
25044
9de94acfde8a
run-tests: fix installation of hg by bytesifying more constants
Augie Fackler <augie@google.com>
parents:
25042
diff
changeset
|
3695 nohome = b'--home=""' |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
3696 if WINDOWS: |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3697 # The --home="" trick works only on OS where os.sep == '/' |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3698 # because of a distutils convert_path() fast-path. Avoid it at |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3699 # least on Windows for now, deal with .pydistutils.cfg bugs |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3700 # when they happen. |
25044
9de94acfde8a
run-tests: fix installation of hg by bytesifying more constants
Augie Fackler <augie@google.com>
parents:
25042
diff
changeset
|
3701 nohome = b'' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3702 cmd = ( |
44500
0d9ad84a28d9
run-tests: rename "pure" variable to setup_opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44488
diff
changeset
|
3703 b'"%(exe)s" setup.py %(setup_opts)s clean --all' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3704 b' build %(compiler)s --build-base="%(base)s"' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3705 b' install --force --prefix="%(prefix)s"' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3706 b' --install-lib="%(libdir)s"' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3707 b' --install-scripts="%(bindir)s" %(nohome)s >%(logfile)s 2>&1' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3708 % { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3709 b'exe': exe, |
44500
0d9ad84a28d9
run-tests: rename "pure" variable to setup_opts
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44488
diff
changeset
|
3710 b'setup_opts': setup_opts, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3711 b'compiler': compiler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3712 b'base': os.path.join(self._hgtmp, b"build"), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3713 b'prefix': self._installdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3714 b'libdir': self._pythondir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3715 b'bindir': self._bindir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3716 b'nohome': nohome, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3717 b'logfile': installerrs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3718 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3719 ) |
24075
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3720 |
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3721 # setuptools requires install directories to exist. |
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3722 def makedirs(p): |
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3723 try: |
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3724 os.makedirs(p) |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3725 except OSError as e: |
24075
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3726 if e.errno != errno.EEXIST: |
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3727 raise |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3728 |
24075
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3729 makedirs(self._pythondir) |
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3730 makedirs(self._bindir) |
4bf484276787
run-tests: ensure install directories exist
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24074
diff
changeset
|
3731 |
43309
b4b1131187c4
py3: decode bytes before logging in run-tests.py
Denis Laxalde <denis@laxalde.org>
parents:
43283
diff
changeset
|
3732 vlog("# Running", cmd.decode("utf-8")) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3733 if subprocess.call(_bytes2sys(cmd), shell=True) == 0: |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3734 if not self.options.verbose: |
26087
06cd67a5044f
run-tests: ignore failed removal of nonexistent installerrs
Augie Fackler <augie@google.com>
parents:
25730
diff
changeset
|
3735 try: |
06cd67a5044f
run-tests: ignore failed removal of nonexistent installerrs
Augie Fackler <augie@google.com>
parents:
25730
diff
changeset
|
3736 os.remove(installerrs) |
06cd67a5044f
run-tests: ignore failed removal of nonexistent installerrs
Augie Fackler <augie@google.com>
parents:
25730
diff
changeset
|
3737 except OSError as e: |
06cd67a5044f
run-tests: ignore failed removal of nonexistent installerrs
Augie Fackler <augie@google.com>
parents:
25730
diff
changeset
|
3738 if e.errno != errno.ENOENT: |
06cd67a5044f
run-tests: ignore failed removal of nonexistent installerrs
Augie Fackler <augie@google.com>
parents:
25730
diff
changeset
|
3739 raise |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3740 else: |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
3741 with open(installerrs, 'rb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
3742 for line in f: |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
3743 sys.stdout.buffer.write(line) |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3744 sys.exit(1) |
21534
3ece55d16044
run-tests: make attributes of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21533
diff
changeset
|
3745 os.chdir(self._testdir) |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3746 |
25044
9de94acfde8a
run-tests: fix installation of hg by bytesifying more constants
Augie Fackler <augie@google.com>
parents:
25042
diff
changeset
|
3747 hgbat = os.path.join(self._bindir, b'hg.bat') |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3748 if os.path.isfile(hgbat): |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3749 # hg.bat expects to be put in bin/scripts while run-tests.py |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3750 # installation layout put it in bin/ directly. Fix it |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
3751 with open(hgbat, 'rb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
3752 data = f.read() |
41554
17a6e063c886
run-tests: use raw strings for regular expressions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41509
diff
changeset
|
3753 if br'"%~dp0..\python" "%~dp0hg" %*' in data: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3754 data = data.replace( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3755 br'"%~dp0..\python" "%~dp0hg" %*', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3756 b'"%~dp0python" "%~dp0hg" %*', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3757 ) |
35454
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
3758 with open(hgbat, 'wb') as f: |
e31773898197
run-tests: use context managers for file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
35453
diff
changeset
|
3759 f.write(data) |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3760 else: |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3761 print('WARNING: cannot fix hg.bat reference to python.exe') |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3762 |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3763 if self.options.anycoverage: |
43283
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3764 custom = os.path.join( |
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3765 osenvironb[b'RUNTESTDIR'], b'sitecustomize.py' |
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3766 ) |
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3767 target = os.path.join(self._pythondir, b'sitecustomize.py') |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3768 vlog('# Installing coverage trigger to %s' % target) |
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3769 shutil.copyfile(custom, target) |
43283
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3770 rc = os.path.join(self._testdir, b'.coveragerc') |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3771 vlog('# Installing coverage rc to %s' % rc) |
43283
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3772 osenvironb[b'COVERAGE_PROCESS_START'] = rc |
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3773 covdir = os.path.join(self._installdir, b'..', b'coverage') |
24505
031947baf4d0
run-tests: collect aggregate code coverage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24504
diff
changeset
|
3774 try: |
031947baf4d0
run-tests: collect aggregate code coverage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24504
diff
changeset
|
3775 os.mkdir(covdir) |
25031
0adc22a0b6b3
python3: update killdaemons and run-tests print and exception syntax
Augie Fackler <augie@google.com>
parents:
24984
diff
changeset
|
3776 except OSError as e: |
24505
031947baf4d0
run-tests: collect aggregate code coverage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24504
diff
changeset
|
3777 if e.errno != errno.EEXIST: |
031947baf4d0
run-tests: collect aggregate code coverage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24504
diff
changeset
|
3778 raise |
031947baf4d0
run-tests: collect aggregate code coverage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24504
diff
changeset
|
3779 |
43283
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3780 osenvironb[b'COVERAGE_DIR'] = covdir |
21353
a42a5195a182
run-tests: move installhg() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21352
diff
changeset
|
3781 |
21378
f7ac3c63d844
run-tests: make some methods of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21377
diff
changeset
|
3782 def _checkhglib(self, verb): |
21354
29629ef43d39
run-tests: move checkhglib into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21353
diff
changeset
|
3783 """Ensure that the 'mercurial' package imported by python is |
29629ef43d39
run-tests: move checkhglib into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21353
diff
changeset
|
3784 the one we expect it to be. If not, print a warning to stderr.""" |
47574
2b2f5cf979c3
run-tests: explicitly track that `pythondir` was inferred
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47573
diff
changeset
|
3785 if self._pythondir_inferred: |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23077
diff
changeset
|
3786 # The pythondir has been inferred from --with-hg flag. |
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
23077
diff
changeset
|
3787 # We cannot expect anything sensible here. |
21733
9ad11d5bcc2f
run-tests: don't check for the mercurial library used when using --with-hg
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21614
diff
changeset
|
3788 return |
25044
9de94acfde8a
run-tests: fix installation of hg by bytesifying more constants
Augie Fackler <augie@google.com>
parents:
25042
diff
changeset
|
3789 expecthg = os.path.join(self._pythondir, b'mercurial') |
21385
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3790 actualhg = self._gethgpath() |
21354
29629ef43d39
run-tests: move checkhglib into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21353
diff
changeset
|
3791 if os.path.abspath(actualhg) != os.path.abspath(expecthg): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3792 sys.stderr.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3793 'warning: %s with unexpected mercurial lib: %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3794 ' (expected %s)\n' % (verb, actualhg, expecthg) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3795 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3796 |
21385
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3797 def _gethgpath(self): |
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3798 """Return the path to the mercurial package that is actually found by |
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3799 the current Python interpreter.""" |
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3800 if self._hgpath is not None: |
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3801 return self._hgpath |
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3802 |
40947
fcdff048a8e5
py3: teach run-tests.py to handle exe with spaces when --local isn't specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
40541
diff
changeset
|
3803 cmd = b'"%s" -c "import mercurial; print (mercurial.__path__[0])"' |
25058
caa2043cc322
run-tests: unblock running python tests in python 3
Augie Fackler <augie@google.com>
parents:
25057
diff
changeset
|
3804 cmd = cmd % PYTHON |
25159
138dc8381049
run-tests: move all open-coded sys.version_info checks to PYTHON3 (issue4668)
Augie Fackler <augie@google.com>
parents:
25158
diff
changeset
|
3805 if PYTHON3: |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3806 cmd = _bytes2sys(cmd) |
40947
fcdff048a8e5
py3: teach run-tests.py to handle exe with spaces when --local isn't specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
40541
diff
changeset
|
3807 |
fcdff048a8e5
py3: teach run-tests.py to handle exe with spaces when --local isn't specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
40541
diff
changeset
|
3808 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) |
fcdff048a8e5
py3: teach run-tests.py to handle exe with spaces when --local isn't specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
40541
diff
changeset
|
3809 out, err = p.communicate() |
fcdff048a8e5
py3: teach run-tests.py to handle exe with spaces when --local isn't specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
40541
diff
changeset
|
3810 |
fcdff048a8e5
py3: teach run-tests.py to handle exe with spaces when --local isn't specified
Matt Harbison <matt_harbison@yahoo.com>
parents:
40541
diff
changeset
|
3811 self._hgpath = out.strip() |
21385
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3812 |
28414e5ac9ec
run-tests: move _gethgpath() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21384
diff
changeset
|
3813 return self._hgpath |
21354
29629ef43d39
run-tests: move checkhglib into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21353
diff
changeset
|
3814 |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3815 def _installchg(self): |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3816 """Install chg into the test environment""" |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3817 vlog('# Performing temporary installation of CHG') |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3818 assert os.path.dirname(self._bindir) == self._installdir |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3819 assert self._hgroot, 'must be called after _installhg()' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3820 cmd = b'"%(make)s" clean install PREFIX="%(prefix)s"' % { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3821 b'make': b'make', # TODO: switch by option or environment? |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3822 b'prefix': self._installdir, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3823 } |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3824 cwd = os.path.join(self._hgroot, b'contrib', b'chg') |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3825 vlog("# Running", cmd) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3826 proc = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3827 cmd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3828 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3829 cwd=cwd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3830 stdin=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3831 stdout=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3832 stderr=subprocess.STDOUT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3833 ) |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3834 out, _err = proc.communicate() |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3835 if proc.returncode != 0: |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
3836 sys.stdout.buffer.write(out) |
28143
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3837 sys.exit(1) |
c754996fd41f
run-tests: add --chg option to install and run tests using chg
Yuya Nishihara <yuya@tcha.org>
parents:
28142
diff
changeset
|
3838 |
46767
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3839 def _installrhg(self): |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3840 """Install rhg into the test environment""" |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3841 vlog('# Performing temporary installation of rhg') |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3842 assert os.path.dirname(self._bindir) == self._installdir |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3843 assert self._hgroot, 'must be called after _installhg()' |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3844 cmd = b'"%(make)s" install-rhg PREFIX="%(prefix)s"' % { |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3845 b'make': b'make', # TODO: switch by option or environment? |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3846 b'prefix': self._installdir, |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3847 } |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3848 cwd = self._hgroot |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3849 vlog("# Running", cmd) |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3850 proc = subprocess.Popen( |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3851 cmd, |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3852 shell=True, |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3853 cwd=cwd, |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3854 stdin=subprocess.PIPE, |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3855 stdout=subprocess.PIPE, |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3856 stderr=subprocess.STDOUT, |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3857 ) |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3858 out, _err = proc.communicate() |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3859 if proc.returncode != 0: |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
3860 sys.stdout.buffer.write(out) |
46767
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3861 sys.exit(1) |
9ba00a9dc6ea
run-test: install rhg if --rhg is passed
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46737
diff
changeset
|
3862 |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3863 def _build_pyoxidized(self): |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3864 """build a pyoxidized version of mercurial into the test environment |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3865 |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3866 Ideally this function would be `install_pyoxidier` and would both build |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3867 and install pyoxidier. However we are starting small to get pyoxidizer |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3868 build binary to testing quickly. |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3869 """ |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3870 vlog('# build a pyoxidized version of Mercurial') |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3871 assert os.path.dirname(self._bindir) == self._installdir |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3872 assert self._hgroot, 'must be called after _installhg()' |
47829
d3f890e04525
pyoxidized: add a dedicated target in the tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47826
diff
changeset
|
3873 cmd = b'"%(make)s" pyoxidizer-windows-tests' % { |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3874 b'make': b'make', |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3875 } |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3876 cwd = self._hgroot |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3877 vlog("# Running", cmd) |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3878 proc = subprocess.Popen( |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3879 _bytes2sys(cmd), |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3880 shell=True, |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3881 cwd=_bytes2sys(cwd), |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3882 stdin=subprocess.PIPE, |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3883 stdout=subprocess.PIPE, |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3884 stderr=subprocess.STDOUT, |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3885 ) |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3886 out, _err = proc.communicate() |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3887 if proc.returncode != 0: |
48948
41c552a20716
tests: collapse some more trivial if PYTHON3 blocks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48947
diff
changeset
|
3888 sys.stdout.buffer.write(out) |
47821
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3889 sys.exit(1) |
83235fb50e1c
run-tests: introduce a --pyoxidized option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47775
diff
changeset
|
3890 |
21378
f7ac3c63d844
run-tests: make some methods of TestRunner internal
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21377
diff
changeset
|
3891 def _outputcoverage(self): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3892 """Produce code coverage output.""" |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
3893 import coverage |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3894 |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29282
diff
changeset
|
3895 coverage = coverage.coverage |
21356
f96d7dfd8cb5
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21355
diff
changeset
|
3896 |
24504
7046ecabd9a8
run-tests: obtain code coverage via Python API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24500
diff
changeset
|
3897 vlog('# Producing coverage report') |
7046ecabd9a8
run-tests: obtain code coverage via Python API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24500
diff
changeset
|
3898 # chdir is the easiest way to get short, relative paths in the |
7046ecabd9a8
run-tests: obtain code coverage via Python API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24500
diff
changeset
|
3899 # output. |
24506
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
3900 os.chdir(self._hgroot) |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3901 covdir = os.path.join(_bytes2sys(self._installdir), '..', 'coverage') |
24505
031947baf4d0
run-tests: collect aggregate code coverage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24504
diff
changeset
|
3902 cov = coverage(data_file=os.path.join(covdir, 'cov')) |
24506
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
3903 |
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
3904 # Map install directory paths back to source directory. |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3905 cov.config.paths['srcdir'] = ['.', _bytes2sys(self._pythondir)] |
24506
60bbb4079c28
run-tests: report code coverage from source directory
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24505
diff
changeset
|
3906 |
24505
031947baf4d0
run-tests: collect aggregate code coverage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24504
diff
changeset
|
3907 cov.combine() |
21356
f96d7dfd8cb5
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21355
diff
changeset
|
3908 |
43283
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3909 omit = [ |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3910 _bytes2sys(os.path.join(x, b'*')) |
43283
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3911 for x in [self._bindir, self._testdir] |
96eb9ef777a8
run-tests: make code coverage work on Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
3912 ] |
24504
7046ecabd9a8
run-tests: obtain code coverage via Python API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24500
diff
changeset
|
3913 cov.report(ignore_errors=True, omit=omit) |
7046ecabd9a8
run-tests: obtain code coverage via Python API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24500
diff
changeset
|
3914 |
21356
f96d7dfd8cb5
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21355
diff
changeset
|
3915 if self.options.htmlcov: |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3916 htmldir = os.path.join(_bytes2sys(self._outputdir), 'htmlcov') |
24504
7046ecabd9a8
run-tests: obtain code coverage via Python API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24500
diff
changeset
|
3917 cov.html_report(directory=htmldir, omit=omit) |
21356
f96d7dfd8cb5
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21355
diff
changeset
|
3918 if self.options.annotate: |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3919 adir = os.path.join(_bytes2sys(self._outputdir), 'annotated') |
21356
f96d7dfd8cb5
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21355
diff
changeset
|
3920 if not os.path.isdir(adir): |
f96d7dfd8cb5
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21355
diff
changeset
|
3921 os.mkdir(adir) |
24504
7046ecabd9a8
run-tests: obtain code coverage via Python API
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24500
diff
changeset
|
3922 cov.annotate(directory=adir, omit=omit) |
21356
f96d7dfd8cb5
run-tests: move outputcoverage() into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21355
diff
changeset
|
3923 |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3924 def _findprogram(self, program): |
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3925 """Search PATH for a executable program""" |
44468
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3926 dpb = _sys2bytes(os.defpath) |
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44467
diff
changeset
|
3927 sepb = _sys2bytes(os.pathsep) |
25038
66da89457c47
run-tests: fix _findprogram to reliably return bytes
Augie Fackler <augie@google.com>
parents:
25037
diff
changeset
|
3928 for p in osenvironb.get(b'PATH', dpb).split(sepb): |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3929 name = os.path.join(p, program) |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
3930 if WINDOWS or os.access(name, os.X_OK): |
44839
383005aa9cdc
run-tests: find python binary on Python 3 (issue6361)
Axel Hecht <axel@pike.org>
parents:
44828
diff
changeset
|
3931 return _bytes2sys(name) |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3932 return None |
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3933 |
21374
592b3d2616d7
run-tests: move checktools into TestRunner.run()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21373
diff
changeset
|
3934 def _checktools(self): |
21536
92a6b16c9186
run-tests: add docstrings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21535
diff
changeset
|
3935 """Ensure tools required to run tests are present.""" |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3936 for p in self.REQUIREDTOOLS: |
47573
75b623801f6a
run-tests: use a global WINDOWS constant instead of multiple tests
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47571
diff
changeset
|
3937 if WINDOWS and not p.endswith(b'.exe'): |
39605
4eb0f2452ad7
py3: add b'' to some run-tests.py strings for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39430
diff
changeset
|
3938 p += b'.exe' |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3939 found = self._findprogram(p) |
43309
b4b1131187c4
py3: decode bytes before logging in run-tests.py
Denis Laxalde <denis@laxalde.org>
parents:
43283
diff
changeset
|
3940 p = p.decode("utf-8") |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3941 if found: |
44839
383005aa9cdc
run-tests: find python binary on Python 3 (issue6361)
Axel Hecht <axel@pike.org>
parents:
44828
diff
changeset
|
3942 vlog("# Found prerequisite", p, "at", found) |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3943 else: |
43309
b4b1131187c4
py3: decode bytes before logging in run-tests.py
Denis Laxalde <denis@laxalde.org>
parents:
43283
diff
changeset
|
3944 print("WARNING: Did not find prerequisite tool: %s " % p) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3945 |
21365
10cf9054d941
run-tests: move program searching into TestRunner
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21364
diff
changeset
|
3946 |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3947 def aggregateexceptions(path): |
36075
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3948 exceptioncounts = collections.Counter() |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3949 testsbyfailure = collections.defaultdict(set) |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3950 failuresbytest = collections.defaultdict(set) |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3951 |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3952 for f in os.listdir(path): |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3953 with open(os.path.join(path, f), 'rb') as fh: |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3954 data = fh.read().split(b'\0') |
36075
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3955 if len(data) != 5: |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3956 continue |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3957 |
36075
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3958 exc, mainframe, hgframe, hgline, testname = data |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3959 exc = exc.decode('utf-8') |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3960 mainframe = mainframe.decode('utf-8') |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3961 hgframe = hgframe.decode('utf-8') |
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
3962 hgline = hgline.decode('utf-8') |
36075
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3963 testname = testname.decode('utf-8') |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3964 |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3965 key = (hgframe, hgline, exc) |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3966 exceptioncounts[key] += 1 |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3967 testsbyfailure[key].add(testname) |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3968 failuresbytest[testname].add(key) |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3969 |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3970 # Find test having fewest failures for each failure. |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3971 leastfailing = {} |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3972 for key, tests in testsbyfailure.items(): |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3973 fewesttest = None |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3974 fewestcount = 99999999 |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3975 for test in sorted(tests): |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3976 if len(failuresbytest[test]) < fewestcount: |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3977 fewesttest = test |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3978 fewestcount = len(failuresbytest[test]) |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3979 |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3980 leastfailing[key] = (fewestcount, fewesttest) |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3981 |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3982 # Create a combined counter so we can sort by total occurrences and |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3983 # impacted tests. |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3984 combined = {} |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3985 for key in exceptioncounts: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3986 combined[key] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3987 exceptioncounts[key], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3988 len(testsbyfailure[key]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3989 leastfailing[key][0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3990 leastfailing[key][1], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
3991 ) |
36075
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3992 |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3993 return { |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3994 'exceptioncounts': exceptioncounts, |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3995 'total': sum(exceptioncounts.values()), |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3996 'combined': combined, |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3997 'leastfailing': leastfailing, |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3998 'byfailure': testsbyfailure, |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
3999 'bytest': failuresbytest, |
8de90e006c78
run-tests: report tests that exception occurred in
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36030
diff
changeset
|
4000 } |
35201
bd8875b6473c
run-tests: mechanism to report exceptions during test execution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35200
diff
changeset
|
4001 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
4002 |
13347
ce07defe7d9f
run-tests: loadable as module
Simon Heimberg <simohe@besonet.ch>
parents:
13031
diff
changeset
|
4003 if __name__ == '__main__': |
47638
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4004 if WINDOWS and not os.getenv('MSYSTEM'): |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4005 print('cannot run test on Windows without MSYSTEM', file=sys.stderr) |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4006 print( |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4007 '(if you need to do so contact the mercurial devs: ' |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4008 'mercurial@mercurial-scm.org)', |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4009 file=sys.stderr, |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4010 ) |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4011 sys.exit(255) |
55a715c36e3b
run-test: act that we requires MSYS to run the test on Windows
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47619
diff
changeset
|
4012 |
21377
71081f7f9e52
run-tests: eliminate main()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21376
diff
changeset
|
4013 runner = TestRunner() |
22120
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4014 |
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4015 try: |
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4016 import msvcrt |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43073
diff
changeset
|
4017 |
22120
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4018 msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) |
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4019 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) |
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4020 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) |
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4021 except ImportError: |
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4022 pass |
68a7ef4311ce
run-tests: self-test on Windows needs binary streams
Matt Mackall <mpm@selenic.com>
parents:
21919
diff
changeset
|
4023 |
21377
71081f7f9e52
run-tests: eliminate main()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21376
diff
changeset
|
4024 sys.exit(runner.run(sys.argv[1:])) |