From 0d27e9f90965e308875465a81a2fbd90d7b4c8bc Mon Sep 17 00:00:00 2001 From: Jeremie Dimino Date: Thu, 17 May 2018 15:42:40 +0100 Subject: [PATCH] Expose a bug in the S-expression record parser --- test/unit-tests/dune | 10 ++++++++++ test/unit-tests/sexp.mlt | 31 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 test/unit-tests/sexp.mlt diff --git a/test/unit-tests/dune b/test/unit-tests/dune index 9764b1c4..8fa30a6d 100644 --- a/test/unit-tests/dune +++ b/test/unit-tests/dune @@ -69,3 +69,13 @@ (progn (run ${exe:expect_test.exe} ${<}) (diff? ${<} ${<}.corrected)))))) + +(alias + ((name runtest) + (deps (sexp.mlt + (glob_files ${SCOPE_ROOT}/src/.dune.objs/*.cmi) + (glob_files ${SCOPE_ROOT}/src/stdune/.stdune.objs/*.cmi))) + (action (chdir ${SCOPE_ROOT} + (progn + (run ${exe:expect_test.exe} ${<}) + (diff? ${<} ${<}.corrected)))))) diff --git a/test/unit-tests/sexp.mlt b/test/unit-tests/sexp.mlt new file mode 100644 index 00000000..114dd78b --- /dev/null +++ b/test/unit-tests/sexp.mlt @@ -0,0 +1,31 @@ +(* -*- tuareg -*- *) +open Stdune;; +open Sexp.Of_sexp;; + +let pp_sexp_ast ppf sexp = + Sexp.pp ppf (Sexp.Ast.remove_locs sexp) +;; +#install_printer pp_sexp_ast;; +[%%expect{| +val pp_sexp_ast : Format.formatter -> Stdune.Sexp.Ast.t -> unit = +|}] + +Printexc.record_backtrace false;; +[%%expect{| +- : unit = () +|}] + +let sexp = Sexp.parse_string ~fname:"" ~mode:Single {| +((foo 1) + (foo 2)) +|} +[%%expect{| +val sexp : Usexp.Ast.t = ((foo 1) (foo 2)) +|}] + +let of_sexp = record (field "foo" int) +let x = of_sexp sexp +[%%expect{| +val of_sexp : int Stdune.Sexp.Of_sexp.t = +val x : int = 2 +|}]