@@ -385,7 +385,27 @@ fileprivate struct OptionPropertyInitArguments_Default: ParsableArguments {
385
385
var transformedData : String = " test "
386
386
}
387
387
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 {
389
409
@Option ( )
390
410
var data : String
391
411
}
@@ -412,12 +432,57 @@ extension DefaultsEndToEndTests {
412
432
413
433
/// Tests that *not* providing a default value still parses the argument correctly from the command-line.
414
434
/// 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
417
437
XCTAssertEqual ( arguments. data, " test " )
418
438
}
419
439
}
420
440
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
+
421
486
/// 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.
422
487
func testParsing_OptionPropertyInit_Default_Transform_UseDefault( ) throws {
423
488
AssertParse ( OptionPropertyInitArguments_Default . self, [ ] ) { arguments in
@@ -439,6 +504,11 @@ extension DefaultsEndToEndTests {
439
504
XCTAssertEqual ( arguments. transformedData, " test! " )
440
505
}
441
506
}
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
+ }
442
512
}
443
513
444
514
@@ -447,14 +517,24 @@ fileprivate struct ArgumentPropertyInitArguments_Default_NoTransform: ParsableAr
447
517
var data : String = " test "
448
518
}
449
519
520
+ fileprivate struct ArgumentPropertyInitArguments_Initial_NoTransform : ParsableArguments {
521
+ @Argument ( initial: " test " )
522
+ var data : String
523
+ }
524
+
450
525
fileprivate struct ArgumentPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
451
526
@Argument ( )
452
527
var data : String
453
528
}
454
529
455
530
fileprivate struct ArgumentPropertyInitArguments_Default_Transform : ParsableArguments {
456
531
@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
458
538
}
459
539
460
540
fileprivate struct ArgumentPropertyInitArguments_NoDefault_Transform : ParsableArguments {
@@ -470,6 +550,12 @@ extension DefaultsEndToEndTests {
470
550
}
471
551
}
472
552
553
+ func testParsing_ArgumentPropertyInit_Initial_NoTransform_UseDefault( ) throws {
554
+ AssertParse ( ArgumentPropertyInitArguments_Initial_NoTransform . self, [ ] ) { arguments in
555
+ XCTAssertEqual ( arguments. data, " test " )
556
+ }
557
+ }
558
+
473
559
/// Tests that using default property initialization syntax parses the command-line-provided value for the argument when provided.
474
560
func testParsing_ArgumentPropertyInit_Default_NoTransform_OverrideDefault( ) throws {
475
561
AssertParse ( ArgumentPropertyInitArguments_Default_NoTransform . self, [ " test2 " ] ) { arguments in
@@ -492,6 +578,12 @@ extension DefaultsEndToEndTests {
492
578
}
493
579
}
494
580
581
+ func testParsing_ArgumentPropertyInit_Transform_Initial_UseDefault( ) throws {
582
+ AssertParse ( ArgumentPropertyInitArguments_Transform_Initial . self, [ ] ) { arguments in
583
+ XCTAssertEqual ( arguments. transformedData, " test " )
584
+ }
585
+ }
586
+
495
587
/// 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.
496
588
func testParsing_ArgumentPropertyInit_Default_Transform_OverrideDefault( ) throws {
497
589
AssertParse ( ArgumentPropertyInitArguments_Default_Transform . self, [ " test2 " ] ) { arguments in
0 commit comments