krz/orgstar

A native macOS editor for org-mode files. editor org-mode swift

Tests/OrgCoreTests/SettingsTests.swift

191ddb506f3a91b93c755ba6e8123a4e8ac4f90d
orgstar/Tests/OrgCoreTests/SettingsTests.swift history · blame · raw

48 lines · 2129 bytes

 1import Testing
 2@testable import OrgCore
 3
 4struct SettingsTests {
 5    func scan(_ text: String, blockEnds: [Int: Int] = [:]) -> OrgSettings {
 6        let lines = splitRawLines(text)
 7        let info = lines.map { classifyLine($0.content) }
 8        return SettingsScanner.scan(lines: lines, info: info, blockEnds: blockEnds, defaults: .default)
 9    }
10
11    @Test func defaultsWithoutKeywords() {
12        let settings = scan("* TODO a\n")
13        #expect(settings.todoKeywordNames == ["TODO", "DONE"])
14        #expect(settings.isDone("DONE"))
15    }
16
17    @Test func fileKeywordsReplaceDefaults() {
18        let settings = scan("#+TODO: NEXT(n) WAIT(w@/!) | DONE(d!) CANCELED(c@)\n")
19        #expect(settings.todoKeywordNames == ["NEXT", "WAIT", "DONE", "CANCELED"])
20        let sequence = settings.todoSequences[0]
21        #expect(sequence.active.map(\.name) == ["NEXT", "WAIT"])
22        #expect(sequence.done.map(\.name) == ["DONE", "CANCELED"])
23        #expect(sequence.active[1] == TodoKeyword(name: "WAIT", fastKey: "w", logOnEnter: "@", logOnLeave: "!"))
24        #expect(sequence.done[0] == TodoKeyword(name: "DONE", fastKey: "d", logOnEnter: "!", logOnLeave: nil))
25    }
26
27    @Test func lastWordIsDoneWithoutSeparator() {
28        let settings = scan("#+SEQ_TODO: A B C\n")
29        #expect(settings.todoSequences[0].active.map(\.name) == ["A", "B"])
30        #expect(settings.todoSequences[0].done.map(\.name) == ["C"])
31    }
32
33    @Test func severalLinesMakeSeveralSequences() {
34        let settings = scan("#+TODO: A | B\n#+TYP_TODO: X | Y\n")
35        #expect(settings.todoSequences.count == 2)
36        #expect(settings.todoSequences.map(\.kind) == [.type, .sequence])
37    }
38
39    @Test func keywordsInsideBlocksAreIgnored() {
40        let text = "#+begin_example\n#+TODO: X | Y\n#+end_example\n"
41        #expect(scan(text, blockEnds: [0: 2]).todoKeywordNames == ["TODO", "DONE"])
42    }
43
44    @Test func priorities() {
45        #expect(scan("#+PRIORITIES: 1 10 5\n").priorities == Priorities(highest: "1", lowest: "10", default: "5"))
46        #expect(scan("").priorities == Priorities(highest: "A", lowest: "C", default: "B"))
47    }
48}