Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
171 changes: 87 additions & 84 deletions Tests/ArgumentParserEndToEndTests/JoinedEndToEndTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// This source file is part of the Swift Argument Parser open source project
//
// Copyright (c) 2020 Apple Inc. and the Swift project authors
// Copyright (c) 2020-2026 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
Expand All @@ -12,9 +12,8 @@
import ArgumentParser
import ArgumentParserTestHelpers
import Testing
import XCTest

final class JoinedEndToEndTests: XCTestCase {}
@Suite struct JoinedEndToEndTests {}

// MARK: -

Expand All @@ -32,68 +31,68 @@ private struct Foo: ParsableArguments {
// swift-format-ignore: AlwaysUseLowerCamelCase
// https://github.com/apple/swift-argument-parser/issues/710
extension JoinedEndToEndTests {
func testSingleValueParsing() throws {
AssertParse(Foo.self, []) { foo in
XCTAssertEqual(foo.file, "")
XCTAssertEqual(foo.debug, "")
XCTAssertEqual(foo.fdi, false)
@Test func singleValueParsing() throws {
expectParse(Foo.self, []) { foo in
#expect(foo.file == "")
#expect(foo.debug == "")
#expect(foo.fdi == false)
}

AssertParse(Foo.self, ["-f", "file", "-d=Debug"]) { foo in
XCTAssertEqual(foo.file, "file")
XCTAssertEqual(foo.debug, "Debug")
XCTAssertEqual(foo.fdi, false)
expectParse(Foo.self, ["-f", "file", "-d=Debug"]) { foo in
#expect(foo.file == "file")
#expect(foo.debug == "Debug")
#expect(foo.fdi == false)
}

AssertParse(Foo.self, ["-f", "file", "-d", "Debug"]) { foo in
XCTAssertEqual(foo.file, "file")
XCTAssertEqual(foo.debug, "Debug")
XCTAssertEqual(foo.fdi, false)
expectParse(Foo.self, ["-f", "file", "-d", "Debug"]) { foo in
#expect(foo.file == "file")
#expect(foo.debug == "Debug")
#expect(foo.fdi == false)
}

AssertParse(Foo.self, ["-f", "file", "-dDebug"]) { foo in
XCTAssertEqual(foo.file, "file")
XCTAssertEqual(foo.debug, "Debug")
XCTAssertEqual(foo.fdi, false)
expectParse(Foo.self, ["-f", "file", "-dDebug"]) { foo in
#expect(foo.file == "file")
#expect(foo.debug == "Debug")
#expect(foo.fdi == false)
}

AssertParse(Foo.self, ["-dDebug", "-f", "file"]) { foo in
XCTAssertEqual(foo.file, "file")
XCTAssertEqual(foo.debug, "Debug")
XCTAssertEqual(foo.fdi, false)
expectParse(Foo.self, ["-dDebug", "-f", "file"]) { foo in
#expect(foo.file == "file")
#expect(foo.debug == "Debug")
#expect(foo.fdi == false)
}

AssertParse(Foo.self, ["-dDebug"]) { foo in
XCTAssertEqual(foo.file, "")
XCTAssertEqual(foo.debug, "Debug")
XCTAssertEqual(foo.fdi, false)
expectParse(Foo.self, ["-dDebug"]) { foo in
#expect(foo.file == "")
#expect(foo.debug == "Debug")
#expect(foo.fdi == false)
}

AssertParse(Foo.self, ["-fd", "file", "Debug"]) { foo in
XCTAssertEqual(foo.file, "file")
XCTAssertEqual(foo.debug, "Debug")
XCTAssertEqual(foo.fdi, false)
expectParse(Foo.self, ["-fd", "file", "Debug"]) { foo in
#expect(foo.file == "file")
#expect(foo.debug == "Debug")
#expect(foo.fdi == false)
}

AssertParse(Foo.self, ["-fd", "file", "Debug", "-fdi"]) { foo in
XCTAssertEqual(foo.file, "file")
XCTAssertEqual(foo.debug, "Debug")
XCTAssertEqual(foo.fdi, true)
expectParse(Foo.self, ["-fd", "file", "Debug", "-fdi"]) { foo in
#expect(foo.file == "file")
#expect(foo.debug == "Debug")
#expect(foo.fdi == true)
}

AssertParse(Foo.self, ["-fdi"]) { foo in
XCTAssertEqual(foo.file, "")
XCTAssertEqual(foo.debug, "")
XCTAssertEqual(foo.fdi, true)
expectParse(Foo.self, ["-fdi"]) { foo in
#expect(foo.file == "")
#expect(foo.debug == "")
#expect(foo.fdi == true)
}
}

func testSingleValueParsing_Fails() throws {
XCTAssertThrowsError(try Foo.parse(["-f", "-d"]))
XCTAssertThrowsError(try Foo.parse(["-f", "file", "-d"]))
XCTAssertThrowsError(try Foo.parse(["-fd", "file"]))
XCTAssertThrowsError(try Foo.parse(["-fdDebug", "file"]))
XCTAssertThrowsError(try Foo.parse(["-fFile"]))
@Test func singleValueParsing_Fails() throws {
#expect(throws: (any Error).self) { try Foo.parse(["-f", "-d"]) }
#expect(throws: (any Error).self) { try Foo.parse(["-f", "file", "-d"]) }
#expect(throws: (any Error).self) { try Foo.parse(["-fd", "file"]) }
#expect(throws: (any Error).self) { try Foo.parse(["-fdDebug", "file"]) }
#expect(throws: (any Error).self) { try Foo.parse(["-fFile"]) }
}
}

Expand All @@ -107,27 +106,27 @@ private struct Bar: ParsableArguments {
// swift-format-ignore: AlwaysUseLowerCamelCase
// https://github.com/apple/swift-argument-parser/issues/710

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: these comments are removed in another PR.

extension JoinedEndToEndTests {
func testArrayValueParsing() throws {
AssertParse(Bar.self, []) { bar in
XCTAssertEqual(bar.debug, [])
@Test func arrayValueParsing() throws {
expectParse(Bar.self, []) { bar in
#expect(bar.debug == [])
}

AssertParse(Bar.self, ["-Ddebug1"]) { bar in
XCTAssertEqual(bar.debug, ["debug1"])
expectParse(Bar.self, ["-Ddebug1"]) { bar in
#expect(bar.debug == ["debug1"])
}

AssertParse(Bar.self, ["-Ddebug1", "-Ddebug2", "-Ddebug3"]) { bar in
XCTAssertEqual(bar.debug, ["debug1", "debug2", "debug3"])
expectParse(Bar.self, ["-Ddebug1", "-Ddebug2", "-Ddebug3"]) { bar in
#expect(bar.debug == ["debug1", "debug2", "debug3"])
}

AssertParse(Bar.self, ["-D", "debug1", "-Ddebug2", "-D", "debug3"]) { bar in
XCTAssertEqual(bar.debug, ["debug1", "debug2", "debug3"])
expectParse(Bar.self, ["-D", "debug1", "-Ddebug2", "-D", "debug3"]) { bar in
#expect(bar.debug == ["debug1", "debug2", "debug3"])
}
}

func testArrayValueParsing_Fails() throws {
XCTAssertThrowsError(try Bar.parse(["-D"]))
XCTAssertThrowsError(try Bar.parse(["-Ddebug1", "debug2"]))
@Test func arrayValueParsing_Fails() throws {
#expect(throws: (any Error).self) { try Bar.parse(["-D"]) }
#expect(throws: (any Error).self) { try Bar.parse(["-Ddebug1", "debug2"]) }
}
}

Expand All @@ -144,31 +143,33 @@ private struct Baz: ParsableArguments {
// swift-format-ignore: AlwaysUseLowerCamelCase
// https://github.com/apple/swift-argument-parser/issues/710
extension JoinedEndToEndTests {
func testArrayUpToNextParsing() throws {
AssertParse(Baz.self, []) { baz in
XCTAssertEqual(baz.debug, [])
@Test func arrayUpToNextParsing() throws {
expectParse(Baz.self, []) { baz in
#expect(baz.debug == [])
}

AssertParse(Baz.self, ["-Ddebug1", "debug2"]) { baz in
XCTAssertEqual(baz.debug, ["debug1", "debug2"])
XCTAssertEqual(baz.verbose, false)
expectParse(Baz.self, ["-Ddebug1", "debug2"]) { baz in
#expect(baz.debug == ["debug1", "debug2"])
#expect(baz.verbose == false)
}

AssertParse(Baz.self, ["-Ddebug1", "debug2", "--verbose"]) { baz in
XCTAssertEqual(baz.debug, ["debug1", "debug2"])
XCTAssertEqual(baz.verbose, true)
expectParse(Baz.self, ["-Ddebug1", "debug2", "--verbose"]) { baz in
#expect(baz.debug == ["debug1", "debug2"])
#expect(baz.verbose == true)
}

AssertParse(Baz.self, ["-Ddebug1", "debug2", "-Ddebug3", "debug4"]) { baz in
XCTAssertEqual(baz.debug, ["debug1", "debug2", "debug3", "debug4"])
expectParse(Baz.self, ["-Ddebug1", "debug2", "-Ddebug3", "debug4"]) { baz in
#expect(baz.debug == ["debug1", "debug2", "debug3", "debug4"])
}
}

func testArrayUpToNextParsing_Fails() throws {
XCTAssertThrowsError(try Baz.parse(["-D", "--other"]))
XCTAssertThrowsError(try Baz.parse(["-Ddebug", "--other"]))
XCTAssertThrowsError(try Baz.parse(["-Ddebug", "--other"]))
XCTAssertThrowsError(try Baz.parse(["-Ddebug", "debug", "--other"]))
@Test func arrayUpToNextParsing_Fails() throws {
#expect(throws: (any Error).self) { try Baz.parse(["-D", "--other"]) }
#expect(throws: (any Error).self) { try Baz.parse(["-Ddebug", "--other"]) }
#expect(throws: (any Error).self) { try Baz.parse(["-Ddebug", "--other"]) }
#expect(throws: (any Error).self) {
try Baz.parse(["-Ddebug", "debug", "--other"])
}
}
}

Expand All @@ -182,24 +183,26 @@ private struct Qux: ParsableArguments {
// swift-format-ignore: AlwaysUseLowerCamelCase
// https://github.com/apple/swift-argument-parser/issues/710
extension JoinedEndToEndTests {
func testArrayRemainingParsing() throws {
AssertParse(Qux.self, []) { qux in
XCTAssertEqual(qux.debug, [])
@Test func arrayRemainingParsing() throws {
expectParse(Qux.self, []) { qux in
#expect(qux.debug == [])
}

AssertParse(Qux.self, ["-Ddebug1", "debug2"]) { qux in
XCTAssertEqual(qux.debug, ["debug1", "debug2"])
expectParse(Qux.self, ["-Ddebug1", "debug2"]) { qux in
#expect(qux.debug == ["debug1", "debug2"])
}

AssertParse(
expectParse(
Qux.self, ["-Ddebug1", "debug2", "-Ddebug3", "debug4", "--other"]
) { qux in
XCTAssertEqual(
qux.debug, ["debug1", "debug2", "-Ddebug3", "debug4", "--other"])
#expect(
qux.debug == ["debug1", "debug2", "-Ddebug3", "debug4", "--other"])
}
}

func testArrayRemainingParsing_Fails() throws {
XCTAssertThrowsError(try Baz.parse(["--other", "-Ddebug", "debug"]))
@Test func arrayRemainingParsing_Fails() throws {
#expect(throws: (any Error).self) {
try Baz.parse(["--other", "-Ddebug", "debug"])
}
}
}
Loading
Loading