From 73b9257d3e08a7d60d839f81ef96e601caee6dae Mon Sep 17 00:00:00 2001 From: Etienne Millon Date: Thu, 14 Mar 2024 15:09:34 +0100 Subject: [PATCH] test: add repro for #10264 This is only one part of the issue; the other part is more difficult to test because it is related to `Modules.t` round-tripping correctly. Signed-off-by: Etienne Millon --- src/dune_rules/module.mli | 2 ++ test/expect-tests/module_tests.ml | 47 +++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 test/expect-tests/module_tests.ml diff --git a/src/dune_rules/module.mli b/src/dune_rules/module.mli index 1c416bdb166..3d823e2ae99 100644 --- a/src/dune_rules/module.mli +++ b/src/dune_rules/module.mli @@ -21,6 +21,8 @@ module Kind : sig | Root include Dune_lang.Conv.S with type t := t + + val to_dyn : t -> Dyn.t end module Source : sig diff --git a/test/expect-tests/module_tests.ml b/test/expect-tests/module_tests.ml new file mode 100644 index 00000000000..f6e35312cdc --- /dev/null +++ b/test/expect-tests/module_tests.ml @@ -0,0 +1,47 @@ +open Stdune +module Kind = Dune_rules.Module.Kind + +(* See #10264 *) +let%expect_test "Module.Kind encoding round trip" = + let module_name s = Dune_rules.Module_name.of_string s in + let test k = + let ast = Kind.encode k in + let sexp = Dune_sexp.Ast.add_loc ~loc:Loc.none ast in + let decoded = + match Dune_lang.Decoder.parse Kind.decode Univ_map.empty sexp with + | r -> Ok r + | exception e -> Error e + in + let dyn = + Dyn.record + [ "ast", Dyn.string (Dune_sexp.to_string ast) + ; "decoded", Or_exn.to_dyn Kind.to_dyn decoded + ] + in + Dune_tests_common.print_dyn dyn + in + test Impl; + [%expect {| { ast = "impl"; decoded = Ok Impl } |}]; + test (Alias []); + [%expect {| { ast = "alias"; decoded = Ok Alias [] } |}]; + test (Alias [ module_name "A" ]); + [%expect + {| + { ast = "(alias (A))" + ; decoded = + Error + "File \"\", line 1, characters 0-0:\n\ + Error: Atom or quoted string expected\n\ + " + } |}]; + test (Alias [ module_name "A"; module_name "B" ]); + [%expect + {| + { ast = "(alias (A B))" + ; decoded = + Error + "File \"\", line 1, characters 0-0:\n\ + Error: Atom or quoted string expected\n\ + " + } |}] +;;