@@ -385,7 +385,27 @@ 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 OptionalOptionPropertyInitArguments_Initial : ParsableArguments {
394+ @Option ( initial: " test " )
395+ var data : String ?
396+ }
397+
398+ fileprivate struct RequiredOptionPropertyInitArguments_Transform_Initial : ParsableArguments {
399+ @Option ( transform: exclaim, initial: " test " )
400+ var data : String
401+ }
402+
403+ fileprivate struct OptionalOptionPropertyInitArguments_Transform_Initial : ParsableArguments {
404+ @Option ( transform: exclaim, initial: " test " )
405+ var data : String ?
406+ }
407+
408+ fileprivate struct RequiredOptionPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
389409 @Option ( )
390410 var data : String
391411}
@@ -412,12 +432,57 @@ extension DefaultsEndToEndTests {
412432
413433 /// Tests that *not* providing a default value still parses the argument correctly from the command-line.
414434 /// 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
435+ func testParsing_RequiredOptionPropertyInit_NoDefault_NoTransform ( ) throws {
436+ AssertParse ( RequiredOptionPropertyInitArguments_NoDefault_NoTransform . self, [ " --data " , " test " ] ) { arguments in
417437 XCTAssertEqual ( arguments. data, " test " )
418438 }
419439 }
420440
441+ func testParsing_RequiredOptionPropertyInit_NoDefault_NoTransform_NoInput_Fails( ) throws {
442+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_NoDefault_NoTransform . parse ( [ ] ) )
443+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_NoDefault_NoTransform . parse ( [ " --data " ] ) )
444+ }
445+
446+ func testParsing_RequiredOptionPropertyInitArguments_Initial_UsesInitialValue( ) {
447+ AssertParse ( RequiredOptionPropertyInitArguments_Initial . self, [ ] ) { arguments in
448+ XCTAssertEqual ( arguments. data, " test " )
449+ }
450+ }
451+
452+ func testParsing_RequiredOptionPropertyInitArguments_Initial_IncompleteInput_Fails( ) throws {
453+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_Initial . parse ( [ " --data " ] ) )
454+ }
455+
456+ func testParsing_OptionalOptionPropertyInitArguments_Initial_UsesInitialValue( ) {
457+ AssertParse ( OptionalOptionPropertyInitArguments_Initial . self, [ ] ) { arguments in
458+ XCTAssertEqual ( arguments. data, " test " )
459+ }
460+ }
461+
462+ func testParsing_OptionalOptionPropertyInitArguments_Initial_IncompleteInput_Fails( ) throws {
463+ XCTAssertThrowsError ( try OptionalOptionPropertyInitArguments_Initial . parse ( [ " --data " ] ) )
464+ }
465+
466+ func testParsing_RequiredOptionPropertyInitArguments_Transform_Initial_UsesInitialValue( ) {
467+ AssertParse ( RequiredOptionPropertyInitArguments_Transform_Initial . self, [ ] ) { arguments in
468+ XCTAssertEqual ( arguments. data, " test " )
469+ }
470+ }
471+
472+ func testParsing_RequiredOptionPropertyInitArguments_Transform_Initial_IncompleteInput_Fails( ) throws {
473+ XCTAssertThrowsError ( try RequiredOptionPropertyInitArguments_Transform_Initial . parse ( [ " --data " ] ) )
474+ }
475+
476+ func testParsing_OptionalOptionPropertyInitArguments_Transform_Initial_UsesInitialValue( ) {
477+ AssertParse ( OptionalOptionPropertyInitArguments_Transform_Initial . self, [ ] ) { arguments in
478+ XCTAssertEqual ( arguments. data, " test " )
479+ }
480+ }
481+
482+ func testParsing_OptionalOptionPropertyInitArguments_Transform_Initial_IncompleteInput_Fails( ) throws {
483+ XCTAssertThrowsError ( try OptionalOptionPropertyInitArguments_Transform_Initial . parse ( [ " --data " ] ) )
484+ }
485+
421486 /// 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.
422487 func testParsing_OptionPropertyInit_Default_Transform_UseDefault( ) throws {
423488 AssertParse ( OptionPropertyInitArguments_Default . self, [ ] ) { arguments in
@@ -439,6 +504,11 @@ extension DefaultsEndToEndTests {
439504 XCTAssertEqual ( arguments. transformedData, " test! " )
440505 }
441506 }
507+
508+ func testParsing_OptionPropertyInit_NoDefault_Transform_NoInput_Fails( ) throws {
509+ XCTAssertThrowsError ( try OptionPropertyInitArguments_NoDefault_Transform . parse ( [ ] ) )
510+ XCTAssertThrowsError ( try OptionPropertyInitArguments_NoDefault_Transform . parse ( [ " --transformed-data " ] ) )
511+ }
442512}
443513
444514
@@ -447,14 +517,24 @@ fileprivate struct ArgumentPropertyInitArguments_Default_NoTransform: ParsableAr
447517 var data : String = " test "
448518}
449519
520+ fileprivate struct ArgumentPropertyInitArguments_Initial_NoTransform : ParsableArguments {
521+ @Argument ( initial: " test " )
522+ var data : String
523+ }
524+
450525fileprivate struct ArgumentPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
451526 @Argument ( )
452527 var data : String
453528}
454529
455530fileprivate struct ArgumentPropertyInitArguments_Default_Transform : ParsableArguments {
456531 @Argument ( transform: exclaim)
457- var transformedData : String = " test "
532+ var transformedData : String = " test "
533+ }
534+
535+ fileprivate struct ArgumentPropertyInitArguments_Transform_Initial : ParsableArguments {
536+ @Argument ( transform: exclaim, initial: " test " )
537+ var transformedData : String
458538}
459539
460540fileprivate struct ArgumentPropertyInitArguments_NoDefault_Transform : ParsableArguments {
@@ -470,6 +550,12 @@ extension DefaultsEndToEndTests {
470550 }
471551 }
472552
553+ func testParsing_ArgumentPropertyInit_Initial_NoTransform_UseDefault( ) throws {
554+ AssertParse ( ArgumentPropertyInitArguments_Initial_NoTransform . self, [ ] ) { arguments in
555+ XCTAssertEqual ( arguments. data, " test " )
556+ }
557+ }
558+
473559 /// Tests that using default property initialization syntax parses the command-line-provided value for the argument when provided.
474560 func testParsing_ArgumentPropertyInit_Default_NoTransform_OverrideDefault( ) throws {
475561 AssertParse ( ArgumentPropertyInitArguments_Default_NoTransform . self, [ " test2 " ] ) { arguments in
@@ -492,6 +578,12 @@ extension DefaultsEndToEndTests {
492578 }
493579 }
494580
581+ func testParsing_ArgumentPropertyInit_Transform_Initial_UseDefault( ) throws {
582+ AssertParse ( ArgumentPropertyInitArguments_Transform_Initial . self, [ ] ) { arguments in
583+ XCTAssertEqual ( arguments. transformedData, " test " )
584+ }
585+ }
586+
495587 /// 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.
496588 func testParsing_ArgumentPropertyInit_Default_Transform_OverrideDefault( ) throws {
497589 AssertParse ( ArgumentPropertyInitArguments_Default_Transform . self, [ " test2 " ] ) { arguments in
0 commit comments