@@ -385,7 +385,17 @@ 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 RequiredOptionPropertyInitArguments_Transform_Initial : ParsableArguments {
394
+ @Option ( transform: exclaim, initial: " test " )
395
+ var data : String
396
+ }
397
+
398
+ fileprivate struct RequiredOptionPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
389
399
@Option ( )
390
400
var data : String
391
401
}
@@ -412,12 +422,37 @@ extension DefaultsEndToEndTests {
412
422
413
423
/// Tests that *not* providing a default value still parses the argument correctly from the command-line.
414
424
/// 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
417
427
XCTAssertEqual ( arguments. data, " test " )
418
428
}
419
429
}
420
430
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
+
421
456
/// 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
457
func testParsing_OptionPropertyInit_Default_Transform_UseDefault( ) throws {
423
458
AssertParse ( OptionPropertyInitArguments_Default . self, [ ] ) { arguments in
@@ -439,6 +474,11 @@ extension DefaultsEndToEndTests {
439
474
XCTAssertEqual ( arguments. transformedData, " test! " )
440
475
}
441
476
}
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
+ }
442
482
}
443
483
444
484
@@ -447,14 +487,24 @@ fileprivate struct ArgumentPropertyInitArguments_Default_NoTransform: ParsableAr
447
487
var data : String = " test "
448
488
}
449
489
490
+ fileprivate struct ArgumentPropertyInitArguments_Initial_NoTransform : ParsableArguments {
491
+ @Argument ( initial: " test " )
492
+ var data : String
493
+ }
494
+
450
495
fileprivate struct ArgumentPropertyInitArguments_NoDefault_NoTransform : ParsableArguments {
451
496
@Argument ( )
452
497
var data : String
453
498
}
454
499
455
500
fileprivate struct ArgumentPropertyInitArguments_Default_Transform : ParsableArguments {
456
501
@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
458
508
}
459
509
460
510
fileprivate struct ArgumentPropertyInitArguments_NoDefault_Transform : ParsableArguments {
@@ -470,6 +520,12 @@ extension DefaultsEndToEndTests {
470
520
}
471
521
}
472
522
523
+ func testParsing_ArgumentPropertyInit_Initial_NoTransform_UseDefault( ) throws {
524
+ AssertParse ( ArgumentPropertyInitArguments_Initial_NoTransform . self, [ ] ) { arguments in
525
+ XCTAssertEqual ( arguments. data, " test " )
526
+ }
527
+ }
528
+
473
529
/// Tests that using default property initialization syntax parses the command-line-provided value for the argument when provided.
474
530
func testParsing_ArgumentPropertyInit_Default_NoTransform_OverrideDefault( ) throws {
475
531
AssertParse ( ArgumentPropertyInitArguments_Default_NoTransform . self, [ " test2 " ] ) { arguments in
@@ -492,6 +548,12 @@ extension DefaultsEndToEndTests {
492
548
}
493
549
}
494
550
551
+ func testParsing_ArgumentPropertyInit_Transform_Initial_UseDefault( ) throws {
552
+ AssertParse ( ArgumentPropertyInitArguments_Transform_Initial . self, [ ] ) { arguments in
553
+ XCTAssertEqual ( arguments. transformedData, " test " )
554
+ }
555
+ }
556
+
495
557
/// 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
558
func testParsing_ArgumentPropertyInit_Default_Transform_OverrideDefault( ) throws {
497
559
AssertParse ( ArgumentPropertyInitArguments_Default_Transform . self, [ " test2 " ] ) { arguments in
0 commit comments