59 lines
2.2 KiB
Swift
59 lines
2.2 KiB
Swift
import Foundation
|
|
import Testing
|
|
|
|
@testable import phbar
|
|
|
|
// MARK: - Config directory cascade
|
|
//
|
|
// `PHPaths` resolves the config root in priority order:
|
|
// 1. $XDG_CONFIG_HOME/phbar (only for an absolute XDG path)
|
|
// 2. ~/.config/phbar
|
|
// 3. ~/.phbar
|
|
|
|
@Test func pathsCandidatesIncludeAbsoluteXdgFirst() {
|
|
let home = FileManager.default.homeDirectoryForCurrentUser
|
|
let candidates = PHPaths.configDirectoryCandidates(environment: ["XDG_CONFIG_HOME": "/custom/xdg"])
|
|
|
|
#expect(candidates.count == 3)
|
|
#expect(candidates[0].path == "/custom/xdg/phbar")
|
|
#expect(candidates[1].path == home.appending(path: ".config/phbar").path)
|
|
#expect(candidates[2].path == home.appending(path: ".phbar").path)
|
|
}
|
|
|
|
@Test func pathsCandidatesOmitRelativeXdg() {
|
|
let home = FileManager.default.homeDirectoryForCurrentUser
|
|
let candidates = PHPaths.configDirectoryCandidates(environment: ["XDG_CONFIG_HOME": "relative/path"])
|
|
|
|
#expect(candidates.count == 2)
|
|
#expect(candidates[0].path == home.appending(path: ".config/phbar").path)
|
|
#expect(candidates[1].path == home.appending(path: ".phbar").path)
|
|
}
|
|
|
|
@Test func pathsCandidatesOmitEmptyXdg() {
|
|
let candidates = PHPaths.configDirectoryCandidates(environment: ["XDG_CONFIG_HOME": ""])
|
|
#expect(candidates.count == 2)
|
|
}
|
|
|
|
@Test func pathsCandidatesOmitXdgWhenUnset() {
|
|
let candidates = PHPaths.configDirectoryCandidates(environment: [:])
|
|
#expect(candidates.count == 2)
|
|
}
|
|
|
|
@Test func pathsResolvePicksFirstExistingCandidate() throws {
|
|
// An existing XDG-rooted dir takes priority over ~/.config/phbar because
|
|
// it sorts first in the candidate list.
|
|
let xdgRoot = FileManager.default.temporaryDirectory.appending(path: "phbar_xdg_\(UUID().uuidString)")
|
|
let xdgConfig = xdgRoot.appending(path: "phbar")
|
|
try FileManager.default.createDirectory(at: xdgConfig, withIntermediateDirectories: true)
|
|
defer { try? FileManager.default.removeItem(at: xdgRoot) }
|
|
|
|
let resolved = PHPaths.resolveConfigDirectory(environment: ["XDG_CONFIG_HOME": xdgRoot.path])
|
|
|
|
#expect(resolved == xdgConfig)
|
|
}
|
|
|
|
@Test func pathsConfigDirectoryMatchesResolve() {
|
|
// The cached static agrees with a fresh resolve against the live process env.
|
|
#expect(PHPaths.configDirectory == PHPaths.resolveConfigDirectory())
|
|
}
|