aboutsummaryrefslogtreecommitdiff
path: root/Tests/NorgKitTests/Helpers/TextHelperTests.swift
blob: 9e236ff6963ee8f13893b50867a8480c32d1a3a9 (plain)
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)
  }
}