krz/orgstar

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

Tests/OrgAppTests/OrgPreferencesTests.swift

c1295824f55c7bba681fca8338bf08167e110105
orgstar/Tests/OrgAppTests/OrgPreferencesTests.swift history · blame · raw

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}