summaryrefslogtreecommitdiff
path: root/test/test_citation.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_citation.ml')
-rw-r--r--test/test_citation.ml32
1 files changed, 30 insertions, 2 deletions
diff --git a/test/test_citation.ml b/test/test_citation.ml
index 3cbc8c6..ffbefe8 100644
--- a/test/test_citation.ml
+++ b/test/test_citation.ml
@@ -265,13 +265,18 @@ let suite =
module P = Colitur_citation.Parse
(* Render a parse back to a debug string so a test can assert shape
- compactly: "book|chapter:v-v,v-v|chapter:v". *)
+ compactly: "book|chapter:v-v,v-v|chapter:v". A [last] that names its own,
+ later chapter (a chapter-crossing range) shows as "v-C:v", the same
+ "chapter:verse" shape a plain part already uses -- so a crossing is
+ visible in the debug string exactly where the source text put it. *)
let show (t : P.t) =
let num (v : P.verse_num) = string_of_int v.P.n ^ v.P.suffix in
let range (r : P.verse_range) =
match r.P.last with
| None -> num r.P.first
- | Some l -> Printf.sprintf "%s-%s" (num r.P.first) (num l)
+ | Some { P.chapter = None; verse } -> Printf.sprintf "%s-%s" (num r.P.first) (num verse)
+ | Some { P.chapter = Some c; verse } ->
+ Printf.sprintf "%s-%d:%s" (num r.P.first) c (num verse)
in
let part (p : P.part) =
Printf.sprintf "%d:%s" p.P.chapter
@@ -319,6 +324,29 @@ let parse_suite =
("four parts", `Quick, parses "Eccli 24:5; 14:7; 14:9-11; 24:30-31"
"ecclesiasticus|24:5|14:7|14:9-11|24:30-31");
("modern name, vulgate id", `Quick, parses "Rev 12:1" "apocalypse|12:1");
+ (* Chapter-crossing ranges (W4): a hyphen range whose two endpoints lie
+ in different chapters -- real shapes from data/of/lectionary.sexp,
+ previously unparseable in their entirety (parse.mli's own
+ [verse_end]). *)
+ ("cross-chapter range", `Quick, parses "1 John 1:5-2:2" "john_1|1:5-2:2");
+ (* The compound shape: a chapter-crossing range FOLLOWED by further,
+ same-chapter verse references in the same comma list -- "5a" and
+ "6-8" belong to chapter 10, the chapter the preceding range just
+ crossed into, never chapter 9. A naive fix that only special-cased
+ "the whole part is one crossing range" breaks exactly here. *)
+ ("cross-chapter then more verses (compound)", `Quick,
+ parses "Matthew 9:35-10:1,5a,6-8" "matthew|9:35-10:1,5a,6-8");
+ (* The crossing is not the first comma-piece, and a normal same-chapter
+ range ("24-25a") sits between two others -- proves the crossing is
+ detected per-piece, not merely at a fixed position in the list. *)
+ ("cross-chapter mid-list", `Quick,
+ parses "2 Samuel 18:9-10,14b,24-25a,30-19:3" "samuel_2|18:9-10,14b,24-25a,30-19:3");
+ (* Verse sub-letters survive on a chapter-crossing endpoint too. *)
+ ("cross-chapter with sub-verse letter", `Quick,
+ parses "Genesis 1:20-2:4a" "genesis|1:20-2:4a");
+ (* A malformed crossing (no verse named after the second chapter) is
+ rejected, not silently misread. *)
+ ("rejects malformed cross-chapter", `Quick, rejects "Luke 1:5-2:");
(* Ordinals 3 and 4 must survive [split_book]'s leading-digit scan.
Narrowing its '1'..'4' range to '1'..'3' passes every OTHER case in
this suite silently, while seven real citations depend on it. A