(* Pins the six shipped ordo booklet templates, one per flavour, under templates/ef/, against a byte-for-byte golden render of 2027. These are the templates a real user ships with colitur, rendered through the same Template.render_string / View.of_days path colitur table uses -- so a change to the view shape, the escaping rules, or the templates themselves that alters output is caught here, not only in test_view.ml's shape assertions. *) module T = Colitur_render.Template module E = Colitur_render.Escape let render_template path year = let ic = open_in_bin path in let src = really_input_string ic (in_channel_length ic) in close_in ic; let ext = match String.rindex_opt path '.' with | Some i -> String.sub path i (String.length path - i) | None -> "" in let flavour = match E.of_extension ext with Some f -> f | None -> Alcotest.failf "flavour for %s" ext in let v = Test_view.view_of year in match T.render_string ~flavour src v with Ok s -> s | Error e -> Alcotest.failf "%s: %s" path e let read path = let ic = open_in_bin path in let s = really_input_string ic (in_channel_length ic) in close_in ic; s let check_golden name = let got = render_template ("../templates/ef/" ^ name) 2027 in let want = read ("golden/" ^ Filename.remove_extension name ^ "-2027" ^ Filename.extension name) in Alcotest.(check string) name want got let cases = [ "ordo.tex"; "ordo.ms"; "ordo.html"; "ordo.adoc"; "ordo.md"; "ordo.txt"; "ordo.typ"; "grid.tex"; "grid.ms"; "grid.html"; "grid.typ" ] let suite = ( "Render/golden", List.map (fun n -> Alcotest.test_case n `Quick (fun () -> check_golden n)) cases )