diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/cli.t | 19 | ||||
| -rw-r--r-- | test/test_config.ml | 19 |
2 files changed, 38 insertions, 0 deletions
@@ -1270,6 +1270,20 @@ slug the engine can produce over 2020-2045: partial.ini: 1 of 725 celebrations named, 724 missing, 0 unknown partial.ini: 0 of 104 book names, 104 missing +`flavour` decides how a template's output is ESCAPED. It is normally inferred +from the template's own extension, so the key exists for the template whose +extension says nothing -- and getting it wrong yields malformed output rather +than ugly output, which is why there is no silent fallback: + + $ printf '{{#days}}{{name}}\n{{/days}}' > t.noext + $ colitur table --year 2027 --template t.noext + colitur: cannot infer a flavour from ".noext"; pass --flavour latex|typst|groff|html|xml|ics|none + [2] + + $ mkdir -p xdg-fl/colitur && printf '[defaults]\nflavour = html\n' > xdg-fl/colitur/config.ini + $ XDG_CONFIG_HOME=xdg-fl colitur table --year 2027 --template t.noext | head -1 + In Octava Nativitatis Domini + An INI overlay handed to `--overlay` is DIAGNOSED, not left to fail inside the sexp reader. The INI form is a source format that `colitur convert` turns into the S-expression one; feeding it directly otherwise produced "more than one @@ -1322,6 +1336,7 @@ literally either): lang la (default) template (none) (default) format (none) (default) + flavour (infer) (default) sigla_style la (default) sigla_book abbr (default) sigla_tradition vulgate (default) @@ -1336,6 +1351,7 @@ listed one line per effective entry instead: lang fr (flag) template (none) (default) format (none) (default) + flavour (infer) (default) sigla_style fr (default) sigla_book abbr (default) sigla_tradition vulgate (default) @@ -1354,6 +1370,7 @@ differently from a misspelled key inside a recognised one: lang en (config) template (none) (default) format (none) (default) + flavour (infer) (default) sigla_style en (default) sigla_book abbr (default) sigla_tradition vulgate (default) @@ -1374,6 +1391,7 @@ the config file the earlier examples left behind: lang la (default) template (none) (default) format (none) (default) + flavour (infer) (default) sigla_style pl (flag) sigla_book full (flag) sigla_tradition modern (flag) @@ -1410,6 +1428,7 @@ sidesteps that same non-portability: lang la (default) template (none) (default) format (none) (default) + flavour (infer) (default) sigla_style la (default) sigla_book abbr (default) sigla_tradition nonsense (flag) diff --git a/test/test_config.ml b/test/test_config.ml index d348d9b..1dc1382 100644 --- a/test/test_config.ml +++ b/test/test_config.ml @@ -105,6 +105,23 @@ let test_two_defaults_blocks_report_no_unknown_sections () = (* Task 8: sigla_style/sigla_book/sigla_tradition read the same way lang/template/format do, in the same [\[defaults\]] section -- no new section, and every key recognised (so [unknown_keys] stays empty). *) +(* The escaping flavour is usually inferred from the template's extension, so + this key exists for the template whose extension says nothing. Getting it + wrong yields malformed output rather than ugly output, which is why there + is no silent fallback and why it is worth being settable rather than + passable only per-run. *) +let test_flavour_is_read () = + match C.of_string "[defaults]\nflavour = groff\n" with + | Error e -> Alcotest.failf "parse: %s" e + | Ok c -> + Alcotest.(check (option string)) "flavour" (Some "groff") (C.flavour c); + Alcotest.(check (list string)) "nothing unknown" [] (C.unknown_keys c) + +let test_flavour_absent_is_none () = + match C.of_string "[defaults]\nlang = en\n" with + | Error e -> Alcotest.failf "parse: %s" e + | Ok c -> Alcotest.(check bool) "unset" true (C.flavour c = None) + let test_sigla_keys_are_read () = let text = "[defaults]\nsigla_style = la\nsigla_book = full\nsigla_tradition = modern\n" @@ -149,6 +166,8 @@ let suite = `Quick test_overlays_accumulate_across_blocks; Alcotest.test_case "two defaults blocks report no unknown sections" `Quick test_two_defaults_blocks_report_no_unknown_sections; + Alcotest.test_case "flavour is read" `Quick test_flavour_is_read; + Alcotest.test_case "flavour absent is none" `Quick test_flavour_absent_is_none; Alcotest.test_case "sigla keys are read" `Quick test_sigla_keys_are_read; Alcotest.test_case "empty config sigla keys are none" `Quick test_empty_config_sigla_keys_are_none; Alcotest.test_case "sigla key repeated across blocks last wins" |
