31 lines
1 KiB
OCaml
31 lines
1 KiB
OCaml
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 = Ok [ "alias"; [ "A" ] ] } |}];
|
|
test (Alias [ module_name "A"; module_name "B" ]);
|
|
[%expect {| { ast = "(alias (A B))"; decoded = Ok [ "alias"; [ "A"; "B" ] ] } |}]
|
|
;;
|