CommanderBinderTests.swift•1.57 kB
import Commander
import Testing
@testable import PeekabooCLI
@Suite("Commander Binder")
struct CommanderBinderTests {
@Test("Runtime options map verbose flag")
func runtimeOptionVerbose() throws {
let parsed = ParsedValues(positional: [], options: [:], flags: ["verbose"])
let options = try CommanderCLIBinder.makeRuntimeOptions(from: parsed)
#expect(options.verbose == true)
#expect(options.jsonOutput == false)
}
@Test("Runtime options map json flag")
func runtimeOptionJson() throws {
let parsed = ParsedValues(positional: [], options: [:], flags: ["jsonOutput"])
let options = try CommanderCLIBinder.makeRuntimeOptions(from: parsed)
#expect(options.verbose == false)
#expect(options.jsonOutput == true)
}
@Test("Runtime options map log level option")
func runtimeOptionLogLevel() throws {
let parsed = ParsedValues(positional: [], options: ["logLevel": ["error"]], flags: [])
let options = try CommanderCLIBinder.makeRuntimeOptions(from: parsed)
#expect(options.logLevel == .error)
}
@Test("Runtime options validate log level")
func runtimeOptionInvalidLogLevel() {
let parsed = ParsedValues(positional: [], options: ["logLevel": ["nope"]], flags: [])
#expect(throws: CommanderBindingError.invalidArgument(
label: "logLevel",
value: "nope",
reason: "Unable to parse LogLevel"
)) {
_ = try CommanderCLIBinder.makeRuntimeOptions(from: parsed)
}
}
}