1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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)
}
}
|