diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-19 09:09:36 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-08-19 09:09:36 +0200 |
| commit | 6abc243e5d40bd60174a3fb1affc9517b0ac5617 (patch) | |
| tree | 8c3b03fa7cab2e4239250d572a53fa012755a279 /test/test_colitur.ml | |
| parent | 544836cf0f6373a0a753d0953ce7e60fd96337af (diff) | |
| download | colitur-6abc243e5d40bd60174a3fb1affc9517b0ac5617.tar.gz colitur-6abc243e5d40bd60174a3fb1affc9517b0ac5617.zip | |
feat(render): iCalendar emitter, RFC 5545
Not a template job: folding, escaping, exclusive DTEND and stable UIDs
are rules a logic-less template cannot enforce, and each fails silently
in a subscriber's client rather than loudly at generation.
DTEND is EXCLUSIVE for an all-day event (section 3.6.1). Wrong here
shows every event a day short, everywhere.
UIDs are YYYYMMDD-<rite>@colitur and stable across regenerations
(section 3.8.4.7). Wrong here duplicates the whole year in every
subscriber's phone, months later.
Every line is CRLF-terminated and folded at 75 octets (section 3.1).
No RRULE: a liturgical calendar is not a recurrence rule. Asserted, so
nobody optimises it later.
DTSTAMP is a parameter, not a clock read. RFC 5545 requires it and the
obvious implementation reads the wall clock -- which violates the
kernel's determinism rule and would make two feeds from identical data
differ byte-for-byte, defeating reproducible builds and any reviewable
diff on a published tree.
Corrected one test literal against real engine output: DTSTAMP is a
per-VEVENT property (section 3.8.7.2), not calendar-level, so the
default-value line count is 365 (every event), not 1.
Mutation-tested: a non-exclusive DTEND reddens the suite.
Diffstat (limited to 'test/test_colitur.ml')
| -rw-r--r-- | test/test_colitur.ml | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/test/test_colitur.ml b/test/test_colitur.ml index ca61415..d4ba6d3 100644 --- a/test/test_colitur.ml +++ b/test/test_colitur.ml @@ -12,4 +12,5 @@ let () = Test_template.render_suite; Test_view.suite; Test_emit.suite; - Test_emit.xml_suite ] + Test_emit.xml_suite; + Test_ics.suite ] |
