blob: d56822e5828aec06786902a735b86e89ab881a7b [file] [log] [blame]
name: test
returns: void
description: |
Defines a test to run with the test harness. Takes two positional
arguments, the first is the name of the test and the second is the
executable to run. The executable can be an [[@exe]] object returned by
[[executable]] or an [[@external_program]] object] returned by
[[find_program]].
*(since 0.55.0)* When cross compiling, if an exe_wrapper is needed and
defined the environment variable `MESON_EXE_WRAPPER` will be set to
the string value of that wrapper (implementation detail: using
`mesonlib.join_args`). Test scripts may use this to run cross built
binaries. If your test needs `MESON_EXE_WRAPPER` in cross build
situations it is your responsibility to return code 77 to tell the
harness to report "skip".
By default, environment variable
[`MALLOC_PERTURB_`](http://man7.org/linux/man-pages/man3/mallopt.3.html)
is automatically set by `meson test` to a random value between 1..255.
This can help find memory leaks on configurations using glibc,
including with non-GCC compilers. However, this can have a performance
impact, and may fail a test due to external libraries whose internals
are out of the user's control. To check if this feature is causing an
expected runtime crash, disable the feature by temporarily setting
environment variable `MALLOC_PERTURB_=0`. While it's preferable to
only temporarily disable this check, if a project requires permanent
disabling of this check in meson.build do like:
```meson
nomalloc = environment({'MALLOC_PERTURB_': '0'})
test(..., env: nomalloc, ...)
```
By default, the environment variables `ASAN_OPTIONS`, `UBSAN_OPTIONS`,
and `MSAN_OPTIONS` are set to enable aborting on detected violations and to
give a backtrace. To suppress this, `ASAN_OPTIONS`, `UBSAN_OPTIONS`, or
`MSAN_OPTIONS` can be set in the environment.
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`.
posargs_inherit: benchmark
kwargs_inherit: benchmark
kwargs:
is_parallel:
type: bool
default: true
description: |
when false, specifies that no other test must be
running at the same time as this test