mirror of
https://github.com/apple/swift-argument-parser.git
synced 2026-06-06 20:18:23 +00:00
93 lines
2.8 KiB
Swift
93 lines
2.8 KiB
Swift
//===----------------------------------------------------------*- swift -*-===//
|
||
//
|
||
// This source file is part of the Swift Argument Parser open source project
|
||
//
|
||
// Copyright (c) 2020 Apple Inc. and the Swift project authors
|
||
// Licensed under Apache License v2.0 with Runtime Library Exception
|
||
//
|
||
// See https://swift.org/LICENSE.txt for license information
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
|
||
import XCTest
|
||
@testable import ArgumentParser
|
||
|
||
final class ExitCodeTests: XCTestCase {
|
||
}
|
||
|
||
// MARK: -
|
||
|
||
extension ExitCodeTests {
|
||
struct A: ParsableArguments {}
|
||
struct E: Error {}
|
||
struct C: ParsableCommand {
|
||
static var configuration = CommandConfiguration(
|
||
version: "v1", shouldPromptForMissing: false)
|
||
}
|
||
|
||
func testExitCodes() {
|
||
XCTAssertEqual(ExitCode.failure, A.exitCode(for: E()))
|
||
XCTAssertEqual(ExitCode.validationFailure, A.exitCode(for: ValidationError("")))
|
||
|
||
do {
|
||
_ = try A.parse(["-h"])
|
||
XCTFail("Didn't throw help request error.")
|
||
} catch {
|
||
XCTAssertEqual(ExitCode.success, A.exitCode(for: error))
|
||
}
|
||
|
||
do {
|
||
_ = try A.parse(["--version"])
|
||
XCTFail("Didn't throw unrecognized --version error.")
|
||
} catch {
|
||
XCTAssertEqual(ExitCode.validationFailure, A.exitCode(for: error))
|
||
}
|
||
|
||
do {
|
||
_ = try C.parse(["--version"])
|
||
XCTFail("Didn't throw version request error.")
|
||
} catch {
|
||
XCTAssertEqual(ExitCode.success, C.exitCode(for: error))
|
||
}
|
||
}
|
||
|
||
func testExitCode_Success() {
|
||
XCTAssertFalse(A.exitCode(for: E()).isSuccess)
|
||
XCTAssertFalse(A.exitCode(for: ValidationError("")).isSuccess)
|
||
|
||
do {
|
||
_ = try A.parse(["-h"])
|
||
XCTFail("Didn't throw help request error.")
|
||
} catch {
|
||
XCTAssertTrue(A.exitCode(for: error).isSuccess)
|
||
}
|
||
|
||
do {
|
||
_ = try A.parse(["--version"])
|
||
XCTFail("Didn't throw unrecognized --version error.")
|
||
} catch {
|
||
XCTAssertFalse(A.exitCode(for: error).isSuccess)
|
||
}
|
||
|
||
do {
|
||
_ = try C.parse(["--version"])
|
||
XCTFail("Didn't throw version request error.")
|
||
} catch {
|
||
XCTAssertTrue(C.exitCode(for: error).isSuccess)
|
||
}
|
||
}
|
||
}
|
||
|
||
// MARK: - NSError tests
|
||
|
||
extension ExitCodeTests {
|
||
func testNSErrorIsHandled() {
|
||
struct NSErrorCommand: ParsableCommand {
|
||
static var configuration = CommandConfiguration(shouldPromptForMissing: false)
|
||
static let fileNotFoundNSError = NSError(domain: "", code: 1, userInfo: [NSLocalizedDescriptionKey: "The file “foo/bar” couldn’t be opened because there is no such file"])
|
||
}
|
||
XCTAssertEqual(NSErrorCommand.exitCode(for: NSErrorCommand.fileNotFoundNSError), ExitCode(rawValue: 1))
|
||
XCTAssertEqual(NSErrorCommand.message(for: NSErrorCommand.fileNotFoundNSError), "The file “foo/bar” couldn’t be opened because there is no such file")
|
||
}
|
||
}
|