1use clap::{Arg, ArgAction, Command}; 2 3#[test] 4fn indices_mult_opts() { 5 let m = Command::new("ind") 6 .args_override_self(true) 7 .arg( 8 Arg::new("exclude") 9 .short('e') 10 .action(ArgAction::Set) 11 .num_args(1..) 12 .action(ArgAction::Append), 13 ) 14 .arg( 15 Arg::new("include") 16 .short('i') 17 .action(ArgAction::Set) 18 .num_args(1..), 19 ) 20 .try_get_matches_from(vec!["ind", "-e", "A", "B", "-i", "B", "C", "-e", "C"]) 21 .unwrap(); 22 23 assert_eq!( 24 m.indices_of("exclude").unwrap().collect::<Vec<_>>(), 25 [2, 3, 8] 26 ); 27 assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5, 6]); 28} 29 30#[test] 31fn index_mult_opts() { 32 let m = Command::new("ind") 33 .args_override_self(true) 34 .arg( 35 Arg::new("exclude") 36 .short('e') 37 .action(ArgAction::Set) 38 .num_args(1..) 39 .action(ArgAction::Append), 40 ) 41 .arg( 42 Arg::new("include") 43 .short('i') 44 .action(ArgAction::Set) 45 .num_args(1..), 46 ) 47 .try_get_matches_from(vec!["ind", "-e", "A", "B", "-i", "B", "C", "-e", "C"]) 48 .unwrap(); 49 50 assert_eq!(m.index_of("exclude"), Some(2)); 51 assert_eq!(m.index_of("include"), Some(5)); 52} 53 54#[test] 55fn index_flag() { 56 let m = Command::new("ind") 57 .args_override_self(true) 58 .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue)) 59 .arg(Arg::new("include").short('i').action(ArgAction::SetTrue)) 60 .try_get_matches_from(vec!["ind", "-e", "-i"]) 61 .unwrap(); 62 63 assert_eq!(m.index_of("exclude"), Some(1)); 64 assert_eq!(m.index_of("include"), Some(2)); 65} 66 67#[test] 68fn index_flags() { 69 let m = Command::new("ind") 70 .args_override_self(true) 71 .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue)) 72 .arg(Arg::new("include").short('i').action(ArgAction::SetTrue)) 73 .try_get_matches_from(vec!["ind", "-e", "-i", "-e", "-e", "-i"]) 74 .unwrap(); 75 76 assert_eq!(m.index_of("exclude"), Some(4)); 77 assert_eq!(m.index_of("include"), Some(5)); 78} 79 80#[test] 81fn indices_mult_flags() { 82 let m = Command::new("ind") 83 .args_override_self(true) 84 .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue)) 85 .arg(Arg::new("include").short('i').action(ArgAction::SetTrue)) 86 .try_get_matches_from(vec!["ind", "-e", "-i", "-e", "-e", "-i"]) 87 .unwrap(); 88 89 assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]); 90 assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]); 91} 92 93#[test] 94fn indices_mult_flags_combined() { 95 let m = Command::new("ind") 96 .args_override_self(true) 97 .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue)) 98 .arg(Arg::new("include").short('i').action(ArgAction::SetTrue)) 99 .try_get_matches_from(vec!["ind", "-eieei"]) 100 .unwrap(); 101 102 assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]); 103 assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]); 104} 105 106#[test] 107fn indices_mult_flags_opt_combined() { 108 let m = Command::new("ind") 109 .args_override_self(true) 110 .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue)) 111 .arg(Arg::new("include").short('i').action(ArgAction::SetTrue)) 112 .arg(Arg::new("option").short('o').action(ArgAction::Set)) 113 .try_get_matches_from(vec!["ind", "-eieeio", "val"]) 114 .unwrap(); 115 116 assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]); 117 assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]); 118 assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [7]); 119} 120 121#[test] 122fn indices_mult_flags_opt_combined_eq() { 123 let m = Command::new("ind") 124 .args_override_self(true) 125 .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue)) 126 .arg(Arg::new("include").short('i').action(ArgAction::SetTrue)) 127 .arg(Arg::new("option").short('o').action(ArgAction::Set)) 128 .try_get_matches_from(vec!["ind", "-eieeio=val"]) 129 .unwrap(); 130 131 assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]); 132 assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]); 133 assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [7]); 134} 135 136#[test] 137fn indices_mult_opt_value_delim_eq() { 138 let m = Command::new("myapp") 139 .args_override_self(true) 140 .arg( 141 Arg::new("option") 142 .short('o') 143 .action(ArgAction::Set) 144 .value_delimiter(',') 145 .num_args(1..), 146 ) 147 .try_get_matches_from(vec!["myapp", "-o=val1,val2,val3"]) 148 .unwrap(); 149 assert_eq!( 150 m.indices_of("option").unwrap().collect::<Vec<_>>(), 151 [2, 3, 4] 152 ); 153} 154 155#[test] 156fn indices_mult_opt_value_no_delim_eq() { 157 let m = Command::new("myapp") 158 .args_override_self(true) 159 .arg( 160 Arg::new("option") 161 .short('o') 162 .action(ArgAction::Set) 163 .num_args(1..), 164 ) 165 .try_get_matches_from(vec!["myapp", "-o=val1,val2,val3"]) 166 .unwrap(); 167 assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [2]); 168} 169 170#[test] 171fn indices_mult_opt_mult_flag() { 172 let m = Command::new("myapp") 173 .args_override_self(true) 174 .arg(Arg::new("option").short('o').action(ArgAction::Append)) 175 .arg(Arg::new("flag").short('f').action(ArgAction::SetTrue)) 176 .try_get_matches_from(vec!["myapp", "-o", "val1", "-f", "-o", "val2", "-f"]) 177 .unwrap(); 178 179 assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [2, 5]); 180 assert_eq!(m.indices_of("flag").unwrap().collect::<Vec<_>>(), [6]); 181} 182