aboutsummaryrefslogtreecommitdiff
path: root/test/test_render_golden.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_render_golden.ml')
-rw-r--r--test/test_render_golden.ml40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/test_render_golden.ml b/test/test_render_golden.ml
new file mode 100644
index 0000000..913513a
--- /dev/null
+++ b/test/test_render_golden.ml
@@ -0,0 +1,40 @@
+(* 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" ]
+
+let suite =
+ ( "Render/golden",
+ List.map (fun n -> Alcotest.test_case n `Quick (fun () -> check_golden n)) cases )