mte/unikernel/duniverse/dune_/test/blackbox-tests/test-cases/runtest-cmd.t
2025-11-11 02:07:51 +01:00

189 lines
5.8 KiB
Perl

Here we test the features of the `dune runtest` command.
$ cat > dune-project <<EOF
> (lang dune 3.16)
> EOF
$ cat > mytest.t <<EOF
> $ echo "Hello, world!"
> "Goodbye, world!"
> EOF
$ mkdir -p tests/myothertest.t
$ echo 'Hello, world!' > tests/myothertest.t/hello.world
$ cat > tests/myothertest.t/run.t <<EOF
> $ cat hello.world
> "Goodbye, world!"
> EOF
$ cat > tests/filetest.t <<EOF
> $ echo "Hello, world!"
> "Goodbye, world!"
> EOF
This should work:
$ dune test tests/myothertest.t
File "tests/myothertest.t/run.t", line 1, characters 0-0:
Error: Files _build/default/tests/myothertest.t/run.t and
_build/default/tests/myothertest.t/run.t.corrected differ.
[1]
There is no diff produced because the test passes
$ dune promotion diff tests/myothertest.t/run.t
This should not work
$ dune test myotherttest.t
Error: "myotherttest.t" does not match any known test.
[1]
This is a bug. Running the test this way does not correctly include the
dependencies.
$ dune test tests/myothertest.t/run.t
File "tests/myothertest.t/run.t", line 1, characters 0-0:
Error: Files _build/default/tests/myothertest.t/run.t and
_build/default/tests/myothertest.t/run.t.corrected differ.
[1]
$ dune promotion diff tests/myothertest.t/run.t
$ cat _build/.promotion-staging/tests/myothertest.t/run.t
$ cat hello.world
cat: hello.world: No such file or directory
[1]
"Goodbye, world!"
Passing no arguments to $ dune runtest should be equivalent to $ dune build
@runtest.
$ dune test 2>&1 | grep "^File"
File "mytest.t", line 1, characters 0-0:
File "tests/filetest.t", line 1, characters 0-0:
File "tests/myothertest.t/run.t", line 1, characters 0-0:
Passing the name of a test should only run that test.
$ dune test mytest.t 2>&1 | grep "^File"
File "mytest.t", line 1, characters 0-0:
$ dune test tests/myothertest.t 2>&1 | grep "^File"
File "tests/myothertest.t/run.t", line 1, characters 0-0:
Passing a directory should run all the tests in that directory (recursively).
- The current working directory:
$ dune test . 2>&1 | grep "^File"
File "mytest.t", line 1, characters 0-0:
File "tests/filetest.t", line 1, characters 0-0:
File "tests/myothertest.t/run.t", line 1, characters 0-0:
- The tests/ subdirectory:
$ dune test tests/ 2>&1 | grep "^File"
File "tests/filetest.t", line 1, characters 0-0:
File "tests/myothertest.t/run.t", line 1, characters 0-0:
- We can also build in _build/ directories:
$ dune test _build/default 2>&1 | grep "^File"
File "mytest.t", line 1, characters 0-0:
File "tests/filetest.t", line 1, characters 0-0:
File "tests/myothertest.t/run.t", line 1, characters 0-0:
$ dune test _build/default/tests 2>&1 | grep "^File"
File "tests/filetest.t", line 1, characters 0-0:
File "tests/myothertest.t/run.t", line 1, characters 0-0:
- We can build in absolute paths:
$ dune test $PWD/mytest.t
File "mytest.t", line 1, characters 0-0:
Error: Files _build/default/mytest.t and _build/default/mytest.t.corrected
differ.
[1]
$ dune test $PWD/_build/default/mytest.t
File "mytest.t", line 1, characters 0-0:
Error: Files _build/default/mytest.t and _build/default/mytest.t.corrected
differ.
[1]
Here we test some error cases a user may encounter and make sure the error
messages are informative enough.
- Giving a path outside the workspace gives an informative error:
$ dune test ..
Error: path outside the workspace: .. from .
[1]
- Giving a nonexistent path gives an informative error:
$ dune test nonexistent
Error: "nonexistent" does not match any known test.
[1]
$ dune test tests/non
Error: "tests/non" does not match any known test.
[1]
- Passing the _build directory on its own is an error.
$ dune test _build
Error: This path is internal to dune: _build
[1]
- Typos are caught and aided with hints:
$ dune test mytest1.t
Error: "mytest1.t" does not match any known test.
Hint: did you mean mytest.t?
[1]
- Running a non-test file should give a suitable error message
$ dune test dune-project
Error: "dune-project" does not match any known test.
[1]
- Typos of diretories are also caught and aided:
$ dune test tests/myothertest1.t
Error: "tests/myothertest1.t" does not match any known test.
Hint: did you mean tests/myothertest.t?
[1]
$ dune test testt/
Error: "testt" does not match any known test.
Hint: did you mean tests?
[1]
- Note that this does not handle the case where the path is mostly correct but
the directory is mispelled.
$ dune test testss/myothertest.t
Error: "testss/myothertest.t" does not match any known test.
[1]
- Private _build/ paths should be rejected.
$ dune test _build/_private
Error: This path is internal to dune: _build/_private
[1]
- Install paths should be rejected.
$ dune test _build/install/default
Error: This path is internal to dune: _build/install/default
[1]
- Absolute paths that are invalid are rejected clearly:
$ dune test $PWD/..
Error: path outside the workspace: .. from .
[1]
$ dune test /a/b/c/
Error: This path is outside the workspace: /a/b/c/
[1]
Here we test behavour for running tests in specific contexts.
$ cat > dune-workspace <<EOF
> (lang dune 3.20)
> (context (default))
> (context (default (name alt)))
> EOF
- Building a specific test now will run them in both contexts.
$ dune test mytest.t
File "mytest.t", line 1, characters 0-0:
Error: Files _build/alt/mytest.t and _build/alt/mytest.t.corrected differ.
File "mytest.t", line 1, characters 0-0:
Error: Files _build/default/mytest.t and _build/default/mytest.t.corrected
differ.
[1]
- Building a specific test in a specific build directory will build only in
that context as expected.
$ dune test _build/alt/mytest.t
File "mytest.t", line 1, characters 0-0:
Error: Files _build/alt/mytest.t and _build/alt/mytest.t.corrected differ.
[1]