summaryrefslogtreecommitdiff
path: root/internal/bible/ofref_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/bible/ofref_test.go')
-rw-r--r--internal/bible/ofref_test.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/bible/ofref_test.go b/internal/bible/ofref_test.go
new file mode 100644
index 0000000..4b9cb1e
--- /dev/null
+++ b/internal/bible/ofref_test.go
@@ -0,0 +1,50 @@
+package bible
+
+import "testing"
+
+func TestOFRef(t *testing.T) {
+ cases := []struct {
+ name string
+ citation string
+ system string
+ want string
+ }{
+ // Non-psalms pass through unchanged in every system.
+ {"gospel-vulgate", "Matthew 4:12-23", "vulgate", "Matthew 4:12-23"},
+ {"gospel-drb", "Matthew 4:12-23", "drb", "Matthew 4:12-23"},
+ {"epistle-hebrew", "1 Corinthians 1:10-13,17", "hebrew", "1 Corinthians 1:10-13,17"},
+
+ // Psalm chapter shift for the Vulgate family (Hebrew -> Vulgate).
+ {"ps27-vulgate", "Psalms 27:1,4,13-14", "vulgate", "Psalms 26:1,4,13-14"},
+ {"ps27-drb", "Psalms 27:1,4,13-14", "drb", "Psalms 27:1,4,13-14"}, // Ps 27 has no DRB title fold
+ {"ps27-hebrew", "Psalms 27:1,4,13-14", "hebrew", "Psalms 27:1,4,13-14"},
+
+ // Boundary cases of HebrewToVulgateChapter.
+ {"ps8-vulgate", "Psalms 8:2", "vulgate", "Psalms 8:2"}, // <=8 unchanged
+ {"ps9-vulgate", "Psalms 9:2", "vulgate", "Psalms 9:2"}, // 9,10 -> 9
+ {"ps10-vulgate", "Psalms 10:1", "vulgate", "Psalms 9:1"}, // 10 -> 9
+ {"ps11-vulgate", "Psalms 11:1", "vulgate", "Psalms 10:1"}, // 11..113 -> h-1
+ {"ps116-vulgate", "Psalms 116:12", "vulgate", "Psalms 114:12"},
+ {"ps147-vulgate", "Psalms 147:12", "vulgate", "Psalms 146:12"},
+ {"ps148-vulgate", "Psalms 148:1", "vulgate", "Psalms 148:1"}, // >=148 unchanged
+
+ // DRB title-fold verse shift: Ps 51 folds 2 title verses into verse 1.
+ {"ps51-drb", "Psalms 51:3-4,12-13", "drb", "Psalms 51:1-2,10-11"},
+ {"ps51-vulgate", "Psalms 51:3-4", "vulgate", "Psalms 50:3-4"},
+ // Ps 63 folds 1 title verse.
+ {"ps63-drb", "Psalms 63:2,3-4", "drb", "Psalms 63:1,2-3"},
+
+ // Tail normalization: sub-verse letters dropped, ";" -> ",".
+ {"verseletter-2sam", "2 Samuel 6:12b-15,17-19", "vulgate", "2 Samuel 6:12-15,17-19"},
+ {"semicolon-acts", "The Acts 11:21b-26;13:1-3", "drb", "The Acts 11:21-26,13:1-3"},
+ {"multiletter-psalm-drb", "Psalms 98:1,2-3ab,3cd-4,5-6", "drb", "Psalms 98:1,2-3,3-4,5-6"},
+ {"multiletter-psalm-vulgate", "Psalms 98:1,2-3ab,3cd-4,5-6", "vulgate", "Psalms 97:1,2-3,3-4,5-6"},
+ }
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ if got := OFRef(c.citation, c.system); got != c.want {
+ t.Errorf("OFRef(%q, %q) = %q, want %q", c.citation, c.system, got, c.want)
+ }
+ })
+ }
+}