mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 09:00:22 +00:00
97 lines
3.3 KiB
Markdown
97 lines
3.3 KiB
Markdown
# Running Tests
|
|
|
|
To reproduce a CI failure, see the section on [Running with Sanitizers](#running-with-sanitizers).
|
|
|
|
The simplest way to run tests locally is to use the `default` preset from ``CMakePresets.json``:
|
|
|
|
```sh
|
|
cmake --preset default
|
|
cmake --build --preset default
|
|
ctest --preset default
|
|
```
|
|
|
|
If you want to avoid building and running LibWeb tests, you can use a Lagom-only build.
|
|
|
|
```sh
|
|
cmake -GNinja -S Meta/Lagom -B Build/lagom
|
|
```
|
|
|
|
The tests can be run via ninja after doing a build. Note that `test-js` requires the `LADYBIRD_SOURCE_DIR` environment variable to be set
|
|
to the root of the ladybird source tree.
|
|
|
|
```sh
|
|
# /path/to/ladybird repository
|
|
export LADYBIRD_SOURCE_DIR=${PWD}
|
|
cd Build/lagom
|
|
ninja
|
|
ninja test
|
|
```
|
|
|
|
To see the stdout/stderr output of failing tests, the recommended way is to set the environment variable [`CTEST_OUTPUT_ON_FAILURE`](https://cmake.org/cmake/help/latest/manual/ctest.1.html#options) to 1.
|
|
|
|
```sh
|
|
CTEST_OUTPUT_ON_FAILURE=1 ninja test
|
|
|
|
# or, using ctest directly...
|
|
ctest --output-on-failure
|
|
```
|
|
|
|
# Running with Sanitizers
|
|
|
|
CI runs host tests with Address Sanitizer and Undefined Sanitizer instrumentation enabled. These tools catch many
|
|
classes of common C++ errors, including memory leaks, out of bounds access to stack and heap allocations, and
|
|
signed integer overflow. For more info on the sanitizers, check out the Address Sanitizer [wiki page](https://github.com/google/sanitizers/wiki),
|
|
or the Undefined Sanitizer [documentation](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html) from clang.
|
|
|
|
Note that a sanitizer build will take significantly longer than a non-sanitizer build, and will mess with caches in tools such as `ccache`.
|
|
The sanitizers can be enabled with the `-DENABLE_FOO_SANITIZER` set of flags.
|
|
|
|
The simplest way to enable sanitizers is to use the `Sanitizer` preset.
|
|
|
|
```sh
|
|
cmake --preset Sanitizer
|
|
cmake --build --preset Sanitizer
|
|
ctest --preset Sanitizer
|
|
```
|
|
|
|
Or from a Lagom build:
|
|
|
|
To ensure that the test behaves the same way as CI, make sure to set the ASAN_OPTIONS and UBSAN_OPTIONS appropriately.
|
|
The Sanitizer test preset already sets these environment variables.
|
|
|
|
```sh
|
|
export ASAN_OPTIONS='strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=1:allocator_may_return_null=1'
|
|
export UBSAN_OPTIONS='print_stacktrace=1:print_summary=1:halt_on_error=1'
|
|
cmake -GNinja -S Meta/Lagom -B Build/lagom -DENABLE_ADDRESS_SANITIZER=ON -DENABLE_UNDEFINED_SANITIZER=ON
|
|
cd Build/lagom
|
|
ninja
|
|
CTEST_OUTPUT_ON_FAILURE=1 LADYBIRD_SOURCE_DIR=${PWD}/../.. ninja test
|
|
```
|
|
|
|
# Running the Web Platform Tests
|
|
|
|
The Web Platform Tests can be run with the `WPT.sh` script. This script can also be used to compare the results of two
|
|
test runs.
|
|
|
|
Enabling the Qt chrome is recommended when running the Web Platform Tests on MacOS. This can be done by running the
|
|
following command:
|
|
|
|
```sh
|
|
cmake -GNinja Build/ladybird -DENABLE_QT=ON
|
|
```
|
|
|
|
Example usage:
|
|
|
|
```sh
|
|
# Run the WPT tests then run them again, comparing the results from the two runs
|
|
./Meta/WPT.sh run --log expectations.log css
|
|
git checkout my-css-change
|
|
./Meta/WPT.sh compare --log results.log expectations.log css
|
|
```
|
|
|
|
```sh
|
|
# Pull the latest changes from the upstream WPT repository
|
|
./Meta/WPT.sh update
|
|
# Run all of the Web Platform Tests, outputting the results to results.log
|
|
./Meta/WPT.sh run --log results.log
|
|
```
|