Skip to content

Commit a7c1b98

Browse files
committed
Clarify config errors and expand resolver tests
1 parent 58881b5 commit a7c1b98

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

ContextEditor/EditorResolver.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ enum ConfigError: LocalizedError, Equatable {
1717
var errorDescription: String? {
1818
switch self {
1919
case .missingConfiguration:
20-
return "No supported editor was found and no valid editor.json file is available."
20+
return "No supported editor was found and no valid .contexteditor file is available."
2121
case .invalidConfiguration(let url):
2222
return "Could not read \(url.path) as a valid configuration file."
2323
case .appNotInstalled(let name):

ContextEditorTests/ContextEditorTests.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,26 @@ final class ContextEditorTests: XCTestCase {
5858
}
5959
}
6060

61+
func testResolveTargetApplicationRejectsMalformedConfiguration() throws {
62+
let root = makeTemporaryDirectory()
63+
defer { try? FileManager.default.removeItem(at: root) }
64+
65+
let projectRoot = root.appendingPathComponent("project")
66+
try FileManager.default.createDirectory(at: projectRoot, withIntermediateDirectories: true)
67+
try "{".write(
68+
to: projectRoot.appendingPathComponent(".contexteditor"),
69+
atomically: true,
70+
encoding: .utf8
71+
)
72+
73+
let fileURL = projectRoot.appendingPathComponent("index.txt")
74+
try "".write(to: fileURL, atomically: true, encoding: .utf8)
75+
76+
let resolver = EditorResolver()
77+
78+
XCTAssertThrowsError(try resolver.resolveTargetApplication(for: fileURL))
79+
}
80+
6181
func testFallbackReturnsFirstInstalledEditor() {
6282
let resolver = EditorResolver { target in
6383
if target == TargetApplication(appName: "Nova", bundleIdentifier: "com.panic.Nova") {
@@ -102,6 +122,19 @@ final class ContextEditorTests: XCTestCase {
102122
)
103123
}
104124

125+
func testResolveTargetApplicationThrowsWhenNoConfigurationOrFallbackExists() {
126+
let resolver = EditorResolver(
127+
appLocator: { _ in nil },
128+
systemDefaultLocator: { _ in nil }
129+
)
130+
131+
XCTAssertThrowsError(
132+
try resolver.resolveTargetApplication(for: URL(fileURLWithPath: "/tmp/example.txt"))
133+
) { error in
134+
XCTAssertEqual(error as? ConfigError, .missingConfiguration)
135+
}
136+
}
137+
105138
private func makeTemporaryDirectory() -> URL {
106139
let url = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
107140
try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: true)

0 commit comments

Comments
 (0)