aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/snippets/test-verbose.md6
-rw-r--r--docs/yaml/functions/benchmark.yaml8
-rw-r--r--docs/yaml/functions/test.yaml7
-rw-r--r--mesonbuild/backend/backends.py2
-rw-r--r--mesonbuild/interpreter/interpreter.py4
-rw-r--r--mesonbuild/interpreter/interpreterobjects.py3
6 files changed, 27 insertions, 3 deletions
diff --git a/docs/markdown/snippets/test-verbose.md b/docs/markdown/snippets/test-verbose.md
new file mode 100644
index 0000000..6d9aa0f
--- /dev/null
+++ b/docs/markdown/snippets/test-verbose.md
@@ -0,0 +1,6 @@
+## New keyword argument `verbose` for tests and benchmarks
+
+The new keyword argument `verbose` can be used to mark tests and benchmarks
+that must always be logged verbosely on the console. This is particularly
+useful for long-running tests, or when a single Meson test() is wrapping
+an external test harness.
diff --git a/docs/yaml/functions/benchmark.yaml b/docs/yaml/functions/benchmark.yaml
index da465aa..3082fbe 100644
--- a/docs/yaml/functions/benchmark.yaml
+++ b/docs/yaml/functions/benchmark.yaml
@@ -104,3 +104,11 @@ kwargs:
The starting order of tests with identical priorities is
implementation-defined. The default priority is 0, negative numbers are
permitted.
+
+ verbose:
+ type: bool
+ since: 0.62.0
+ default: false
+ description: |
+ if true, forces the test results to be logged as if `--verbose` was passed
+ to `meson test`.
diff --git a/docs/yaml/functions/test.yaml b/docs/yaml/functions/test.yaml
index 96a2b28..bc9ad03 100644
--- a/docs/yaml/functions/test.yaml
+++ b/docs/yaml/functions/test.yaml
@@ -33,6 +33,13 @@ description: |
test(..., env: nomalloc, ...)
```
+ In addition to running individual executables as test cases, `test()`
+ can also be used to invoke an external test harness. In this case,
+ it is best to use `verbose: true` *(since 0.62.0)* and, if supported
+ by the external harness, `protocol: 'tap'` *(since 0.50.0)*. This will
+ ensure that Meson logs each subtest as it runs, instead of including
+ the whole log at the end of the run.
+
Defined tests can be run in a backend-agnostic way by calling
`meson test` inside the build dir, or by using backend-specific
commands, such as `ninja test` or `msbuild RUN_TESTS.vcxproj`.
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 8729c8e..bc4a02c 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -1150,7 +1150,7 @@ class Backend:
isinstance(exe, build.Executable),
[x.get_id() for x in depends],
self.environment.coredata.version,
- False)
+ t.verbose)
arr.append(ts)
return arr
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index 7681834..c83d09e 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -215,6 +215,7 @@ TEST_KWARGS: T.List[KwargInfo] = [
ENV_KW,
DEPENDS_KW.evolve(since='0.46.0'),
KwargInfo('suite', ContainerTypeInfo(list, str), listify=True, default=['']), # yes, a list of empty string
+ KwargInfo('verbose', bool, default=False, since='0.62.0'),
]
permitted_dependency_kwargs = {
@@ -1972,7 +1973,8 @@ external dependencies (including libraries) must go to "dependencies".''')
kwargs['timeout'],
kwargs['workdir'],
kwargs['protocol'],
- kwargs['priority'])
+ kwargs['priority'],
+ kwargs['verbose'])
def add_test(self, node: mparser.BaseNode, args: T.List, kwargs: T.Dict[str, T.Any], is_base_test: bool):
t = self.make_test(node, args, kwargs)
diff --git a/mesonbuild/interpreter/interpreterobjects.py b/mesonbuild/interpreter/interpreterobjects.py
index 2656f14..9c2481c 100644
--- a/mesonbuild/interpreter/interpreterobjects.py
+++ b/mesonbuild/interpreter/interpreterobjects.py
@@ -636,7 +636,7 @@ class Test(MesonInterpreterObject):
cmd_args: T.List[T.Union[str, mesonlib.File, build.Target]],
env: build.EnvironmentVariables,
should_fail: bool, timeout: int, workdir: T.Optional[str], protocol: str,
- priority: int):
+ priority: int, verbose: bool):
super().__init__()
self.name = name
self.suite = listify(suite)
@@ -651,6 +651,7 @@ class Test(MesonInterpreterObject):
self.workdir = workdir
self.protocol = TestProtocol.from_str(protocol)
self.priority = priority
+ self.verbose = verbose
def get_exe(self) -> T.Union[ExternalProgram, build.Executable, build.CustomTarget]:
return self.exe