aboutsummaryrefslogtreecommitdiff
path: root/Tests/NorgKitTests/Models/DetachedModifierTests.swift
blob: 7ef14793f8e0d6e7f453dfa5b092e1d5af0da5c3 (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
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")
  }
}