From 501fdce29e4d2c46c4708ad7f44056878e0db3fa Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Tue, 16 Jun 2026 12:08:21 +0200 Subject: Initial extraction from Norganize --- .../Models/DetachedModifierTests.swift | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Tests/NorgKitTests/Models/DetachedModifierTests.swift (limited to 'Tests/NorgKitTests/Models/DetachedModifierTests.swift') 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") + } +} -- cgit