aboutsummaryrefslogtreecommitdiff
path: root/Tests/NorgKitTests/Models/DetachedModifierTests.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/NorgKitTests/Models/DetachedModifierTests.swift')
-rw-r--r--Tests/NorgKitTests/Models/DetachedModifierTests.swift61
1 files changed, 61 insertions, 0 deletions
diff --git a/Tests/NorgKitTests/Models/DetachedModifierTests.swift b/Tests/NorgKitTests/Models/DetachedModifierTests.swift
new file mode 100644
index 0000000..7ef1479
--- /dev/null
+++ b/Tests/NorgKitTests/Models/DetachedModifierTests.swift
@@ -0,0 +1,61 @@
+import Testing
+
+@testable import NorgKit
+
+struct DetachedModifierTests {
+
+ private let markers = ASCIIByteSet("*-~>$^:")
+
+ @Test func parsesMarkerLevelAndContent() {
+ let m = DetachedModifier.parse("** heading"[...], accepting: markers)
+ #expect(m?.marker == "*")
+ #expect(m?.level == 2)
+ #expect(m?.content == "heading")
+ #expect(m?.status == nil)
+ }
+
+ @Test func skipsLeadingWhitespace() {
+ let m = DetachedModifier.parse(" - item"[...], accepting: markers)
+ #expect(m?.marker == "-")
+ #expect(m?.level == 1)
+ #expect(m?.content == "item")
+ }
+
+ @Test func parsesStatusAndStatusIndex() {
+ let line = "- (x) done"
+ let m = DetachedModifier.parse(line[...], accepting: markers)
+ #expect(m?.status == .done)
+ #expect(m?.content == "done")
+
+ if let index = m?.statusIndex {
+ #expect(line[index] == "x")
+ } else {
+ Issue.record("Expected a status index")
+ }
+ }
+
+ @Test func returnsNilForUnacceptedMarker() {
+ #expect(DetachedModifier.parse("+ item"[...], accepting: markers) == nil)
+ }
+
+ @Test func returnsNilWithoutWhitespaceAfterMarker() {
+ #expect(DetachedModifier.parse("*bold*"[...], accepting: markers) == nil)
+ }
+
+ @Test func returnsNilForEmptyAndBlankLines() {
+ #expect(DetachedModifier.parse(""[...], accepting: markers) == nil)
+ #expect(DetachedModifier.parse(" "[...], accepting: markers) == nil)
+ }
+
+ @Test func unterminatedStatusParenIsTreatedAsContent() {
+ let m = DetachedModifier.parse("- (x oops"[...], accepting: markers)
+ #expect(m?.status == nil)
+ #expect(m?.content == "(x oops")
+ }
+
+ @Test func unknownStatusCharInParensIsContent() {
+ let m = DetachedModifier.parse("- (z) text"[...], accepting: markers)
+ #expect(m?.status == nil)
+ #expect(m?.content == "(z) text")
+ }
+}