1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
//===----------------------------------------------------------*- 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")
}
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 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")
}
}
|