open Dune_rules open! Stdune open Dune_tests_common let () = init () (* Dune_file.Executables.Link_mode.decode *) let test s = Dune_lang.Decoder.parse Executables.Link_mode.decode Univ_map.empty (Dune_lang.Parser.parse_string ~fname:"" ~mode:Dune_lang.Parser.Mode.Single s) |> Executables.Link_mode.to_dyn |> print_dyn ;; let%expect_test _ = (* Link modes can be read as a ( ) list *) test "(best exe)"; [%expect {| Other { mode = best; kind = exe } |}] ;; let%expect_test _ = (* Some shortcuts also exist *) test "exe"; [%expect {| Other { mode = best; kind = exe } |}] ;; let%expect_test _ = test "object"; [%expect {| Other { mode = best; kind = object } |}] ;; let%expect_test _ = test "shared_object"; [%expect {| Other { mode = best; kind = shared_object } |}] ;; let%expect_test _ = test "byte"; [%expect {| Other { mode = byte; kind = exe } |}] ;; let%expect_test _ = test "native"; [%expect {| Other { mode = native; kind = exe } |}] ;; (* Dune_file.Executables.Link_mode.encode *) let test l = Executables.Link_mode.encode l let%expect_test _ = (* In the general case, modes are serialized as a list *) test (Other { kind = Shared_object; mode = Byte }) |> Dune_lang.to_dyn |> print_dyn; [%expect {| [ "byte"; "shared_object" ] |}] ;; (* But the specialized ones are serialized in the minimal version *) let%expect_test _ = test Executables.Link_mode.exe |> Dune_lang.to_dyn |> print_dyn; [%expect {| "exe" |}] ;;