Add embedded KJV support
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import std/[strutils, unittest]
|
||||
|
||||
import ../src/kjv
|
||||
import ../src/reference_parser
|
||||
|
||||
suite "reference parser":
|
||||
test "parses single verse references":
|
||||
let reference = parseReference("John 3:16")
|
||||
|
||||
check reference.book.code == "JHN"
|
||||
check reference.ranges.len == 1
|
||||
check reference.ranges[0].start.chapter == 3
|
||||
check reference.ranges[0].start.verse == 16
|
||||
check reference.ranges[0].finish == reference.ranges[0].start
|
||||
check $reference == "John 3:16"
|
||||
|
||||
test "parses verse lists using the previous chapter":
|
||||
let reference = parseReference("John 3:16,20-21")
|
||||
|
||||
check reference.ranges.len == 2
|
||||
check reference.ranges[1].start.chapter == 3
|
||||
check reference.ranges[1].start.verse == 20
|
||||
check reference.ranges[1].finish.chapter == 3
|
||||
check reference.ranges[1].finish.verse == 21
|
||||
check $reference == "John 3:16, 3:20-21"
|
||||
|
||||
test "parses chapter ranges":
|
||||
let reference = parseReference("John 3-4")
|
||||
|
||||
check reference.ranges.len == 1
|
||||
check reference.ranges[0].start.chapter == 3
|
||||
check reference.ranges[0].start.verse == 0
|
||||
check reference.ranges[0].finish.chapter == 4
|
||||
check reference.ranges[0].finish.verse == 0
|
||||
check $reference == "John 3-4"
|
||||
|
||||
test "parses abbreviated numbered books":
|
||||
let reference = parseReference("1 Jn 1:9")
|
||||
|
||||
check reference.book.code == "1JN"
|
||||
check reference.ranges[0].start.chapter == 1
|
||||
check reference.ranges[0].start.verse == 9
|
||||
check $reference == "1 John 1:9"
|
||||
|
||||
test "parses unique canonical book prefixes":
|
||||
check parseReference("Gene 1:1").book.code == "GEN"
|
||||
check parseReference("Phile 3").book.code == "PHM"
|
||||
check parseReference("Phili 1:6").book.code == "PHP"
|
||||
|
||||
test "rejects ambiguous canonical book prefixes":
|
||||
expect ValueError:
|
||||
discard parseReference("Phil 1")
|
||||
|
||||
test "normalizes single-chapter book references":
|
||||
let reference = parseReference("Jude 3-4")
|
||||
|
||||
check reference.book.code == "JUD"
|
||||
check reference.ranges[0].start.chapter == 1
|
||||
check reference.ranges[0].start.verse == 3
|
||||
check reference.ranges[0].finish.chapter == 1
|
||||
check reference.ranges[0].finish.verse == 4
|
||||
check $reference == "Jude 3-4"
|
||||
|
||||
test "parses semicolon-separated references":
|
||||
let references = parseReferences("Psalm 23; John 3:16")
|
||||
|
||||
check references.len == 2
|
||||
check references[0].book.code == "PSA"
|
||||
check references[1].book.code == "JHN"
|
||||
|
||||
suite "offline KJV backend":
|
||||
test "fetches a single embedded verse":
|
||||
let passages = kjv.fetchPassages("John 3:16")
|
||||
|
||||
check passages.len == 1
|
||||
check passages[0].startsWith("John 3:16\n")
|
||||
check passages[0].contains(" [16] ")
|
||||
|
||||
test "fetches a single-chapter embedded verse":
|
||||
let passages = kjv.fetchPassages("Jude 3")
|
||||
|
||||
check passages.len == 1
|
||||
check passages[0].startsWith("Jude 3\n")
|
||||
check passages[0].contains(" [3] ")
|
||||
Reference in New Issue
Block a user