116 lines
3.0 KiB
Markdown
116 lines
3.0 KiB
Markdown
# Automated tests
|
|
|
|
TLDR: run `v test-all` locally, after making your changes,
|
|
and before submitting PRs.
|
|
|
|
## Notes
|
|
In the `v` repo there are several different tests. The main types are:
|
|
|
|
* `_test.v` tests - check that `test_` functions succeed. These can be
|
|
run per directory or individually.
|
|
* `.out` tests - run a `.vv` file and check the output matches the
|
|
contents of the `.out` file with the same base name. This is
|
|
particularly useful for checking that errors are printed.
|
|
|
|
Tip: use `v -cc tcc` when compiling tests for speed.
|
|
|
|
## `vlib/v/tests`
|
|
|
|
General runnable tests for different features of the V compiler.
|
|
|
|
* `vlib/v/tests/inout/compiler_test.v`
|
|
|
|
Test output of running a V program matches an expected .out file.
|
|
Check the source for how to test panics.
|
|
|
|
* `vlib/v/gen/c/coutput_test.v`
|
|
|
|
This tests whether the generated C source code matches all expectations,
|
|
specified in *.c.must_have files, in the folder vlib/v/gen/c/testdata/ .
|
|
|
|
Each `.c.must_have` file has to have a corresponding .vv file.
|
|
|
|
Each `.c.must_have` file, consists of multiple lines. Each of these
|
|
lines, *should* be present *at least once* in the output, when the .vv
|
|
file is compiled with `-o -` .
|
|
|
|
* `vlib/v/tests/run_project_folders_test.v`
|
|
Tests whether whole project folders can be compiled, and run.
|
|
NB: Each project in these folders, should finish with exit code 0,
|
|
and it should output `OK` as its last stdout line.
|
|
|
|
## Test building of actual V programs (examples, tools, V itself)
|
|
|
|
* `v build-tools`
|
|
* `v build-examples`
|
|
* `v build-vbinaries`
|
|
|
|
## vfmt tests
|
|
|
|
In `vlib/v/fmt/` there are::
|
|
|
|
* `v vlib/v/fmt/fmt_test.v`
|
|
|
|
This checks `.out` tests.
|
|
|
|
* `v vlib/v/fmt/fmt_keep_test.v`
|
|
|
|
This verifies that `_keep.v` files would be unchanged by `vfmt -w`.
|
|
|
|
* `v vlib/v/fmt/fmt_vlib_test.v`
|
|
|
|
This checks all source files are formatted and prints a summary.
|
|
This is not required.
|
|
|
|
* `v test-fmt`
|
|
|
|
Test all files in the current directory are formatted.
|
|
|
|
## Markdown
|
|
|
|
* `v check-md -hide-warnings .`
|
|
|
|
Ensure that all .md files in the project are formatted properly,
|
|
and that the V code block examples in them can be compiled/formatted too.
|
|
|
|
## `.github/workflows/ci.yml`
|
|
|
|
This runs various CI tests, e.g.:
|
|
|
|
* `v vet vlib/v` - style checker
|
|
* `v fmt -verify` on certain source files
|
|
|
|
## `v test-cleancode`
|
|
|
|
Check that most .v files, are invariant of `v fmt` runs.
|
|
|
|
## `v test-self`
|
|
|
|
Run `vlib` module tests, *including* the compiler tests.
|
|
|
|
## `v vlib/v/compiler_errors_test.v`
|
|
|
|
This runs tests for:
|
|
* `vlib/v/checker/tests/*.vv`
|
|
* `vlib/v/parser/tests/*.vv`
|
|
|
|
### Special folders that compiler_errors_test.v will try to
|
|
run/compile with specific options:
|
|
|
|
vlib/v/checker/tests/globals_run/ - `-enable-globals run`;
|
|
results stored in `.run.out` files, matching the .vv ones.
|
|
|
|
## `v test-all`
|
|
|
|
Test and build *everything*. Usefull to verify *locally*, that the CI will
|
|
most likely pass. Slowest, but most comprehensive.
|
|
|
|
It works, by running these in succession:
|
|
* `v test-cleancode`
|
|
* `v test-self`
|
|
* `v test-fmt`
|
|
* `v build-tools`
|
|
* `v build-examples`
|
|
* `v check-md -hide-warnings .`
|
|
* `v install nedpals.args`
|