mirror of
https://github.com/apple/swift-argument-parser.git
synced 2026-06-06 20:18:23 +00:00
211 lines
10 KiB
Swift
211 lines
10 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
|
|
import ArgumentParserTestHelpers
|
|
import ArgumentParser
|
|
|
|
/// The goal of this test class is to validate source compatibility. By running
|
|
/// this class's tests, all property wrapper initializers should be called.
|
|
final class SourceCompatEndToEndTests: XCTestCase {}
|
|
|
|
// MARK: - Property Wrapper Initializers
|
|
|
|
fileprivate struct AlmostAllArguments: ParsableArguments {
|
|
@Argument(help: "") var a_newDefaultSyntax: Int = 0
|
|
@Argument() var a0: Int
|
|
@Argument(help: "") var a1: Int
|
|
@Argument var a2_newDefaultSyntax: Int = 0
|
|
|
|
@Argument(help: "", transform: { _ in 0 }) var b_newDefaultSyntax: Int = 0
|
|
@Argument var b1_newDefaultSyntax: Int = 0
|
|
@Argument(help: "") var b2: Int
|
|
@Argument(transform: { _ in 0 }) var b3: Int
|
|
@Argument(help: "", transform: { _ in 0 }) var b4: Int
|
|
@Argument(transform: { _ in 0 }) var b5_newDefaultSyntax: Int = 0
|
|
@Argument(help: "") var b6_newDefaultSyntax: Int = 0
|
|
|
|
@Argument() var c0: Int?
|
|
@Argument(help: "") var c1: Int?
|
|
|
|
@Argument(help: "") var d2: Int?
|
|
@Argument(transform: { _ in 0 }) var d3: Int?
|
|
@Argument(help: "", transform: { _ in 0 }) var d4: Int?
|
|
|
|
@Argument(parsing: .remaining, help: "") var e: [Int] = [1, 2]
|
|
@Argument(parsing: .remaining, help: "") var e1: [Int]
|
|
@Argument(parsing: .remaining) var e2: [Int] = [1, 2]
|
|
@Argument(help: "") var e3: [Int] = [1, 2]
|
|
@Argument() var e4: [Int]
|
|
@Argument(help: "") var e5: [Int]
|
|
@Argument(parsing: .remaining) var e6: [Int]
|
|
@Argument() var e7: [Int] = [1, 2]
|
|
@Argument(parsing: .remaining, help: "", transform: { _ in 0 }) var e8: [Int] = [1, 2]
|
|
@Argument(parsing: .remaining, help: "", transform: { _ in 0 }) var e9: [Int]
|
|
@Argument(parsing: .remaining, transform: { _ in 0 }) var e10: [Int] = [1, 2]
|
|
@Argument(help: "", transform: { _ in 0 }) var e11: [Int] = [1, 2]
|
|
@Argument(transform: { _ in 0 }) var e12: [Int]
|
|
@Argument(help: "", transform: { _ in 0 }) var e13: [Int]
|
|
@Argument(parsing: .remaining, transform: { _ in 0 }) var e14: [Int]
|
|
@Argument(transform: { _ in 0 }) var e15: [Int] = [1, 2]
|
|
}
|
|
|
|
fileprivate struct AllOptions: ParsableArguments {
|
|
@Option(name: .long, parsing: .next, help: "") var a_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next, help: "") var a1_newDefaultSyntax: Int = 0
|
|
@Option(name: .long, parsing: .next, help: "") var a2: Int
|
|
@Option(name: .long, help: "") var a3_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next, help: "") var a4: Int
|
|
@Option(help: "") var a5_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next) var a6_newDefaultSyntax: Int = 0
|
|
@Option(name: .long, help: "") var a7: Int
|
|
@Option(name: .long, parsing: .next) var a8: Int
|
|
@Option(name: .long) var a9_newDefaultSyntax: Int = 0
|
|
@Option(name: .long) var a10: Int
|
|
@Option var a11_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next) var a12: Int
|
|
@Option(help: "") var a13: Int
|
|
|
|
@Option(name: .long, parsing: .next, help: "") var b2: Int?
|
|
@Option(parsing: .next, help: "") var b4: Int?
|
|
@Option(name: .long, help: "") var b7: Int?
|
|
@Option(name: .long, parsing: .next) var b8: Int?
|
|
@Option(name: .long) var b10: Int?
|
|
@Option(parsing: .next) var b12: Int?
|
|
@Option(help: "") var b13: Int?
|
|
|
|
@Option(name: .long, parsing: .next, help: "", transform: { _ in 0 }) var c_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next, help: "", transform: { _ in 0 }) var c1_newDefaultSyntax: Int = 0
|
|
@Option(name: .long, parsing: .next, help: "", transform: { _ in 0 }) var c2: Int
|
|
@Option(name: .long, help: "", transform: { _ in 0 }) var c3_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next, help: "", transform: { _ in 0 }) var c4: Int
|
|
@Option(help: "", transform: { _ in 0 }) var c5_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next, transform: { _ in 0 }) var c6_newDefaultSyntax: Int = 0
|
|
@Option(name: .long, help: "", transform: { _ in 0 }) var c7: Int
|
|
@Option(name: .long, parsing: .next, transform: { _ in 0 }) var c8: Int
|
|
@Option(name: .long, transform: { _ in 0 }) var c9_newDefaultSyntax: Int = 0
|
|
@Option(name: .long, transform: { _ in 0 }) var c10: Int
|
|
@Option(transform: { _ in 0 }) var c11_newDefaultSyntax: Int = 0
|
|
@Option(parsing: .next, transform: { _ in 0 }) var c12: Int
|
|
@Option(help: "", transform: { _ in 0 }) var c13: Int
|
|
|
|
@Option(name: .long, parsing: .next, help: "", transform: { _ in 0 }) var d2: Int?
|
|
@Option(parsing: .next, help: "", transform: { _ in 0 }) var d4: Int?
|
|
@Option(name: .long, help: "", transform: { _ in 0 }) var d7: Int?
|
|
@Option(name: .long, parsing: .next, transform: { _ in 0 }) var d8: Int?
|
|
@Option(name: .long, transform: { _ in 0 }) var d10: Int?
|
|
@Option(parsing: .next, transform: { _ in 0 }) var d12: Int?
|
|
@Option(help: "", transform: { _ in 0 }) var d13: Int?
|
|
|
|
@Option(name: .long, parsing: .singleValue, help: "") var e: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue, help: "") var e1: [Int] = [1, 2]
|
|
@Option(name: .long, parsing: .singleValue, help: "") var e2: [Int]
|
|
@Option(name: .long, help: "") var e3: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue, help: "") var e4: [Int]
|
|
@Option(help: "") var e5: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue) var e6: [Int] = [1, 2]
|
|
@Option(name: .long, help: "") var e7: [Int]
|
|
@Option(name: .long, parsing: .singleValue) var e8: [Int]
|
|
@Option(name: .long) var e9: [Int] = [1, 2]
|
|
@Option(name: .long) var e10: [Int]
|
|
@Option() var e11: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue) var e12: [Int]
|
|
@Option(help: "") var e13: [Int]
|
|
|
|
@Option(name: .long, parsing: .singleValue, help: "", transform: { _ in 0 }) var f: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue, help: "", transform: { _ in 0 }) var f1: [Int] = [1, 2]
|
|
@Option(name: .long, parsing: .singleValue, help: "", transform: { _ in 0 }) var f2: [Int]
|
|
@Option(name: .long, help: "", transform: { _ in 0 }) var f3: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue, help: "", transform: { _ in 0 }) var f4: [Int]
|
|
@Option(help: "", transform: { _ in 0 }) var f5: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue, transform: { _ in 0 }) var f6: [Int] = [1, 2]
|
|
@Option(name: .long, help: "", transform: { _ in 0 }) var f7: [Int]
|
|
@Option(name: .long, parsing: .singleValue, transform: { _ in 0 }) var f8: [Int]
|
|
@Option(name: .long, transform: { _ in 0 }) var f9: [Int] = [1, 2]
|
|
@Option(name: .long, transform: { _ in 0 }) var f10: [Int]
|
|
@Option(transform: { _ in 0 }) var f11: [Int] = [1, 2]
|
|
@Option(parsing: .singleValue, transform: { _ in 0 }) var f12: [Int]
|
|
@Option(help: "", transform: { _ in 0 }) var f13: [Int]
|
|
}
|
|
|
|
struct AllFlags: ParsableArguments {
|
|
enum E: String, EnumerableFlag {
|
|
case one, two, three
|
|
}
|
|
|
|
@Flag(name: .long, help: "") var a_explicitFalse: Bool = false
|
|
@Flag() var a0_explicitFalse: Bool = false
|
|
@Flag(name: .long) var a1_explicitFalse: Bool = false
|
|
@Flag(help: "") var a2_explicitFalse: Bool = false
|
|
|
|
@Flag(name: .long, inversion: .prefixedNo, exclusivity: .chooseLast, help: "") var b: Bool
|
|
@Flag(inversion: .prefixedNo, exclusivity: .chooseLast, help: "") var b1: Bool
|
|
@Flag(name: .long, inversion: .prefixedNo, help: "") var b2: Bool
|
|
@Flag(name: .long, inversion: .prefixedNo, exclusivity: .chooseLast) var b3: Bool
|
|
@Flag(inversion: .prefixedNo, help: "") var b4: Bool
|
|
@Flag(inversion: .prefixedNo, exclusivity: .chooseLast) var b5: Bool
|
|
@Flag(name: .long, inversion: .prefixedNo) var b6: Bool
|
|
@Flag(inversion: .prefixedNo) var b7: Bool
|
|
|
|
@Flag(name: .long, inversion: .prefixedNo, exclusivity: .chooseLast, help: "") var c_newDefaultSyntax: Bool = false
|
|
@Flag(inversion: .prefixedNo, exclusivity: .chooseLast, help: "") var c1_newDefaultSyntax: Bool = false
|
|
@Flag(name: .long, inversion: .prefixedNo, help: "") var c2_newDefaultSyntax: Bool = false
|
|
@Flag(name: .long, inversion: .prefixedNo, exclusivity: .chooseLast) var c3_newDefaultSyntax: Bool = false
|
|
@Flag(inversion: .prefixedNo, help: "") var c4_newDefaultSyntax: Bool = false
|
|
@Flag(inversion: .prefixedNo, exclusivity: .chooseLast) var c5_newDefaultSyntax: Bool = false
|
|
@Flag(name: .long, inversion: .prefixedNo) var c6_newDefaultSyntax: Bool = false
|
|
@Flag(inversion: .prefixedNo) var c7_newDefaultSyntax: Bool = false
|
|
|
|
@Flag(name: .long, inversion: .prefixedNo, exclusivity: .chooseLast, help: "") var d_implicitNil: Bool
|
|
@Flag(inversion: .prefixedNo, exclusivity: .chooseLast, help: "") var d1_implicitNil: Bool
|
|
@Flag(name: .long, inversion: .prefixedNo, help: "") var d2_implicitNil: Bool
|
|
@Flag(name: .long, inversion: .prefixedNo, exclusivity: .chooseLast) var d3_implicitNil: Bool
|
|
@Flag(inversion: .prefixedNo, help: "") var d4_implicitNil: Bool
|
|
@Flag(inversion: .prefixedNo, exclusivity: .chooseLast) var d5_implicitNil: Bool
|
|
@Flag(name: .long, inversion: .prefixedNo) var d6_implicitNil: Bool
|
|
@Flag(inversion: .prefixedNo) var d7_implicitNil: Bool
|
|
|
|
@Flag(name: .long, help: "") var e: Int
|
|
@Flag() var e0: Int
|
|
@Flag(name: .long) var e1: Int
|
|
@Flag(help: "") var e2: Int
|
|
|
|
@Flag(exclusivity: .chooseLast, help: "") var f_newDefaultSyntax: E = .one
|
|
@Flag() var f1: E
|
|
@Flag(exclusivity: .chooseLast, help: "") var f2: E
|
|
@Flag(help: "") var f3_newDefaultSyntax: E = .one
|
|
@Flag(exclusivity: .chooseLast) var f4_newDefaultSyntax: E = .one
|
|
@Flag(help: "") var f5: E
|
|
@Flag(exclusivity: .chooseLast) var f6: E
|
|
@Flag var f7_newDefaultSyntax: E = .one
|
|
|
|
@Flag(exclusivity: .chooseLast, help: "") var g: E?
|
|
@Flag() var g1: E?
|
|
@Flag(help: "") var g2: E?
|
|
@Flag(exclusivity: .chooseLast) var g3: E?
|
|
|
|
@Flag(help: "") var h: [E] = []
|
|
@Flag() var h1: [E] = []
|
|
@Flag(help: "") var h2: [E]
|
|
@Flag() var h3: [E]
|
|
}
|
|
|
|
extension SourceCompatEndToEndTests {
|
|
func testParsingAll() throws {
|
|
// This is just checking building the argument definitions, not the actual
|
|
// validation or usage of these definitions, which would fail.
|
|
_ = AlmostAllArguments()
|
|
_ = AllOptions()
|
|
_ = AllFlags()
|
|
}
|
|
}
|
|
|