catala/build_system/dune
Louis Gesbert 45b0feaf20
Generate tests reports from 'clerk test'
This is a proper replacement for the previous shell-based placeholder hack.

Here is a summary:

- `clerk runtest` (normally run by ninja) is much extended:
  * besides generating the test@out file, it checks individual tests for success
    and can write a report file containing their status, and the positions for
    their (expected/current) outputs (this uses `Marshal`)
  * it now handles out-tests directly in addition to inline-tests, for which
    it generates the separate output file ; they are included in the report

- ninja is now tasked with building all the test reports (which shouldn't fail);
  for directories, individual reports are concatenated (as before).
  Removing intermediate report rules, and out-test rules means that the ninja
  file is much simplified.

- then, clerk takes back control, reads the final reports and formats them in a
  user-friendly way. Printing the reports may imply running `diff` internally.
  In particular, the commands to easily reproduce each test are provided.
  Resetting the test results if required is also done directly by clerk, at this
  stage.

A few switches are available to customise the output, but I am waiting for some
feedback before deciding what to make available from the CLI.

The `clerk report` command is available to manually explore test reports, but
normally the processing is done directly at the end of `clerk test` (i.e. ninja
will no longer call that command)
2024-06-19 16:10:26 +02:00

33 lines
702 B
Plaintext

(library
(name clerk_driver)
(public_name catala.clerk_driver)
(libraries
catala.runtime_ocaml
catala.catala_utils
catala.surface
ninja_utils
cmdliner
re
ocolor)
(modules clerk_scan clerk_report clerk_runtest clerk_driver))
(rule
(target custom_linking.sexp)
(mode fallback)
(action
(with-stdout-to
%{target}
(echo "()"))))
(executable
(name clerk)
(public_name clerk)
(flags
(:standard
(:include custom_linking.sexp)))
(libraries clerk_driver)
(link_deps ../compiler/catala.exe)
; not a real dependency, but when running clerk in practice you always want the catala binary to be up-to-date (e.g. `dune exec -- ckerk test`)
(modules clerk)
(package catala))