(* Loaders for the real EF data (data/ef/*.sexp), extracted from bin/main.ml's [load_ef_layer]/[load_ef_lectionary]/[load_ef_commons] (bin/main.ml:154, :193, :206) and simplified to what the test suite needs: no [~user_overlays], no COLITUR_DATA_DIR/installed-prefix indirection (that machinery exists so the CLI finds its data next to wherever it was installed or built -- tests always run from test/, where test/dune already declares the four data/ef/*.sexp paths as [deps]). Reading them via the same "../data/ef/..." relative paths test_calendar.ml, test_rite_ef.ml and test_lectionary_ef.ml already use, not [bin/]'s own [data_dir ()]. Deliberately NOT shared as a library with bin/main.ml: [bin/] and [test/] are separate dune stanzas, and three small loaders duplicated here is cheaper than a new library built just to serve them. bin/main.ml is not changed to use this module -- the CLI keeps its own copy, already pinned by test/cli.t. *) let sanctoral_path = "../data/ef/sanctoral.sexp" let adjustments_path = "../data/ef/adjustments.sexp" let lectionary_path = "../data/ef/lectionary.sexp" let commons_path = "../data/ef/commons.sexp" (* Mirrors bin/main.ml's [load_ef_layer]: the shipped sanctoral layer with the shipped adjustments overlay merged on top (RG 110's 30 June companion, the Major Litanies, Barbara, Rogation Wednesday -- see adjustments.sexp's own header). No user overlays: the test suite always wants the plain shipped calendar. Diagnostics are discarded rather than surfaced -- the shipped overlay is asserted elsewhere (test_overlay.ml, the "check" path) to merge clean; a test that wants to see them can still call {!Colitur_kernel.Overlay.merge} directly. *) let load_ef_layer () = match Colitur_kernel.Layer.load Rite_ef.Vocab_ef.rank_of_sexp sanctoral_path with | Error e -> Error (Printf.sprintf "failed to load %s: %s" sanctoral_path e) | Ok layer -> ( match Colitur_kernel.Overlay.load Rite_ef.Vocab_ef.rank_of_sexp adjustments_path with | Error e -> Error (Printf.sprintf "failed to load %s: %s" adjustments_path e) | Ok overlay -> let layer, _diagnostics = Colitur_kernel.Overlay.merge layer [ overlay ] in Ok layer) (* Mirrors bin/main.ml's [load_ef_lectionary]. *) let load_ef_lectionary () = match Colitur_kernel.Lectionary.load lectionary_path with | Error e -> Error (Printf.sprintf "failed to load %s: %s" lectionary_path e) | Ok l -> Ok l (* Mirrors bin/main.ml's [load_ef_commons]. *) let load_ef_commons () = match Rite_ef.Lectionary_ef.Commons.load commons_path with | Error e -> Error (Printf.sprintf "failed to load %s: %s" commons_path e) | Ok c -> Ok c (* Assembles [Rite_ef.context] the way bin/main.ml:328 does, over the real shipped lectionary and Commons. Raises on a load failure rather than returning a [result]: the four data files are declared [deps] in test/dune, so a failure here means the test tree itself is broken, the same condition test_calendar.ml's and test_rite_ef.ml's own module-level loaders already treat as fatal. *) let ef_context () = match load_ef_lectionary () with | Error e -> failwith e | Ok lectionary -> ( match load_ef_commons () with | Error e -> failwith e | Ok commons -> Rite_ef.context ~lectionary ~commons)