aboutsummaryrefslogtreecommitdiff
path: root/Tests/NorgKitTests/Helpers/TextHelperTests.swift
diff options
context:
space:
mode:
authorRuben Beltran del Rio <jj@r.bdr.sh>2026-06-16 12:08:21 +0200
committerRuben Beltran del Rio <jj@r.bdr.sh>2026-06-16 12:22:47 +0200
commit501fdce29e4d2c46c4708ad7f44056878e0db3fa (patch)
treedb923b77037db9f5b37600a6e34c3bb2e8a971be /Tests/NorgKitTests/Helpers/TextHelperTests.swift
Initial extraction from Norganize1.0.0
Diffstat (limited to 'Tests/NorgKitTests/Helpers/TextHelperTests.swift')
-rw-r--r--Tests/NorgKitTests/Helpers/TextHelperTests.swift71
1 files changed, 71 insertions, 0 deletions
diff --git a/Tests/NorgKitTests/Helpers/TextHelperTests.swift b/Tests/NorgKitTests/Helpers/TextHelperTests.swift
new file mode 100644
index 0000000..9e236ff
--- /dev/null
+++ b/Tests/NorgKitTests/Helpers/TextHelperTests.swift
@@ -0,0 +1,71 @@
+import Testing
+
+@testable import NorgKit
+
+struct TextHelperTests {
+
+ @Test func lineSlicesSplitsOnNewlines() {
+ #expect(TextHelper.lineSlices("a\nb\nc").map(String.init) == ["a", "b", "c"])
+ }
+
+ @Test func lineSlicesKeepsTrailingEmptyLine() {
+ #expect(TextHelper.lineSlices("a\n").map(String.init) == ["a", ""])
+ }
+
+ @Test func lineSlicesHandlesEmptyString() {
+ #expect(TextHelper.lineSlices("").map(String.init) == [""])
+ }
+
+ @Test func enumerateLinesProvidesIndices() {
+ var seen: [(String, Int)] = []
+ TextHelper.enumerateLines(in: "one\ntwo") { line, index in
+ seen.append((String(line), index))
+ }
+ #expect(seen.map(\.0) == ["one", "two"])
+ #expect(seen.map(\.1) == [0, 1])
+ }
+
+ @Test func enumerateLinesStripsCarriageReturns() {
+ var lines: [String] = []
+ TextHelper.enumerateLines(in: "a\r\nb\r\n") { line, _ in lines.append(String(line)) }
+ #expect(lines == ["a", "b", ""])
+ }
+
+ @Test func lineReturnsRequestedLine() {
+ #expect(TextHelper.line(in: "a\nb\nc", at: 1).map(String.init) == "b")
+ }
+
+ @Test func lineReturnsLastLineWithoutTrailingNewline() {
+ #expect(TextHelper.line(in: "a\nb", at: 1).map(String.init) == "b")
+ }
+
+ @Test func lineStripsCarriageReturn() {
+ #expect(TextHelper.line(in: "a\r\nb", at: 0).map(String.init) == "a")
+ }
+
+ @Test func lineReturnsNilForOutOfRange() {
+ #expect(TextHelper.line(in: "a\nb", at: 5) == nil)
+ }
+
+ @Test func lineReturnsNilForNegativeIndex() {
+ #expect(TextHelper.line(in: "a", at: -1) == nil)
+ }
+
+ @Test func whitespaceTrimmedSubstringTrimsBothEnds() {
+ let trimmed = TextHelper.whitespaceTrimmed(" \t hi \t "[...])
+ #expect(trimmed == "hi")
+ }
+
+ @Test func whitespaceTrimmedSubstringOfAllWhitespaceIsEmpty() {
+ #expect(TextHelper.whitespaceTrimmed(" \t "[...]).isEmpty)
+ }
+
+ @Test func whitespaceTrimmedStringTrimsWhenNeeded() {
+ #expect(TextHelper.whitespaceTrimmed(" hi ") == "hi")
+ }
+
+ @Test func whitespaceTrimmedStringReturnsSameValueWhenAlreadyTrimmed() {
+ let input = "already-clean"
+ #expect(TextHelper.whitespaceTrimmed(input) == input)
+ }
+}