@@ -80,10 +80,9 @@ extension FlagsEndToEndTests {
8080 AssertParse ( Bar . self, [ " --enable-logging " ] ) { options in
8181 XCTAssertEqual ( options. logging, true )
8282 }
83- // Can't test this yet, because .chooseFirst flags don't work
84- // AssertParse(Bar.self, ["--enable-logging", "--disable-logging"]) { options in
85- // XCTAssertEqual(options.logging, false)
86- // }
83+ AssertParse ( Bar . self, [ " --disable-logging " , " --enable-logging " ] ) { options in
84+ XCTAssertEqual ( options. logging, false )
85+ }
8786 }
8887}
8988
@@ -263,3 +262,25 @@ extension FlagsEndToEndTests {
263262 XCTAssertThrowsError ( try Qux . parse ( [ " --pink " , " --small " , " --bloop " ] ) )
264263 }
265264}
265+
266+ fileprivate struct RepeatOK : ParsableArguments {
267+ @Flag ( exclusivity: . chooseFirst)
268+ var color : Color
269+
270+ @Flag ( exclusivity: . chooseLast)
271+ var shape : Shape
272+ }
273+
274+ extension FlagsEndToEndTests {
275+ func testParsingCaseIterable_RepeatableFlags( ) throws {
276+ AssertParse ( RepeatOK . self, [ " --pink " , " --purple " , " --square " ] ) { options in
277+ XCTAssertEqual ( options. color, . pink)
278+ XCTAssertEqual ( options. shape, . square)
279+ }
280+
281+ AssertParse ( RepeatOK . self, [ " --round " , " --oblong " , " --silver " ] ) { options in
282+ XCTAssertEqual ( options. color, . silver)
283+ XCTAssertEqual ( options. shape, . oblong)
284+ }
285+ }
286+ }
0 commit comments