@@ -385,7 +385,17 @@ fileprivate struct OptionPropertyInitArguments_Default: ParsableArguments {
385385 var transformedData : String = " test "
386386}
387387
388- fileprivate struct OptionPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
388+ fileprivate struct RequiredOptionPropertyInitArguments_Initial : ParsableArguments {
389+ @Option ( initial: " test " )
390+ var data : String
391+ }
392+
393+ fileprivate struct RequiredOptionPropertyInitArguments_Transform_Initial : ParsableArguments {
394+ @Option ( transform: exclaim, initial: " test " )
395+ var data : String
396+ }
397+
398+ fileprivate struct RequiredOptionPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
389399 @Option ( )
390400 var data : String
391401}
@@ -412,12 +422,37 @@ extension DefaultsEndToEndTests {
412422
413423 /// Tests that *not* providing a default value still parses the argument correctly from the command-line.
414424 /// This test is almost certainly duplicated by others in the repository, but allows for quick use of test filtering during development on the initialization functionality.
415- func testParsing_OptionPropertyInit_NoDefault_NoTransform ( ) throws {
416- AssertParse ( OptionPropertyInitArguments_NoDefault_NoTransform . self, [ " --data " , " test " ] ) { arguments in
425+ func testParsing_RequiredOptionPropertyInit_NoDefault_NoTransform ( ) throws {
426+ AssertParse ( RequiredOptionPropertyInitArguments_NoDefault_NoTransform . self, [ " --data " , " test " ] ) { arguments in
417427 XCTAssertEqual ( arguments. data, " test " )
418428 }
419429 }
420430
431+ func testParsing_RequiredOptionPropertyInit_NoDefault_NoTransform_NoInput_Fails( ) throws {
432+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_NoDefault_NoTransform . parse ( [ ] ) )
433+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_NoDefault_NoTransform . parse ( [ " --data " ] ) )
434+ }
435+
436+ func testParsing_RequiredOptionPropertyInitArguments_Initial_UsesInitialValue( ) {
437+ AssertParse ( RequiredOptionPropertyInitArguments_Initial . self, [ ] ) { arguments in
438+ XCTAssertEqual ( arguments. data, " test " )
439+ }
440+ }
441+
442+ func testParsing_RequiredOptionPropertyInitArguments_Initial_IncompleteInput_Fails( ) throws {
443+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_Initial . parse ( [ " --data " ] ) )
444+ }
445+
446+ func testParsing_RequiredOptionPropertyInitArguments_Transform_Initial_UsesInitialValue( ) {
447+ AssertParse ( RequiredOptionPropertyInitArguments_Transform_Initial . self, [ ] ) { arguments in
448+ XCTAssertEqual ( arguments. data, " test " )
449+ }
450+ }
451+
452+ func testParsing_RequiredOptionPropertyInitArguments_Transform_Initial_IncompleteInput_Fails( ) throws {
453+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_Transform_Initial . parse ( [ " --data " ] ) )
454+ }
455+
421456 /// Tests that using default property initialization syntax on a property with a `transform` function provided parses the default value for the argument when nothing is provided from the command-line.
422457 func testParsing_OptionPropertyInit_Default_Transform_UseDefault( ) throws {
423458 AssertParse ( OptionPropertyInitArguments_Default . self, [ ] ) { arguments in
@@ -439,6 +474,11 @@ extension DefaultsEndToEndTests {
439474 XCTAssertEqual ( arguments. transformedData, " test! " )
440475 }
441476 }
477+
478+ func testParsing_OptionPropertyInit_NoDefault_Transform_NoInput_Fails( ) throws {
479+ XCTAssertThrowsError ( try OptionPropertyInitArguments_NoDefault_Transform . parse ( [ ] ) )
480+ XCTAssertThrowsError ( try OptionPropertyInitArguments_NoDefault_Transform . parse ( [ " --transformed-data " ] ) )
481+ }
442482}
443483
444484
@@ -447,14 +487,24 @@ fileprivate struct ArgumentPropertyInitArguments_Default_NoTransform: ParsableAr
447487 var data : String = " test "
448488}
449489
490+ fileprivate struct ArgumentPropertyInitArguments_Initial_NoTransform : ParsableArguments {
491+ @Argument ( initial: " test " )
492+ var data : String
493+ }
494+
450495fileprivate struct ArgumentPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
451496 @Argument ( )
452497 var data : String
453498}
454499
455500fileprivate struct ArgumentPropertyInitArguments_Default_Transform : ParsableArguments {
456501 @Argument ( transform: exclaim)
457- var transformedData : String = " test "
502+ var transformedData : String = " test "
503+ }
504+
505+ fileprivate struct ArgumentPropertyInitArguments_Transform_Initial : ParsableArguments {
506+ @Argument ( transform: exclaim, initial: " test " )
507+ var transformedData : String
458508}
459509
460510fileprivate struct ArgumentPropertyInitArguments_NoDefault_Transform : ParsableArguments {
@@ -470,6 +520,12 @@ extension DefaultsEndToEndTests {
470520 }
471521 }
472522
523+ func testParsing_ArgumentPropertyInit_Initial_NoTransform_UseDefault( ) throws {
524+ AssertParse ( ArgumentPropertyInitArguments_Initial_NoTransform . self, [ ] ) { arguments in
525+ XCTAssertEqual ( arguments. data, " test " )
526+ }
527+ }
528+
473529 /// Tests that using default property initialization syntax parses the command-line-provided value for the argument when provided.
474530 func testParsing_ArgumentPropertyInit_Default_NoTransform_OverrideDefault( ) throws {
475531 AssertParse ( ArgumentPropertyInitArguments_Default_NoTransform . self, [ " test2 " ] ) { arguments in
@@ -492,6 +548,12 @@ extension DefaultsEndToEndTests {
492548 }
493549 }
494550
551+ func testParsing_ArgumentPropertyInit_Transform_Initial_UseDefault( ) throws {
552+ AssertParse ( ArgumentPropertyInitArguments_Transform_Initial . self, [ ] ) { arguments in
553+ XCTAssertEqual ( arguments. transformedData, " test " )
554+ }
555+ }
556+
495557 /// Tests that using default property initialization syntax on a property with a `transform` function provided parses and transforms the command-line-provided value for the argument when provided.
496558 func testParsing_ArgumentPropertyInit_Default_Transform_OverrideDefault( ) throws {
497559 AssertParse ( ArgumentPropertyInitArguments_Default_Transform . self, [ " test2 " ] ) { arguments in
0 commit comments