Skip to content

Commit d2afdbd

Browse files
committed
CommandRunnerFake: Also throw on unmocked commands
1 parent 626f4d1 commit d2afdbd

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

Tests/SourceKitBazelBSPTests/Fakes/CommandRunnerFake.swift

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,48 @@ import Foundation
2121

2222
@testable import SourceKitBazelBSP
2323

24+
enum CommandRunnerFakeError: Error, LocalizedError {
25+
case unregisteredCommand(String, String?)
26+
27+
var errorDescription: String? {
28+
switch self {
29+
case .unregisteredCommand(let cmd, let cwd):
30+
return "Unexpected command: \(cmd) (cwd: \(cwd ?? "nil"))"
31+
}
32+
}
33+
}
34+
2435
final class CommandRunnerFake: CommandRunner {
2536

2637
private(set) var commands: [(command: String, cwd: String?)] = []
2738
private var responses: [String: String] = [:]
2839
private var errors: [String: Error] = [:]
2940

3041
func setResponse(for command: String, cwd: String? = nil, response: String) {
31-
responses[command + "|" + (cwd ?? "nil")] = response
42+
responses[key(for: command, cwd: cwd)] = response
3243
}
3344

3445
func setError(for command: String, cwd: String? = nil, error: Error) {
35-
errors[command + "|" + (cwd ?? "nil")] = error
46+
errors[key(for: command, cwd: cwd)] = error
3647
}
3748

3849
func run(_ cmd: String, cwd: String?) throws -> String {
3950
commands.append((command: cmd, cwd: cwd))
4051

41-
if let error = errors[cmd + "|" + (cwd ?? "nil")] {
52+
let cacheKey = key(for: cmd, cwd: cwd)
53+
if let error = errors[cacheKey] {
4254
throw error
4355
}
4456

45-
return responses[cmd + "|" + (cwd ?? "nil")]
46-
?? "Response/error not registered for command: \(cmd)"
57+
guard let response = responses[cacheKey] else {
58+
throw CommandRunnerFakeError.unregisteredCommand(cmd, cwd)
59+
}
60+
61+
return response
62+
}
63+
64+
private func key(for command: String, cwd: String?) -> String {
65+
return command + "|" + (cwd ?? "nil")
4766
}
4867

4968
func reset() {

Tests/SourceKitBazelBSPTests/InitializeHandlerTests.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ import Testing
110110
response: outputPath
111111
)
112112
commandRunner.setResponse(for: "xcrun --find swift", response: toolchain + "usr/bin/swift")
113+
commandRunner.setResponse(for: "xcode-select --print-path", response: "foo")
114+
commandRunner.setResponse(
115+
for: "xcrun --sdk iphonesimulator --show-sdk-path", response: "bar")
113116

114117
let handler = InitializeHandler(
115118
baseConfig: baseConfig,
@@ -154,6 +157,9 @@ import Testing
154157
response: outputPath
155158
)
156159
commandRunner.setResponse(for: "xcrun --find swift", response: toolchain + "usr/bin/swift")
160+
commandRunner.setResponse(for: "xcode-select --print-path", response: "foo")
161+
commandRunner.setResponse(
162+
for: "xcrun --sdk iphonesimulator --show-sdk-path", response: "bar")
157163

158164
let handler = InitializeHandler(
159165
baseConfig: baseConfig,

Tests/SourceKitBazelBSPTests/PrepareHandlerTests.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import Testing
3131
let commandRunner = CommandRunnerFake()
3232
let connection = LSPConnectionFake()
3333

34+
let rootUri = "/path/to/project"
3435
let baseConfig = BaseServerConfig(
3536
bazelWrapper: "bazel",
3637
targets: ["//HelloWorld"],
@@ -40,7 +41,7 @@ import Testing
4041

4142
let initializedConfig = InitializedServerConfig(
4243
baseConfig: baseConfig,
43-
rootUri: "/path/to/project",
44+
rootUri: rootUri,
4445
outputBase: "/tmp/output_base",
4546
outputPath: "/tmp/output_path",
4647
devDir: "/Applications/Xcode.app/Contents/Developer",
@@ -52,6 +53,7 @@ import Testing
5253
"bazel --output_base=/tmp/output_base build //HelloWorld --config=index"
5354
commandRunner.setResponse(
5455
for: expectedCommand,
56+
cwd: rootUri,
5557
response: "")
5658

5759
let chmodCommand = "chmod -R 777 /tmp/output_base"
@@ -72,7 +74,7 @@ import Testing
7274
let ranCommands = commandRunner.commands
7375
#expect(ranCommands.count == 2)
7476
#expect(ranCommands[0].command == expectedCommand)
75-
#expect(ranCommands[0].cwd == "/path/to/project")
77+
#expect(ranCommands[0].cwd == rootUri)
7678
#expect(ranCommands[1].command == chmodCommand)
7779
#expect(ranCommands[1].cwd == nil)
7880
}

0 commit comments

Comments
 (0)