@@ -277,7 +277,10 @@ impl FlagSet {
277
277
if TypeId :: of :: < bool > ( ) == value_type {
278
278
if arg. eq_ignore_ascii_case ( "true" ) || arg. eq_ignore_ascii_case ( "false" )
279
279
{
280
- self . set_flag_value_unparsed ( & flag_name, arg. clone ( ) ) ;
280
+ self . set_flag_value_unparsed (
281
+ & flag_name,
282
+ arg. clone ( ) . to_lowercase ( ) ,
283
+ ) ;
281
284
} else {
282
285
return Err ( FlagError {
283
286
error_type : FlagErrorKind :: UsageError ,
@@ -565,121 +568,50 @@ mod tests {
565
568
let _rval = retry_flag. borrow ( ) . get_value :: < i32 > ( ) . unwrap ( ) ;
566
569
}
567
570
568
- // #[test]
569
- // fn test_short_flag_added() {
570
- // let mut flagset = FlagSet::new();
571
- // let tflag = Flag::new(
572
- // Some('b'),
573
- // None,
574
- // "path to the directory that can hold the backup files",
575
- // Some("/root/backup/10102022".to_string()),
576
- // true,
577
- // );
578
- // flagset.add(tflag);
579
- // assert_eq!(flagset.is_known_flag("b"), true);
580
- // }
581
-
582
- // #[test]
583
- // fn test_add_multiple_flags() {
584
- // // let bflag = Flag::new(
585
- // // Some('b'),
586
- // // None,
587
- // // "path to the directory that can hold the backup files",
588
- // // Some("/root/backup/10102022".to_string()),
589
- // // true,
590
- // // );
591
- // let iflag = Flag::new(
592
- // Some('i'),
593
- // Some("ignore-case"),
594
- // "case insensitive search",
595
- // Some(false),
596
- // false,
597
- // );
598
- //
599
- // let mut flagset = FlagSet::new();
600
- // flagset.add(iflag);
601
- // assert_eq!(flagset.is_known_flag("ignore-case"), true);
602
- // }
603
-
604
- // #[test]
605
- // #[should_panic(expected = "required: short name or long name")]
606
- // fn test_with_no_flagnames() {
607
- // let choice = FlagValue::Choice(false);
608
- // let mut flagset = FlagSet::new();
609
- // let iflag = Flag::new(None, None, "case insensitive", None, false, choice);
610
- // flagset.add(iflag);
611
- // }
612
- //
613
- // #[test]
614
- // fn test_formatter_both_flags() {
615
- // let choice = FlagValue::Choice(false);
616
- // let iflag = Flag::new(
617
- // Some('i'),
618
- // Some("case-insensitive"),
619
- // "case insensitive",
620
- // None,
621
- // false,
622
- // choice,
623
- // );
624
- // assert_eq!(
625
- // format!("{}", iflag),
626
- // "-i --case-insensitive case insensitive"
627
- // )
628
- // }
629
- //
630
- // #[test]
631
- // fn test_formatter_shortflag_only() {
632
- // let choice = FlagValue::Choice(false);
633
- // let iflag = Flag::new(Some('i'), None, "case insensitive", None, false, choice);
634
- // assert_eq!(format!("{}", iflag), "-i case insensitive")
635
- // }
636
-
637
- // #[test]
638
- // fn test_formatter_longflag_only() {
639
- // let choice = FlagValue::Choice(false);
640
- // let iflag = Flag::new(
641
- // None,
642
- // Some("case-insensitive"),
643
- // "case insensitive",
644
- // None,
645
- // false,
646
- // choice,
647
- // );
648
- // assert_eq!(format!("{}", iflag), "--case-insensitive case insensitive")
649
- // }
650
-
651
- // #[test]
652
- // fn test_flag_default_value() {
653
- // let a_number = FlagValue::I32(0);
654
- // let retry_flag = Flag::new(
655
- // Some('r'),
656
- // Some("retry"),
657
- // "number of times to retry",
658
- // Some(FlagValue::I32(3)),
659
- // false,
660
- // a_number.clone(),
661
- // );
662
- // let timeout_flag = Flag::new(
663
- // Some('t'),
664
- // Some("timeout"),
665
- // "timeout in seconds",
666
- // Some(FlagValue::I32(10)),
667
- // false,
668
- // a_number.clone(),
669
- // );
670
- // let mut flagset = FlagSet::new();
671
- // flagset.add(retry_flag);
672
- // flagset.add(timeout_flag);
673
- // match flagset.value_of("retry") {
674
- // Ok(v) => match v {
675
- // Some(flag_value) => {
676
- // assert_eq!(flag_value, &FlagValue::I32(3));
677
- // }
678
- // None => {
679
- // assert_eq!(true, false, "Flag value not found");
680
- // }
681
- // },
682
- // Err(_) => {}
683
- // }
684
- // }
571
+ #[ test]
572
+ #[ should_panic( expected = "flag value type does not match" ) ]
573
+ fn read_flag_with_different_kind_must_panic ( ) {
574
+ let retry_flag = Flag :: new (
575
+ Some ( "-r" ) ,
576
+ Some ( "--retry" ) ,
577
+ "number of retry operations" ,
578
+ false ,
579
+ Flag :: kind :: < i32 > ( ) ,
580
+ Some ( Box :: new ( 5i32 ) ) ,
581
+ ) ;
582
+ let mut flagset = FlagSet :: new ( ) ;
583
+ flagset. add ( & retry_flag) ;
584
+ let args: Vec < & str > = vec ! [ "--retry 10" ] ;
585
+ let args = args. iter ( ) . map ( |s| s. to_string ( ) ) . collect :: < Vec < String > > ( ) ;
586
+ assert_eq ! ( flagset. parse_args( args) . err( ) . is_none( ) , true ) ;
587
+ // reading i32 as f64 will panic
588
+ let _rval = retry_flag. borrow ( ) . get_value :: < f64 > ( ) . unwrap ( ) ;
589
+ }
590
+
591
+ #[ test]
592
+ fn cmdarg_boolean_values_can_also_have_true_false ( ) {
593
+ let force_flag = Flag :: new (
594
+ Some ( "-f" ) ,
595
+ Some ( "--force" ) ,
596
+ "force the operation" ,
597
+ false ,
598
+ Flag :: kind :: < bool > ( ) ,
599
+ Some ( Box :: new ( false ) ) ,
600
+ ) ;
601
+ let mut flagset = FlagSet :: new ( ) ;
602
+ flagset. add ( & force_flag) ;
603
+ let args = vec ! [ "-f" , "True" ] ;
604
+ let args = args. iter ( ) . map ( |s| s. to_string ( ) ) . collect :: < Vec < String > > ( ) ;
605
+ match flagset. parse_args ( args) . err ( ) {
606
+ Some ( e) => {
607
+ assert_eq ! ( "" , e. message, "unexpected error: flags are correct" ) ;
608
+ }
609
+ None => { }
610
+ }
611
+ let fval = force_flag
612
+ . borrow ( )
613
+ . get_value :: < bool > ( )
614
+ . expect ( "expect default value" ) ;
615
+ assert_eq ! ( fval, true ) ;
616
+ }
685
617
}
0 commit comments