| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- //===----------------------------------------------------------------------===//
- //
- // 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 ArgumentParser
- import XCTest
- final class AsyncCommandEndToEndTests: XCTestCase {}
- actor AsyncStatusCheck {
- struct Status: OptionSet {
- var rawValue: UInt8
- static var root: Self { .init(rawValue: 1 << 0) }
- static var sub: Self { .init(rawValue: 1 << 1) }
- }
- @MainActor
- var status: Status = []
- @MainActor
- func update(_ status: Status) {
- self.status.insert(status)
- }
- }
- @MainActor
- var statusCheck = AsyncStatusCheck()
- // MARK: AsyncParsableCommand.main() testing
- struct AsyncCommand: AsyncParsableCommand {
- static var configuration: CommandConfiguration {
- .init(subcommands: [SubCommand.self])
- }
- func run() async throws {
- await statusCheck.update(.root)
- }
- struct SubCommand: AsyncParsableCommand {
- func run() async throws {
- await statusCheck.update(.sub)
- }
- }
- }
- // swift-format-ignore: AlwaysUseLowerCamelCase
- // https://github.com/apple/swift-argument-parser/issues/710
- extension AsyncCommandEndToEndTests {
- @MainActor
- func testAsyncMain_root() async throws {
- XCTAssertFalse(statusCheck.status.contains(.root))
- await AsyncCommand.main([])
- XCTAssertTrue(statusCheck.status.contains(.root))
- }
- @MainActor
- func testAsyncMain_sub() async throws {
- XCTAssertFalse(statusCheck.status.contains(.sub))
- await AsyncCommand.main(["sub-command"])
- XCTAssertTrue(statusCheck.status.contains(.sub))
- }
- }
|