aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/cli.t19
-rw-r--r--test/test_config.ml19
2 files changed, 38 insertions, 0 deletions
diff --git a/test/cli.t b/test/cli.t
index b2c2263..2e9a0e2 100644
--- a/test/cli.t
+++ b/test/cli.t
@@ -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"