summaryrefslogtreecommitdiff
path: root/test/test_emit.ml
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-19 15:29:33 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-19 15:29:33 +0200
commit6d367ab8e90f6e713d262a7f19fb908b28d4796a (patch)
treef5377f426ebe5ba32b7a8532850eafc9c103b9f9 /test/test_emit.ml
parent92559825f9ad3e0f751d2c2022ffe000f23358ef (diff)
downloadcolitur-6d367ab8e90f6e713d262a7f19fb908b28d4796a.tar.gz
colitur-6d367ab8e90f6e713d262a7f19fb908b28d4796a.zip
feat(render): names reach the view and every emitter
The view's name is now the RESOLVED display string and slug is untouched, so machine formats carry both -- a script keeps the stable key, a human reads the name. name is a plain string, not a lang-keyed object. That removes the shadowing hazard outright: a dotted {{name.la}} used to fall back WHOLESALE to the enclosing month's name.la and print Ianuarius on every unnamed day, which is how a printed booklet came to show the month where the feast belonged. weekday, season, rank and colour all gain localised companions, because a calendar in a language needs more than feast names, and templates gain a term vocabulary so fixed strings need no template edit to translate. Asserted over a whole year: no day renders its slug as its name. Beyond the brief's own code sample: - comm_value's own name is now resolved through the same lang.celebration table too (not only the observed day's), because Task 8's own ordo template interpolates a plain {{name}} inside {{#comms}} -- an Obj there would render silently blank. A commemoration slug without Latin coverage still degrades to the slug, same as everywhere else in this system; that is a lang/la.ini DATA gap (113 of 327 sanctoral slugs, measured), not a regression this task introduced. - bin/main.ml's emit/table/publish call sites needed ~lang to compile at all, which is collateral from the of_days signature change, not this task's own file list. Rather than pass Lang.raw and ship the very slug-as-name defect this branch exists to fix, they load the shipped Latin table by the same probe order data_dir() already uses -- a deliberate, commented BRIDGE that Task 6 replaces wholesale with real --lang/--raw/config resolution. bin/dune gained colitur_naming accordingly. - test/cli.t needed two related fixes to stay green: the CSV header/row example, and a table/LaTeX escaping demonstration that relied on the kernel's own English name for Sts Peter & Paul -- gone from the view now that name resolves through lang tables only, and the Missal's own Latin spells the feast with et, never an ampersand. Escaping itself is still proved live on 2035 data in test_emit.ml. - Both schemas gained the new day/week/top-level keys (season_name, weekday, rank_name, colour_name, term, weekday_headings, month_num, month_name), not only the name shape change; schema/colitur-v1.xsd verified against real emitted XML via xmllint (make check-schema). Render/golden's 9 cases (the shipped ordo/grid templates, all six flavours) now fail as expected: their old {{name.la}} / {{#name}}... idiom finds nothing on a plain string. That is Tasks 8/9's own scope to rewrite, per the plan's own pre-flight conflict scan -- not fixed here, and not silently pinned by regenerating goldens off broken output. 495 tests run (490 + 5 new), 486 pass; the 9 failures are exactly Render/golden's ordo/grid cases.
Diffstat (limited to 'test/test_emit.ml')
-rw-r--r--test/test_emit.ml6
1 files changed, 3 insertions, 3 deletions
diff --git a/test/test_emit.ml b/test/test_emit.ml
index a22eaaf..0a40054 100644
--- a/test/test_emit.ml
+++ b/test/test_emit.ml
@@ -61,7 +61,7 @@ let test_csv_header_and_rows () =
let lines = String.split_on_char '\n' out |> List.filter (fun l -> l <> "") in
Alcotest.(check int) "366 lines: header + 365 days" 366 (List.length lines);
Alcotest.(check string) "header"
- "date,rite,season,week,slug,rank,colour,subject,name_la,name_en,first,gospel,comms"
+ "date,rite,season,season_name,week,slug,name,weekday,rank,rank_name,colour,colour_name,subject,first,gospel,comms"
(List.hd lines);
Alcotest.(check bool) "first row is 1 January" true
(String.length (List.nth lines 1) > 10 && String.sub (List.nth lines 1) 0 10 = "2027-01-01")
@@ -86,8 +86,8 @@ let test_csv_quotes_commas () =
that escapes its quoting produces 14 fields, not 13. Also assert the
quoted substring appears literally, byte for byte -- belt and braces,
and closer to what a human reviewing the CSV would actually look for. *)
- Alcotest.(check int) "the row has exactly 13 fields, same as the header"
- 13 (List.length (parse_csv_row joseph));
+ Alcotest.(check int) "the row has exactly 16 fields, same as the header"
+ 16 (List.length (parse_csv_row joseph));
Alcotest.(check bool) "Joseph's comma-bearing name is quoted whole, not split" true
(contains ~needle:"\"St. Joseph, Spouse of the Bl. Virgin Mary\"" joseph)