Tests/OrgAppTests/OrgPreferencesTests.swift
54 lines · 3236 bytes
1import Foundation
2import OrgCore
3import OrgPresentation
4import Testing
5@testable import OrgApp
6
7struct OrgPreferencesTests {
8 @Test func readsWhatConfigTomlSets() throws {
9 let defaults = try #require(UserDefaults(suiteName: "orgstar-preferences-\(UUID().uuidString)"))
10 // Nothing set: the file's fallbacks, which match the Mac's.
11 #expect(OrgPreferences.orgSettings(defaults).todoSequences.first?.active.map(\.name) == ["TODO", "PROJ", "LOOP", "STRT", "WAIT", "HOLD", "IDEA"])
12 #expect(OrgPreferences.options(defaults).logDone == nil && OrgPreferences.options(defaults).tagsColumn == -77)
13 #expect(OrgPreferences.agendaSpan(defaults) == 10 && OrgPreferences.agendaStartOffset(defaults) == -3)
14 #expect(OrgPreferences.reminders(defaults) && OrgPreferences.reminderLead(defaults) == 12)
15 let fallbacks = OrgPreferences.options(defaults)
16 #expect(!fallbacks.metaReturnMaySplitLine && fallbacks.hideEmphasisMarkers && fallbacks.prettyEntities && fallbacks.subSuperscriptsNeedBraces)
17 #expect(fallbacks.startupIndented && !fallbacks.spellCheck && fallbacks.hideDrawerStartup && !fallbacks.hideBlockStartup)
18
19 let problems = UserConfig.apply("""
20 org-todo-keywords = "TODO NEXT | DONE"
21 org-log-done = "time"
22 org-log-into-drawer = "LOGBOOK"
23 org-agenda-span = 7
24 org-agenda-start-day = "-1d"
25 appt-message-warning-time = 30
26 org-M-RET-may-split-line = true
27 org-hide-emphasis-markers = false
28 org-pretty-entities = false
29 [orgstar]
30 reminders = false
31 """, to: defaults)
32 #expect(problems.isEmpty, "\(problems)")
33 #expect(OrgPreferences.orgSettings(defaults).todoSequences.first?.active.map(\.name) == ["TODO", "NEXT"])
34 let options = OrgPreferences.options(defaults)
35 #expect(options.logDone == .time && options.logIntoDrawer == "LOGBOOK")
36 #expect(options.metaReturnMaySplitLine && !options.hideEmphasisMarkers && !options.prettyEntities)
37 #expect(OrgPreferences.agendaSpan(defaults) == 7 && OrgPreferences.agendaStartOffset(defaults) == -1)
38 #expect(!OrgPreferences.reminders(defaults) && OrgPreferences.reminderLead(defaults) == 30)
39 }
40
41 @Test func themeTypeAndShowMarkup() throws {
42 let defaults = try #require(UserDefaults(suiteName: "orgstar-preferences-\(UUID().uuidString)"))
43 var colors = ThemeSpec.default
44 colors.light["link"] = RGBA(hex: "#000001")
45 let fallback = OrgPreferences.theme(colors, defaults)
46 #expect(fallback.font == "" && fallback.fontSize == 13 && fallback.lineSpacing == 2 && fallback.headingSizeStep == 1)
47 #expect(fallback.light["link"]?.hex == "#000001")
48 #expect(!OrgPreferences.showMarkup(defaults))
49 _ = UserConfig.apply("[theme]\nfont = \"Menlo\"\nfont-size = 16\nline-spacing = 4\nheading-size-step = 2\n[orgstar]\nshow-markup = true\n", to: defaults)
50 let spec = OrgPreferences.theme(colors, defaults)
51 #expect(spec.font == "Menlo" && spec.fontSize == 16 && spec.lineSpacing == 4 && spec.headingSizeStep == 2)
52 #expect(OrgPreferences.showMarkup(defaults))
53 }
54}