Tests/OrgCoreTests/SettingsTests.swift
48 lines · 2129 bytes
8 symbols in this file
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}