119625d8cSopenharmony_ciuse clap::{error::ErrorKind, Arg, ArgAction, Command}; 219625d8cSopenharmony_ci 319625d8cSopenharmony_ci#[test] 419625d8cSopenharmony_cifn option_long() { 519625d8cSopenharmony_ci let m = Command::new("multiple_values") 619625d8cSopenharmony_ci .arg( 719625d8cSopenharmony_ci Arg::new("option") 819625d8cSopenharmony_ci .long("option") 919625d8cSopenharmony_ci .help("multiple options") 1019625d8cSopenharmony_ci .action(ArgAction::Set) 1119625d8cSopenharmony_ci .num_args(1..) 1219625d8cSopenharmony_ci .action(ArgAction::Append), 1319625d8cSopenharmony_ci ) 1419625d8cSopenharmony_ci .try_get_matches_from(vec![ 1519625d8cSopenharmony_ci "", "--option", "val1", "--option", "val2", "--option", "val3", 1619625d8cSopenharmony_ci ]); 1719625d8cSopenharmony_ci 1819625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 1919625d8cSopenharmony_ci let m = m.unwrap(); 2019625d8cSopenharmony_ci 2119625d8cSopenharmony_ci assert!(m.contains_id("option")); 2219625d8cSopenharmony_ci assert_eq!( 2319625d8cSopenharmony_ci m.get_many::<String>("option") 2419625d8cSopenharmony_ci .unwrap() 2519625d8cSopenharmony_ci .map(|v| v.as_str()) 2619625d8cSopenharmony_ci .collect::<Vec<_>>(), 2719625d8cSopenharmony_ci ["val1", "val2", "val3"] 2819625d8cSopenharmony_ci ); 2919625d8cSopenharmony_ci} 3019625d8cSopenharmony_ci 3119625d8cSopenharmony_ci#[test] 3219625d8cSopenharmony_cifn option_short() { 3319625d8cSopenharmony_ci let m = Command::new("multiple_values") 3419625d8cSopenharmony_ci .arg( 3519625d8cSopenharmony_ci Arg::new("option") 3619625d8cSopenharmony_ci .short('o') 3719625d8cSopenharmony_ci .help("multiple options") 3819625d8cSopenharmony_ci .action(ArgAction::Set) 3919625d8cSopenharmony_ci .num_args(1..) 4019625d8cSopenharmony_ci .action(ArgAction::Append), 4119625d8cSopenharmony_ci ) 4219625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "-o", "val2", "-o", "val3"]); 4319625d8cSopenharmony_ci 4419625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 4519625d8cSopenharmony_ci let m = m.unwrap(); 4619625d8cSopenharmony_ci 4719625d8cSopenharmony_ci assert!(m.contains_id("option")); 4819625d8cSopenharmony_ci assert_eq!( 4919625d8cSopenharmony_ci m.get_many::<String>("option") 5019625d8cSopenharmony_ci .unwrap() 5119625d8cSopenharmony_ci .map(|v| v.as_str()) 5219625d8cSopenharmony_ci .collect::<Vec<_>>(), 5319625d8cSopenharmony_ci ["val1", "val2", "val3"] 5419625d8cSopenharmony_ci ); 5519625d8cSopenharmony_ci} 5619625d8cSopenharmony_ci 5719625d8cSopenharmony_ci#[test] 5819625d8cSopenharmony_cifn option_mixed() { 5919625d8cSopenharmony_ci let m = Command::new("multiple_values") 6019625d8cSopenharmony_ci .arg( 6119625d8cSopenharmony_ci Arg::new("option") 6219625d8cSopenharmony_ci .long("option") 6319625d8cSopenharmony_ci .short('o') 6419625d8cSopenharmony_ci .help("multiple options") 6519625d8cSopenharmony_ci .action(ArgAction::Set) 6619625d8cSopenharmony_ci .num_args(1..) 6719625d8cSopenharmony_ci .action(ArgAction::Append), 6819625d8cSopenharmony_ci ) 6919625d8cSopenharmony_ci .try_get_matches_from(vec![ 7019625d8cSopenharmony_ci "", "-o", "val1", "--option", "val2", "--option", "val3", "-o", "val4", 7119625d8cSopenharmony_ci ]); 7219625d8cSopenharmony_ci 7319625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 7419625d8cSopenharmony_ci let m = m.unwrap(); 7519625d8cSopenharmony_ci 7619625d8cSopenharmony_ci assert!(m.contains_id("option")); 7719625d8cSopenharmony_ci assert_eq!( 7819625d8cSopenharmony_ci m.get_many::<String>("option") 7919625d8cSopenharmony_ci .unwrap() 8019625d8cSopenharmony_ci .map(|v| v.as_str()) 8119625d8cSopenharmony_ci .collect::<Vec<_>>(), 8219625d8cSopenharmony_ci ["val1", "val2", "val3", "val4"] 8319625d8cSopenharmony_ci ); 8419625d8cSopenharmony_ci} 8519625d8cSopenharmony_ci 8619625d8cSopenharmony_ci#[test] 8719625d8cSopenharmony_cifn option_exact_exact() { 8819625d8cSopenharmony_ci let m = Command::new("multiple_values") 8919625d8cSopenharmony_ci .arg( 9019625d8cSopenharmony_ci Arg::new("option") 9119625d8cSopenharmony_ci .short('o') 9219625d8cSopenharmony_ci .help("multiple options") 9319625d8cSopenharmony_ci .num_args(3) 9419625d8cSopenharmony_ci .action(ArgAction::Append), 9519625d8cSopenharmony_ci ) 9619625d8cSopenharmony_ci .try_get_matches_from(vec![ 9719625d8cSopenharmony_ci "", "-o", "val1", "val2", "val3", "-o", "val4", "val5", "val6", 9819625d8cSopenharmony_ci ]); 9919625d8cSopenharmony_ci 10019625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 10119625d8cSopenharmony_ci let m = m.unwrap(); 10219625d8cSopenharmony_ci 10319625d8cSopenharmony_ci assert!(m.contains_id("option")); 10419625d8cSopenharmony_ci assert_eq!( 10519625d8cSopenharmony_ci m.get_many::<String>("option") 10619625d8cSopenharmony_ci .unwrap() 10719625d8cSopenharmony_ci .map(|v| v.as_str()) 10819625d8cSopenharmony_ci .collect::<Vec<_>>(), 10919625d8cSopenharmony_ci ["val1", "val2", "val3", "val4", "val5", "val6"] 11019625d8cSopenharmony_ci ); 11119625d8cSopenharmony_ci} 11219625d8cSopenharmony_ci 11319625d8cSopenharmony_ci#[test] 11419625d8cSopenharmony_cifn option_exact_exact_not_mult() { 11519625d8cSopenharmony_ci let m = Command::new("multiple_values") 11619625d8cSopenharmony_ci .arg( 11719625d8cSopenharmony_ci Arg::new("option") 11819625d8cSopenharmony_ci .short('o') 11919625d8cSopenharmony_ci .help("multiple options") 12019625d8cSopenharmony_ci .num_args(3), 12119625d8cSopenharmony_ci ) 12219625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "val2", "val3"]); 12319625d8cSopenharmony_ci 12419625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 12519625d8cSopenharmony_ci let m = m.unwrap(); 12619625d8cSopenharmony_ci 12719625d8cSopenharmony_ci assert!(m.contains_id("option")); 12819625d8cSopenharmony_ci assert_eq!( 12919625d8cSopenharmony_ci m.get_many::<String>("option") 13019625d8cSopenharmony_ci .unwrap() 13119625d8cSopenharmony_ci .map(|v| v.as_str()) 13219625d8cSopenharmony_ci .collect::<Vec<_>>(), 13319625d8cSopenharmony_ci ["val1", "val2", "val3"] 13419625d8cSopenharmony_ci ); 13519625d8cSopenharmony_ci} 13619625d8cSopenharmony_ci 13719625d8cSopenharmony_ci#[test] 13819625d8cSopenharmony_cifn option_exact_exact_mult() { 13919625d8cSopenharmony_ci let m = Command::new("multiple_values") 14019625d8cSopenharmony_ci .arg( 14119625d8cSopenharmony_ci Arg::new("option") 14219625d8cSopenharmony_ci .short('o') 14319625d8cSopenharmony_ci .help("multiple options") 14419625d8cSopenharmony_ci .num_args(3) 14519625d8cSopenharmony_ci .action(ArgAction::Append), 14619625d8cSopenharmony_ci ) 14719625d8cSopenharmony_ci .try_get_matches_from(vec![ 14819625d8cSopenharmony_ci "", "-o", "val1", "val2", "val3", "-o", "val4", "val5", "val6", 14919625d8cSopenharmony_ci ]); 15019625d8cSopenharmony_ci 15119625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 15219625d8cSopenharmony_ci let m = m.unwrap(); 15319625d8cSopenharmony_ci 15419625d8cSopenharmony_ci assert!(m.contains_id("option")); 15519625d8cSopenharmony_ci assert_eq!( 15619625d8cSopenharmony_ci m.get_many::<String>("option") 15719625d8cSopenharmony_ci .unwrap() 15819625d8cSopenharmony_ci .map(|v| v.as_str()) 15919625d8cSopenharmony_ci .collect::<Vec<_>>(), 16019625d8cSopenharmony_ci ["val1", "val2", "val3", "val4", "val5", "val6"] 16119625d8cSopenharmony_ci ); 16219625d8cSopenharmony_ci} 16319625d8cSopenharmony_ci 16419625d8cSopenharmony_ci#[test] 16519625d8cSopenharmony_cifn option_exact_less() { 16619625d8cSopenharmony_ci let m = Command::new("multiple_values") 16719625d8cSopenharmony_ci .arg( 16819625d8cSopenharmony_ci Arg::new("option") 16919625d8cSopenharmony_ci .short('o') 17019625d8cSopenharmony_ci .help("multiple options") 17119625d8cSopenharmony_ci .num_args(3) 17219625d8cSopenharmony_ci .action(ArgAction::Append), 17319625d8cSopenharmony_ci ) 17419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "-o", "val2"]); 17519625d8cSopenharmony_ci 17619625d8cSopenharmony_ci assert!(m.is_err()); 17719625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::WrongNumberOfValues); 17819625d8cSopenharmony_ci} 17919625d8cSopenharmony_ci 18019625d8cSopenharmony_ci#[test] 18119625d8cSopenharmony_cifn option_exact_more() { 18219625d8cSopenharmony_ci let m = Command::new("multiple_values") 18319625d8cSopenharmony_ci .arg( 18419625d8cSopenharmony_ci Arg::new("option") 18519625d8cSopenharmony_ci .short('o') 18619625d8cSopenharmony_ci .help("multiple options") 18719625d8cSopenharmony_ci .num_args(3) 18819625d8cSopenharmony_ci .action(ArgAction::Append), 18919625d8cSopenharmony_ci ) 19019625d8cSopenharmony_ci .try_get_matches_from(vec![ 19119625d8cSopenharmony_ci "", "-o", "val1", "-o", "val2", "-o", "val3", "-o", "val4", 19219625d8cSopenharmony_ci ]); 19319625d8cSopenharmony_ci 19419625d8cSopenharmony_ci assert!(m.is_err()); 19519625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::WrongNumberOfValues); 19619625d8cSopenharmony_ci} 19719625d8cSopenharmony_ci 19819625d8cSopenharmony_ci#[test] 19919625d8cSopenharmony_cifn option_min_exact() { 20019625d8cSopenharmony_ci let m = Command::new("multiple_values") 20119625d8cSopenharmony_ci .arg( 20219625d8cSopenharmony_ci Arg::new("option") 20319625d8cSopenharmony_ci .short('o') 20419625d8cSopenharmony_ci .help("multiple options") 20519625d8cSopenharmony_ci .num_args(3..) 20619625d8cSopenharmony_ci .action(ArgAction::Set), 20719625d8cSopenharmony_ci ) 20819625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "val2", "val3"]); 20919625d8cSopenharmony_ci 21019625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 21119625d8cSopenharmony_ci let m = m.unwrap(); 21219625d8cSopenharmony_ci 21319625d8cSopenharmony_ci assert!(m.contains_id("option")); 21419625d8cSopenharmony_ci assert_eq!( 21519625d8cSopenharmony_ci m.get_many::<String>("option") 21619625d8cSopenharmony_ci .unwrap() 21719625d8cSopenharmony_ci .map(|v| v.as_str()) 21819625d8cSopenharmony_ci .collect::<Vec<_>>(), 21919625d8cSopenharmony_ci ["val1", "val2", "val3"] 22019625d8cSopenharmony_ci ); 22119625d8cSopenharmony_ci} 22219625d8cSopenharmony_ci 22319625d8cSopenharmony_ci#[test] 22419625d8cSopenharmony_cifn option_min_less() { 22519625d8cSopenharmony_ci let m = Command::new("multiple_values") 22619625d8cSopenharmony_ci .arg( 22719625d8cSopenharmony_ci Arg::new("option") 22819625d8cSopenharmony_ci .short('o') 22919625d8cSopenharmony_ci .help("multiple options") 23019625d8cSopenharmony_ci .num_args(3..) 23119625d8cSopenharmony_ci .action(ArgAction::Set), 23219625d8cSopenharmony_ci ) 23319625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "val2"]); 23419625d8cSopenharmony_ci 23519625d8cSopenharmony_ci assert!(m.is_err()); 23619625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::TooFewValues); 23719625d8cSopenharmony_ci} 23819625d8cSopenharmony_ci 23919625d8cSopenharmony_ci#[test] 24019625d8cSopenharmony_cifn option_short_min_more_mult_occurs() { 24119625d8cSopenharmony_ci let m = Command::new("multiple_values") 24219625d8cSopenharmony_ci .arg(Arg::new("arg").required(true)) 24319625d8cSopenharmony_ci .arg( 24419625d8cSopenharmony_ci Arg::new("option") 24519625d8cSopenharmony_ci .short('o') 24619625d8cSopenharmony_ci .help("multiple options") 24719625d8cSopenharmony_ci .num_args(3..) 24819625d8cSopenharmony_ci .action(ArgAction::Set), 24919625d8cSopenharmony_ci ) 25019625d8cSopenharmony_ci .try_get_matches_from(vec!["", "pos", "-o", "val1", "val2", "val3", "val4"]); 25119625d8cSopenharmony_ci 25219625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 25319625d8cSopenharmony_ci let m = m.unwrap(); 25419625d8cSopenharmony_ci 25519625d8cSopenharmony_ci assert!(m.contains_id("option")); 25619625d8cSopenharmony_ci assert!(m.contains_id("arg")); 25719625d8cSopenharmony_ci assert_eq!( 25819625d8cSopenharmony_ci m.get_many::<String>("option") 25919625d8cSopenharmony_ci .unwrap() 26019625d8cSopenharmony_ci .map(|v| v.as_str()) 26119625d8cSopenharmony_ci .collect::<Vec<_>>(), 26219625d8cSopenharmony_ci ["val1", "val2", "val3", "val4"] 26319625d8cSopenharmony_ci ); 26419625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("arg").map(|v| v.as_str()), Some("pos")); 26519625d8cSopenharmony_ci} 26619625d8cSopenharmony_ci 26719625d8cSopenharmony_ci#[test] 26819625d8cSopenharmony_cifn option_short_min_more_single_occur() { 26919625d8cSopenharmony_ci let m = Command::new("multiple_values") 27019625d8cSopenharmony_ci .arg(Arg::new("arg").required(true)) 27119625d8cSopenharmony_ci .arg( 27219625d8cSopenharmony_ci Arg::new("option") 27319625d8cSopenharmony_ci .short('o') 27419625d8cSopenharmony_ci .help("multiple options") 27519625d8cSopenharmony_ci .num_args(3..), 27619625d8cSopenharmony_ci ) 27719625d8cSopenharmony_ci .try_get_matches_from(vec!["", "pos", "-o", "val1", "val2", "val3", "val4"]); 27819625d8cSopenharmony_ci 27919625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 28019625d8cSopenharmony_ci let m = m.unwrap(); 28119625d8cSopenharmony_ci 28219625d8cSopenharmony_ci assert!(m.contains_id("option")); 28319625d8cSopenharmony_ci assert!(m.contains_id("arg")); 28419625d8cSopenharmony_ci assert_eq!( 28519625d8cSopenharmony_ci m.get_many::<String>("option") 28619625d8cSopenharmony_ci .unwrap() 28719625d8cSopenharmony_ci .map(|v| v.as_str()) 28819625d8cSopenharmony_ci .collect::<Vec<_>>(), 28919625d8cSopenharmony_ci ["val1", "val2", "val3", "val4"] 29019625d8cSopenharmony_ci ); 29119625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("arg").map(|v| v.as_str()), Some("pos")); 29219625d8cSopenharmony_ci} 29319625d8cSopenharmony_ci 29419625d8cSopenharmony_ci#[test] 29519625d8cSopenharmony_cifn option_max_exact() { 29619625d8cSopenharmony_ci let m = Command::new("multiple_values") 29719625d8cSopenharmony_ci .arg( 29819625d8cSopenharmony_ci Arg::new("option") 29919625d8cSopenharmony_ci .short('o') 30019625d8cSopenharmony_ci .help("multiple options") 30119625d8cSopenharmony_ci .num_args(1..=3) 30219625d8cSopenharmony_ci .action(ArgAction::Set), 30319625d8cSopenharmony_ci ) 30419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "val2", "val3"]); 30519625d8cSopenharmony_ci 30619625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 30719625d8cSopenharmony_ci let m = m.unwrap(); 30819625d8cSopenharmony_ci 30919625d8cSopenharmony_ci assert!(m.contains_id("option")); 31019625d8cSopenharmony_ci assert_eq!( 31119625d8cSopenharmony_ci m.get_many::<String>("option") 31219625d8cSopenharmony_ci .unwrap() 31319625d8cSopenharmony_ci .map(|v| v.as_str()) 31419625d8cSopenharmony_ci .collect::<Vec<_>>(), 31519625d8cSopenharmony_ci ["val1", "val2", "val3"] 31619625d8cSopenharmony_ci ); 31719625d8cSopenharmony_ci} 31819625d8cSopenharmony_ci 31919625d8cSopenharmony_ci#[test] 32019625d8cSopenharmony_cifn option_max_less() { 32119625d8cSopenharmony_ci let m = Command::new("multiple_values") 32219625d8cSopenharmony_ci .arg( 32319625d8cSopenharmony_ci Arg::new("option") 32419625d8cSopenharmony_ci .short('o') 32519625d8cSopenharmony_ci .help("multiple options") 32619625d8cSopenharmony_ci .num_args(1..=3) 32719625d8cSopenharmony_ci .action(ArgAction::Set), 32819625d8cSopenharmony_ci ) 32919625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "val2"]); 33019625d8cSopenharmony_ci 33119625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 33219625d8cSopenharmony_ci let m = m.unwrap(); 33319625d8cSopenharmony_ci 33419625d8cSopenharmony_ci assert!(m.contains_id("option")); 33519625d8cSopenharmony_ci assert_eq!( 33619625d8cSopenharmony_ci m.get_many::<String>("option") 33719625d8cSopenharmony_ci .unwrap() 33819625d8cSopenharmony_ci .map(|v| v.as_str()) 33919625d8cSopenharmony_ci .collect::<Vec<_>>(), 34019625d8cSopenharmony_ci ["val1", "val2"] 34119625d8cSopenharmony_ci ); 34219625d8cSopenharmony_ci} 34319625d8cSopenharmony_ci 34419625d8cSopenharmony_ci#[test] 34519625d8cSopenharmony_cifn option_max_zero() { 34619625d8cSopenharmony_ci let m = Command::new("multiple_values") 34719625d8cSopenharmony_ci .arg( 34819625d8cSopenharmony_ci Arg::new("option") 34919625d8cSopenharmony_ci .short('o') 35019625d8cSopenharmony_ci .help("multiple options") 35119625d8cSopenharmony_ci .num_args(1..=3) 35219625d8cSopenharmony_ci .action(ArgAction::Set), 35319625d8cSopenharmony_ci ) 35419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o"]); 35519625d8cSopenharmony_ci 35619625d8cSopenharmony_ci assert!(m.is_err()); 35719625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue); 35819625d8cSopenharmony_ci} 35919625d8cSopenharmony_ci 36019625d8cSopenharmony_ci#[test] 36119625d8cSopenharmony_cifn option_max_zero_eq() { 36219625d8cSopenharmony_ci let m = Command::new("multiple_values") 36319625d8cSopenharmony_ci .arg( 36419625d8cSopenharmony_ci Arg::new("option") 36519625d8cSopenharmony_ci .short('o') 36619625d8cSopenharmony_ci .help("multiple options") 36719625d8cSopenharmony_ci .num_args(1..=3) 36819625d8cSopenharmony_ci .action(ArgAction::Set), 36919625d8cSopenharmony_ci ) 37019625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o="]); 37119625d8cSopenharmony_ci 37219625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 37319625d8cSopenharmony_ci let m = m.unwrap(); 37419625d8cSopenharmony_ci 37519625d8cSopenharmony_ci assert!(m.contains_id("option")); 37619625d8cSopenharmony_ci assert_eq!( 37719625d8cSopenharmony_ci m.get_many::<String>("option") 37819625d8cSopenharmony_ci .unwrap() 37919625d8cSopenharmony_ci .map(|v| v.as_str()) 38019625d8cSopenharmony_ci .collect::<Vec<_>>(), 38119625d8cSopenharmony_ci [""] 38219625d8cSopenharmony_ci ); 38319625d8cSopenharmony_ci} 38419625d8cSopenharmony_ci 38519625d8cSopenharmony_ci#[test] 38619625d8cSopenharmony_cifn option_max_more() { 38719625d8cSopenharmony_ci let m = Command::new("multiple_values") 38819625d8cSopenharmony_ci .arg( 38919625d8cSopenharmony_ci Arg::new("option") 39019625d8cSopenharmony_ci .short('o') 39119625d8cSopenharmony_ci .help("multiple options") 39219625d8cSopenharmony_ci .num_args(1..=3) 39319625d8cSopenharmony_ci .action(ArgAction::Set), 39419625d8cSopenharmony_ci ) 39519625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "val2", "val3", "val4"]); 39619625d8cSopenharmony_ci 39719625d8cSopenharmony_ci assert!(m.is_err()); 39819625d8cSopenharmony_ci // Can end up being TooManyValues or UnknownArgument 39919625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::UnknownArgument); 40019625d8cSopenharmony_ci} 40119625d8cSopenharmony_ci 40219625d8cSopenharmony_ci#[test] 40319625d8cSopenharmony_cifn optional_value() { 40419625d8cSopenharmony_ci let mut cmd = Command::new("test").args_override_self(true).arg( 40519625d8cSopenharmony_ci Arg::new("port") 40619625d8cSopenharmony_ci .short('p') 40719625d8cSopenharmony_ci .value_name("NUM") 40819625d8cSopenharmony_ci .num_args(0..=1), 40919625d8cSopenharmony_ci ); 41019625d8cSopenharmony_ci 41119625d8cSopenharmony_ci let r = cmd.try_get_matches_from_mut(["test", "-p42"]); 41219625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 41319625d8cSopenharmony_ci let m = r.unwrap(); 41419625d8cSopenharmony_ci assert!(m.contains_id("port")); 41519625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("port").unwrap(), "42"); 41619625d8cSopenharmony_ci 41719625d8cSopenharmony_ci let r = cmd.try_get_matches_from_mut(["test", "-p"]); 41819625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 41919625d8cSopenharmony_ci let m = r.unwrap(); 42019625d8cSopenharmony_ci assert!(m.contains_id("port")); 42119625d8cSopenharmony_ci assert!(m.get_one::<String>("port").is_none()); 42219625d8cSopenharmony_ci 42319625d8cSopenharmony_ci let r = cmd.try_get_matches_from_mut(["test", "-p", "24", "-p", "42"]); 42419625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 42519625d8cSopenharmony_ci let m = r.unwrap(); 42619625d8cSopenharmony_ci assert!(m.contains_id("port")); 42719625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("port").unwrap(), "42"); 42819625d8cSopenharmony_ci 42919625d8cSopenharmony_ci let help = cmd.render_help().to_string(); 43019625d8cSopenharmony_ci const HELP: &str = "\ 43119625d8cSopenharmony_ciUsage: test [OPTIONS] 43219625d8cSopenharmony_ci 43319625d8cSopenharmony_ciOptions: 43419625d8cSopenharmony_ci -p [<NUM>] 43519625d8cSopenharmony_ci -h, --help Print help 43619625d8cSopenharmony_ci"; 43719625d8cSopenharmony_ci snapbox::assert_eq(HELP, help); 43819625d8cSopenharmony_ci} 43919625d8cSopenharmony_ci 44019625d8cSopenharmony_ci#[test] 44119625d8cSopenharmony_cifn positional() { 44219625d8cSopenharmony_ci let m = Command::new("multiple_values") 44319625d8cSopenharmony_ci .arg( 44419625d8cSopenharmony_ci Arg::new("pos") 44519625d8cSopenharmony_ci .help("multiple positionals") 44619625d8cSopenharmony_ci .action(ArgAction::Set) 44719625d8cSopenharmony_ci .num_args(1..), 44819625d8cSopenharmony_ci ) 44919625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]); 45019625d8cSopenharmony_ci 45119625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 45219625d8cSopenharmony_ci let m = m.unwrap(); 45319625d8cSopenharmony_ci 45419625d8cSopenharmony_ci assert!(m.contains_id("pos")); 45519625d8cSopenharmony_ci assert_eq!( 45619625d8cSopenharmony_ci m.get_many::<String>("pos") 45719625d8cSopenharmony_ci .unwrap() 45819625d8cSopenharmony_ci .map(|v| v.as_str()) 45919625d8cSopenharmony_ci .collect::<Vec<_>>(), 46019625d8cSopenharmony_ci ["val1", "val2", "val3"] 46119625d8cSopenharmony_ci ); 46219625d8cSopenharmony_ci} 46319625d8cSopenharmony_ci 46419625d8cSopenharmony_ci#[test] 46519625d8cSopenharmony_cifn positional_exact_exact() { 46619625d8cSopenharmony_ci let m = Command::new("multiple_values") 46719625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(3)) 46819625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]); 46919625d8cSopenharmony_ci 47019625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 47119625d8cSopenharmony_ci let m = m.unwrap(); 47219625d8cSopenharmony_ci 47319625d8cSopenharmony_ci assert!(m.contains_id("pos")); 47419625d8cSopenharmony_ci assert_eq!( 47519625d8cSopenharmony_ci m.get_many::<String>("pos") 47619625d8cSopenharmony_ci .unwrap() 47719625d8cSopenharmony_ci .map(|v| v.as_str()) 47819625d8cSopenharmony_ci .collect::<Vec<_>>(), 47919625d8cSopenharmony_ci ["val1", "val2", "val3"] 48019625d8cSopenharmony_ci ); 48119625d8cSopenharmony_ci} 48219625d8cSopenharmony_ci 48319625d8cSopenharmony_ci#[test] 48419625d8cSopenharmony_cifn positional_exact_less() { 48519625d8cSopenharmony_ci let m = Command::new("multiple_values") 48619625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(3)) 48719625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2"]); 48819625d8cSopenharmony_ci 48919625d8cSopenharmony_ci assert!(m.is_err()); 49019625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::WrongNumberOfValues); 49119625d8cSopenharmony_ci} 49219625d8cSopenharmony_ci 49319625d8cSopenharmony_ci#[test] 49419625d8cSopenharmony_cifn positional_exact_more() { 49519625d8cSopenharmony_ci let m = Command::new("multiple_values") 49619625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(3)) 49719625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3", "val4"]); 49819625d8cSopenharmony_ci 49919625d8cSopenharmony_ci assert!(m.is_err()); 50019625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::WrongNumberOfValues); 50119625d8cSopenharmony_ci} 50219625d8cSopenharmony_ci 50319625d8cSopenharmony_ci#[test] 50419625d8cSopenharmony_cifn positional_min_exact() { 50519625d8cSopenharmony_ci let m = Command::new("multiple_values") 50619625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(3..)) 50719625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]); 50819625d8cSopenharmony_ci 50919625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 51019625d8cSopenharmony_ci let m = m.unwrap(); 51119625d8cSopenharmony_ci 51219625d8cSopenharmony_ci assert!(m.contains_id("pos")); 51319625d8cSopenharmony_ci assert_eq!( 51419625d8cSopenharmony_ci m.get_many::<String>("pos") 51519625d8cSopenharmony_ci .unwrap() 51619625d8cSopenharmony_ci .map(|v| v.as_str()) 51719625d8cSopenharmony_ci .collect::<Vec<_>>(), 51819625d8cSopenharmony_ci ["val1", "val2", "val3"] 51919625d8cSopenharmony_ci ); 52019625d8cSopenharmony_ci} 52119625d8cSopenharmony_ci 52219625d8cSopenharmony_ci#[test] 52319625d8cSopenharmony_cifn positional_min_less() { 52419625d8cSopenharmony_ci let m = Command::new("multiple_values") 52519625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(3..)) 52619625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2"]); 52719625d8cSopenharmony_ci 52819625d8cSopenharmony_ci assert!(m.is_err()); 52919625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::TooFewValues); 53019625d8cSopenharmony_ci} 53119625d8cSopenharmony_ci 53219625d8cSopenharmony_ci#[test] 53319625d8cSopenharmony_cifn positional_min_more() { 53419625d8cSopenharmony_ci let m = Command::new("multiple_values") 53519625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(3..)) 53619625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3", "val4"]); 53719625d8cSopenharmony_ci 53819625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 53919625d8cSopenharmony_ci let m = m.unwrap(); 54019625d8cSopenharmony_ci 54119625d8cSopenharmony_ci assert!(m.contains_id("pos")); 54219625d8cSopenharmony_ci assert_eq!( 54319625d8cSopenharmony_ci m.get_many::<String>("pos") 54419625d8cSopenharmony_ci .unwrap() 54519625d8cSopenharmony_ci .map(|v| v.as_str()) 54619625d8cSopenharmony_ci .collect::<Vec<_>>(), 54719625d8cSopenharmony_ci ["val1", "val2", "val3", "val4"] 54819625d8cSopenharmony_ci ); 54919625d8cSopenharmony_ci} 55019625d8cSopenharmony_ci 55119625d8cSopenharmony_ci#[test] 55219625d8cSopenharmony_cifn positional_max_exact() { 55319625d8cSopenharmony_ci let m = Command::new("multiple_values") 55419625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(1..=3)) 55519625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]); 55619625d8cSopenharmony_ci 55719625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 55819625d8cSopenharmony_ci let m = m.unwrap(); 55919625d8cSopenharmony_ci 56019625d8cSopenharmony_ci assert!(m.contains_id("pos")); 56119625d8cSopenharmony_ci assert_eq!( 56219625d8cSopenharmony_ci m.get_many::<String>("pos") 56319625d8cSopenharmony_ci .unwrap() 56419625d8cSopenharmony_ci .map(|v| v.as_str()) 56519625d8cSopenharmony_ci .collect::<Vec<_>>(), 56619625d8cSopenharmony_ci ["val1", "val2", "val3"] 56719625d8cSopenharmony_ci ); 56819625d8cSopenharmony_ci} 56919625d8cSopenharmony_ci 57019625d8cSopenharmony_ci#[test] 57119625d8cSopenharmony_cifn positional_max_less() { 57219625d8cSopenharmony_ci let m = Command::new("multiple_values") 57319625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(1..=3)) 57419625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2"]); 57519625d8cSopenharmony_ci 57619625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 57719625d8cSopenharmony_ci let m = m.unwrap(); 57819625d8cSopenharmony_ci 57919625d8cSopenharmony_ci assert!(m.contains_id("pos")); 58019625d8cSopenharmony_ci assert_eq!( 58119625d8cSopenharmony_ci m.get_many::<String>("pos") 58219625d8cSopenharmony_ci .unwrap() 58319625d8cSopenharmony_ci .map(|v| v.as_str()) 58419625d8cSopenharmony_ci .collect::<Vec<_>>(), 58519625d8cSopenharmony_ci ["val1", "val2"] 58619625d8cSopenharmony_ci ); 58719625d8cSopenharmony_ci} 58819625d8cSopenharmony_ci 58919625d8cSopenharmony_ci#[test] 59019625d8cSopenharmony_cifn positional_max_more() { 59119625d8cSopenharmony_ci let m = Command::new("multiple_values") 59219625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(1..=3)) 59319625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3", "val4"]); 59419625d8cSopenharmony_ci 59519625d8cSopenharmony_ci assert!(m.is_err()); 59619625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::TooManyValues); 59719625d8cSopenharmony_ci} 59819625d8cSopenharmony_ci 59919625d8cSopenharmony_ci#[test] 60019625d8cSopenharmony_cifn sep_long_equals() { 60119625d8cSopenharmony_ci let m = Command::new("multiple_values") 60219625d8cSopenharmony_ci .arg( 60319625d8cSopenharmony_ci Arg::new("option") 60419625d8cSopenharmony_ci .long("option") 60519625d8cSopenharmony_ci .help("multiple options") 60619625d8cSopenharmony_ci .value_delimiter(','), 60719625d8cSopenharmony_ci ) 60819625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--option=val1,val2,val3"]); 60919625d8cSopenharmony_ci 61019625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 61119625d8cSopenharmony_ci let m = m.unwrap(); 61219625d8cSopenharmony_ci 61319625d8cSopenharmony_ci assert!(m.contains_id("option")); 61419625d8cSopenharmony_ci assert_eq!( 61519625d8cSopenharmony_ci m.get_many::<String>("option") 61619625d8cSopenharmony_ci .unwrap() 61719625d8cSopenharmony_ci .map(|v| v.as_str()) 61819625d8cSopenharmony_ci .collect::<Vec<_>>(), 61919625d8cSopenharmony_ci ["val1", "val2", "val3"] 62019625d8cSopenharmony_ci ); 62119625d8cSopenharmony_ci} 62219625d8cSopenharmony_ci 62319625d8cSopenharmony_ci#[test] 62419625d8cSopenharmony_cifn sep_long_space() { 62519625d8cSopenharmony_ci let m = Command::new("multiple_values") 62619625d8cSopenharmony_ci .arg( 62719625d8cSopenharmony_ci Arg::new("option") 62819625d8cSopenharmony_ci .long("option") 62919625d8cSopenharmony_ci .help("multiple options") 63019625d8cSopenharmony_ci .value_delimiter(','), 63119625d8cSopenharmony_ci ) 63219625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--option", "val1,val2,val3"]); 63319625d8cSopenharmony_ci 63419625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 63519625d8cSopenharmony_ci let m = m.unwrap(); 63619625d8cSopenharmony_ci 63719625d8cSopenharmony_ci assert!(m.contains_id("option")); 63819625d8cSopenharmony_ci assert_eq!( 63919625d8cSopenharmony_ci m.get_many::<String>("option") 64019625d8cSopenharmony_ci .unwrap() 64119625d8cSopenharmony_ci .map(|v| v.as_str()) 64219625d8cSopenharmony_ci .collect::<Vec<_>>(), 64319625d8cSopenharmony_ci ["val1", "val2", "val3"] 64419625d8cSopenharmony_ci ); 64519625d8cSopenharmony_ci} 64619625d8cSopenharmony_ci 64719625d8cSopenharmony_ci#[test] 64819625d8cSopenharmony_cifn sep_short_equals() { 64919625d8cSopenharmony_ci let m = Command::new("multiple_values") 65019625d8cSopenharmony_ci .arg( 65119625d8cSopenharmony_ci Arg::new("option") 65219625d8cSopenharmony_ci .short('o') 65319625d8cSopenharmony_ci .help("multiple options") 65419625d8cSopenharmony_ci .value_delimiter(','), 65519625d8cSopenharmony_ci ) 65619625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o=val1,val2,val3"]); 65719625d8cSopenharmony_ci 65819625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 65919625d8cSopenharmony_ci let m = m.unwrap(); 66019625d8cSopenharmony_ci 66119625d8cSopenharmony_ci assert!(m.contains_id("option")); 66219625d8cSopenharmony_ci assert_eq!( 66319625d8cSopenharmony_ci m.get_many::<String>("option") 66419625d8cSopenharmony_ci .unwrap() 66519625d8cSopenharmony_ci .map(|v| v.as_str()) 66619625d8cSopenharmony_ci .collect::<Vec<_>>(), 66719625d8cSopenharmony_ci ["val1", "val2", "val3"] 66819625d8cSopenharmony_ci ); 66919625d8cSopenharmony_ci} 67019625d8cSopenharmony_ci 67119625d8cSopenharmony_ci#[test] 67219625d8cSopenharmony_cifn sep_short_space() { 67319625d8cSopenharmony_ci let m = Command::new("multiple_values") 67419625d8cSopenharmony_ci .arg( 67519625d8cSopenharmony_ci Arg::new("option") 67619625d8cSopenharmony_ci .short('o') 67719625d8cSopenharmony_ci .help("multiple options") 67819625d8cSopenharmony_ci .value_delimiter(','), 67919625d8cSopenharmony_ci ) 68019625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1,val2,val3"]); 68119625d8cSopenharmony_ci 68219625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 68319625d8cSopenharmony_ci let m = m.unwrap(); 68419625d8cSopenharmony_ci 68519625d8cSopenharmony_ci assert!(m.contains_id("option")); 68619625d8cSopenharmony_ci assert_eq!( 68719625d8cSopenharmony_ci m.get_many::<String>("option") 68819625d8cSopenharmony_ci .unwrap() 68919625d8cSopenharmony_ci .map(|v| v.as_str()) 69019625d8cSopenharmony_ci .collect::<Vec<_>>(), 69119625d8cSopenharmony_ci ["val1", "val2", "val3"] 69219625d8cSopenharmony_ci ); 69319625d8cSopenharmony_ci} 69419625d8cSopenharmony_ci 69519625d8cSopenharmony_ci#[test] 69619625d8cSopenharmony_cifn sep_short_no_space() { 69719625d8cSopenharmony_ci let m = Command::new("multiple_values") 69819625d8cSopenharmony_ci .arg( 69919625d8cSopenharmony_ci Arg::new("option") 70019625d8cSopenharmony_ci .short('o') 70119625d8cSopenharmony_ci .help("multiple options") 70219625d8cSopenharmony_ci .value_delimiter(','), 70319625d8cSopenharmony_ci ) 70419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-oval1,val2,val3"]); 70519625d8cSopenharmony_ci 70619625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 70719625d8cSopenharmony_ci let m = m.unwrap(); 70819625d8cSopenharmony_ci 70919625d8cSopenharmony_ci assert!(m.contains_id("option")); 71019625d8cSopenharmony_ci assert_eq!( 71119625d8cSopenharmony_ci m.get_many::<String>("option") 71219625d8cSopenharmony_ci .unwrap() 71319625d8cSopenharmony_ci .map(|v| v.as_str()) 71419625d8cSopenharmony_ci .collect::<Vec<_>>(), 71519625d8cSopenharmony_ci ["val1", "val2", "val3"] 71619625d8cSopenharmony_ci ); 71719625d8cSopenharmony_ci} 71819625d8cSopenharmony_ci 71919625d8cSopenharmony_ci#[test] 72019625d8cSopenharmony_cifn sep_positional() { 72119625d8cSopenharmony_ci let m = Command::new("multiple_values") 72219625d8cSopenharmony_ci .arg( 72319625d8cSopenharmony_ci Arg::new("option") 72419625d8cSopenharmony_ci .help("multiple options") 72519625d8cSopenharmony_ci .value_delimiter(','), 72619625d8cSopenharmony_ci ) 72719625d8cSopenharmony_ci .try_get_matches_from(vec!["", "val1,val2,val3"]); 72819625d8cSopenharmony_ci 72919625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 73019625d8cSopenharmony_ci let m = m.unwrap(); 73119625d8cSopenharmony_ci 73219625d8cSopenharmony_ci assert!(m.contains_id("option")); 73319625d8cSopenharmony_ci assert_eq!( 73419625d8cSopenharmony_ci m.get_many::<String>("option") 73519625d8cSopenharmony_ci .unwrap() 73619625d8cSopenharmony_ci .map(|v| v.as_str()) 73719625d8cSopenharmony_ci .collect::<Vec<_>>(), 73819625d8cSopenharmony_ci ["val1", "val2", "val3"] 73919625d8cSopenharmony_ci ); 74019625d8cSopenharmony_ci} 74119625d8cSopenharmony_ci 74219625d8cSopenharmony_ci#[test] 74319625d8cSopenharmony_cifn different_sep() { 74419625d8cSopenharmony_ci let m = Command::new("multiple_values") 74519625d8cSopenharmony_ci .arg( 74619625d8cSopenharmony_ci Arg::new("option") 74719625d8cSopenharmony_ci .long("option") 74819625d8cSopenharmony_ci .help("multiple options") 74919625d8cSopenharmony_ci .value_delimiter(';'), 75019625d8cSopenharmony_ci ) 75119625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--option=val1;val2;val3"]); 75219625d8cSopenharmony_ci 75319625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 75419625d8cSopenharmony_ci let m = m.unwrap(); 75519625d8cSopenharmony_ci 75619625d8cSopenharmony_ci assert!(m.contains_id("option")); 75719625d8cSopenharmony_ci assert_eq!( 75819625d8cSopenharmony_ci m.get_many::<String>("option") 75919625d8cSopenharmony_ci .unwrap() 76019625d8cSopenharmony_ci .map(|v| v.as_str()) 76119625d8cSopenharmony_ci .collect::<Vec<_>>(), 76219625d8cSopenharmony_ci ["val1", "val2", "val3"] 76319625d8cSopenharmony_ci ); 76419625d8cSopenharmony_ci} 76519625d8cSopenharmony_ci 76619625d8cSopenharmony_ci#[test] 76719625d8cSopenharmony_cifn different_sep_positional() { 76819625d8cSopenharmony_ci let m = Command::new("multiple_values") 76919625d8cSopenharmony_ci .arg( 77019625d8cSopenharmony_ci Arg::new("option") 77119625d8cSopenharmony_ci .help("multiple options") 77219625d8cSopenharmony_ci .value_delimiter(';'), 77319625d8cSopenharmony_ci ) 77419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "val1;val2;val3"]); 77519625d8cSopenharmony_ci 77619625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 77719625d8cSopenharmony_ci let m = m.unwrap(); 77819625d8cSopenharmony_ci 77919625d8cSopenharmony_ci assert!(m.contains_id("option")); 78019625d8cSopenharmony_ci assert_eq!( 78119625d8cSopenharmony_ci m.get_many::<String>("option") 78219625d8cSopenharmony_ci .unwrap() 78319625d8cSopenharmony_ci .map(|v| v.as_str()) 78419625d8cSopenharmony_ci .collect::<Vec<_>>(), 78519625d8cSopenharmony_ci ["val1", "val2", "val3"] 78619625d8cSopenharmony_ci ); 78719625d8cSopenharmony_ci} 78819625d8cSopenharmony_ci 78919625d8cSopenharmony_ci#[test] 79019625d8cSopenharmony_cifn no_sep() { 79119625d8cSopenharmony_ci let m = Command::new("multiple_values") 79219625d8cSopenharmony_ci .arg( 79319625d8cSopenharmony_ci Arg::new("option") 79419625d8cSopenharmony_ci .long("option") 79519625d8cSopenharmony_ci .help("multiple options") 79619625d8cSopenharmony_ci .action(ArgAction::Set), 79719625d8cSopenharmony_ci ) 79819625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--option=val1,val2,val3"]); 79919625d8cSopenharmony_ci 80019625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 80119625d8cSopenharmony_ci let m = m.unwrap(); 80219625d8cSopenharmony_ci 80319625d8cSopenharmony_ci assert!(m.contains_id("option")); 80419625d8cSopenharmony_ci assert_eq!( 80519625d8cSopenharmony_ci m.get_one::<String>("option").map(|v| v.as_str()).unwrap(), 80619625d8cSopenharmony_ci "val1,val2,val3" 80719625d8cSopenharmony_ci ); 80819625d8cSopenharmony_ci} 80919625d8cSopenharmony_ci 81019625d8cSopenharmony_ci#[test] 81119625d8cSopenharmony_cifn no_sep_positional() { 81219625d8cSopenharmony_ci let m = Command::new("multiple_values") 81319625d8cSopenharmony_ci .arg( 81419625d8cSopenharmony_ci Arg::new("option") 81519625d8cSopenharmony_ci .help("multiple options") 81619625d8cSopenharmony_ci .action(ArgAction::Set), 81719625d8cSopenharmony_ci ) 81819625d8cSopenharmony_ci .try_get_matches_from(vec!["", "val1,val2,val3"]); 81919625d8cSopenharmony_ci 82019625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 82119625d8cSopenharmony_ci let m = m.unwrap(); 82219625d8cSopenharmony_ci 82319625d8cSopenharmony_ci assert!(m.contains_id("option")); 82419625d8cSopenharmony_ci assert_eq!( 82519625d8cSopenharmony_ci m.get_one::<String>("option").map(|v| v.as_str()).unwrap(), 82619625d8cSopenharmony_ci "val1,val2,val3" 82719625d8cSopenharmony_ci ); 82819625d8cSopenharmony_ci} 82919625d8cSopenharmony_ci 83019625d8cSopenharmony_ci#[test] 83119625d8cSopenharmony_cifn req_delimiter_long() { 83219625d8cSopenharmony_ci let m = Command::new("multiple_values") 83319625d8cSopenharmony_ci .arg( 83419625d8cSopenharmony_ci Arg::new("option") 83519625d8cSopenharmony_ci .long("option") 83619625d8cSopenharmony_ci .num_args(1) 83719625d8cSopenharmony_ci .value_delimiter(','), 83819625d8cSopenharmony_ci ) 83919625d8cSopenharmony_ci .arg( 84019625d8cSopenharmony_ci Arg::new("args") 84119625d8cSopenharmony_ci .action(ArgAction::Set) 84219625d8cSopenharmony_ci .num_args(1..) 84319625d8cSopenharmony_ci .index(1), 84419625d8cSopenharmony_ci ) 84519625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--option", "val1", "val2", "val3"]); 84619625d8cSopenharmony_ci 84719625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 84819625d8cSopenharmony_ci let m = m.unwrap(); 84919625d8cSopenharmony_ci 85019625d8cSopenharmony_ci assert!(m.contains_id("option")); 85119625d8cSopenharmony_ci assert_eq!( 85219625d8cSopenharmony_ci m.get_many::<String>("option") 85319625d8cSopenharmony_ci .unwrap() 85419625d8cSopenharmony_ci .map(|v| v.as_str()) 85519625d8cSopenharmony_ci .collect::<Vec<_>>(), 85619625d8cSopenharmony_ci ["val1"] 85719625d8cSopenharmony_ci ); 85819625d8cSopenharmony_ci assert_eq!( 85919625d8cSopenharmony_ci m.get_many::<String>("args") 86019625d8cSopenharmony_ci .unwrap() 86119625d8cSopenharmony_ci .map(|v| v.as_str()) 86219625d8cSopenharmony_ci .collect::<Vec<_>>(), 86319625d8cSopenharmony_ci ["val2", "val3"] 86419625d8cSopenharmony_ci ); 86519625d8cSopenharmony_ci} 86619625d8cSopenharmony_ci 86719625d8cSopenharmony_ci#[test] 86819625d8cSopenharmony_cifn req_delimiter_long_with_equal() { 86919625d8cSopenharmony_ci let m = Command::new("multiple_values") 87019625d8cSopenharmony_ci .arg( 87119625d8cSopenharmony_ci Arg::new("option") 87219625d8cSopenharmony_ci .long("option") 87319625d8cSopenharmony_ci .num_args(1) 87419625d8cSopenharmony_ci .value_delimiter(','), 87519625d8cSopenharmony_ci ) 87619625d8cSopenharmony_ci .arg( 87719625d8cSopenharmony_ci Arg::new("args") 87819625d8cSopenharmony_ci .action(ArgAction::Set) 87919625d8cSopenharmony_ci .num_args(1..) 88019625d8cSopenharmony_ci .index(1), 88119625d8cSopenharmony_ci ) 88219625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--option=val1", "val2", "val3"]); 88319625d8cSopenharmony_ci 88419625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 88519625d8cSopenharmony_ci let m = m.unwrap(); 88619625d8cSopenharmony_ci 88719625d8cSopenharmony_ci assert!(m.contains_id("option")); 88819625d8cSopenharmony_ci assert_eq!( 88919625d8cSopenharmony_ci m.get_many::<String>("option") 89019625d8cSopenharmony_ci .unwrap() 89119625d8cSopenharmony_ci .map(|v| v.as_str()) 89219625d8cSopenharmony_ci .collect::<Vec<_>>(), 89319625d8cSopenharmony_ci ["val1"] 89419625d8cSopenharmony_ci ); 89519625d8cSopenharmony_ci assert_eq!( 89619625d8cSopenharmony_ci m.get_many::<String>("args") 89719625d8cSopenharmony_ci .unwrap() 89819625d8cSopenharmony_ci .map(|v| v.as_str()) 89919625d8cSopenharmony_ci .collect::<Vec<_>>(), 90019625d8cSopenharmony_ci ["val2", "val3"] 90119625d8cSopenharmony_ci ); 90219625d8cSopenharmony_ci} 90319625d8cSopenharmony_ci 90419625d8cSopenharmony_ci#[test] 90519625d8cSopenharmony_cifn req_delimiter_short_with_space() { 90619625d8cSopenharmony_ci let m = Command::new("multiple_values") 90719625d8cSopenharmony_ci .arg( 90819625d8cSopenharmony_ci Arg::new("option") 90919625d8cSopenharmony_ci .short('o') 91019625d8cSopenharmony_ci .num_args(1) 91119625d8cSopenharmony_ci .value_delimiter(','), 91219625d8cSopenharmony_ci ) 91319625d8cSopenharmony_ci .arg( 91419625d8cSopenharmony_ci Arg::new("args") 91519625d8cSopenharmony_ci .action(ArgAction::Set) 91619625d8cSopenharmony_ci .num_args(1..) 91719625d8cSopenharmony_ci .index(1), 91819625d8cSopenharmony_ci ) 91919625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o", "val1", "val2", "val3"]); 92019625d8cSopenharmony_ci 92119625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 92219625d8cSopenharmony_ci let m = m.unwrap(); 92319625d8cSopenharmony_ci 92419625d8cSopenharmony_ci assert!(m.contains_id("option")); 92519625d8cSopenharmony_ci assert_eq!( 92619625d8cSopenharmony_ci m.get_many::<String>("option") 92719625d8cSopenharmony_ci .unwrap() 92819625d8cSopenharmony_ci .map(|v| v.as_str()) 92919625d8cSopenharmony_ci .collect::<Vec<_>>(), 93019625d8cSopenharmony_ci ["val1"] 93119625d8cSopenharmony_ci ); 93219625d8cSopenharmony_ci assert_eq!( 93319625d8cSopenharmony_ci m.get_many::<String>("args") 93419625d8cSopenharmony_ci .unwrap() 93519625d8cSopenharmony_ci .map(|v| v.as_str()) 93619625d8cSopenharmony_ci .collect::<Vec<_>>(), 93719625d8cSopenharmony_ci ["val2", "val3"] 93819625d8cSopenharmony_ci ); 93919625d8cSopenharmony_ci} 94019625d8cSopenharmony_ci 94119625d8cSopenharmony_ci#[test] 94219625d8cSopenharmony_cifn req_delimiter_short_with_no_space() { 94319625d8cSopenharmony_ci let m = Command::new("multiple_values") 94419625d8cSopenharmony_ci .arg( 94519625d8cSopenharmony_ci Arg::new("option") 94619625d8cSopenharmony_ci .short('o') 94719625d8cSopenharmony_ci .num_args(1) 94819625d8cSopenharmony_ci .value_delimiter(','), 94919625d8cSopenharmony_ci ) 95019625d8cSopenharmony_ci .arg( 95119625d8cSopenharmony_ci Arg::new("args") 95219625d8cSopenharmony_ci .action(ArgAction::Set) 95319625d8cSopenharmony_ci .num_args(1..) 95419625d8cSopenharmony_ci .index(1), 95519625d8cSopenharmony_ci ) 95619625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-oval1", "val2", "val3"]); 95719625d8cSopenharmony_ci 95819625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 95919625d8cSopenharmony_ci let m = m.unwrap(); 96019625d8cSopenharmony_ci 96119625d8cSopenharmony_ci assert!(m.contains_id("option")); 96219625d8cSopenharmony_ci assert_eq!( 96319625d8cSopenharmony_ci m.get_many::<String>("option") 96419625d8cSopenharmony_ci .unwrap() 96519625d8cSopenharmony_ci .map(|v| v.as_str()) 96619625d8cSopenharmony_ci .collect::<Vec<_>>(), 96719625d8cSopenharmony_ci ["val1"] 96819625d8cSopenharmony_ci ); 96919625d8cSopenharmony_ci assert_eq!( 97019625d8cSopenharmony_ci m.get_many::<String>("args") 97119625d8cSopenharmony_ci .unwrap() 97219625d8cSopenharmony_ci .map(|v| v.as_str()) 97319625d8cSopenharmony_ci .collect::<Vec<_>>(), 97419625d8cSopenharmony_ci ["val2", "val3"] 97519625d8cSopenharmony_ci ); 97619625d8cSopenharmony_ci} 97719625d8cSopenharmony_ci 97819625d8cSopenharmony_ci#[test] 97919625d8cSopenharmony_cifn req_delimiter_short_with_equal() { 98019625d8cSopenharmony_ci let m = Command::new("multiple_values") 98119625d8cSopenharmony_ci .arg( 98219625d8cSopenharmony_ci Arg::new("option") 98319625d8cSopenharmony_ci .short('o') 98419625d8cSopenharmony_ci .num_args(1) 98519625d8cSopenharmony_ci .value_delimiter(','), 98619625d8cSopenharmony_ci ) 98719625d8cSopenharmony_ci .arg( 98819625d8cSopenharmony_ci Arg::new("args") 98919625d8cSopenharmony_ci .action(ArgAction::Set) 99019625d8cSopenharmony_ci .num_args(1..) 99119625d8cSopenharmony_ci .index(1), 99219625d8cSopenharmony_ci ) 99319625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-o=val1", "val2", "val3"]); 99419625d8cSopenharmony_ci 99519625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 99619625d8cSopenharmony_ci let m = m.unwrap(); 99719625d8cSopenharmony_ci 99819625d8cSopenharmony_ci assert!(m.contains_id("option")); 99919625d8cSopenharmony_ci assert_eq!( 100019625d8cSopenharmony_ci m.get_many::<String>("option") 100119625d8cSopenharmony_ci .unwrap() 100219625d8cSopenharmony_ci .map(|v| v.as_str()) 100319625d8cSopenharmony_ci .collect::<Vec<_>>(), 100419625d8cSopenharmony_ci ["val1"] 100519625d8cSopenharmony_ci ); 100619625d8cSopenharmony_ci assert_eq!( 100719625d8cSopenharmony_ci m.get_many::<String>("args") 100819625d8cSopenharmony_ci .unwrap() 100919625d8cSopenharmony_ci .map(|v| v.as_str()) 101019625d8cSopenharmony_ci .collect::<Vec<_>>(), 101119625d8cSopenharmony_ci ["val2", "val3"] 101219625d8cSopenharmony_ci ); 101319625d8cSopenharmony_ci} 101419625d8cSopenharmony_ci 101519625d8cSopenharmony_ci#[test] 101619625d8cSopenharmony_cifn req_delimiter_complex() { 101719625d8cSopenharmony_ci let m = Command::new("multiple_values") 101819625d8cSopenharmony_ci .arg( 101919625d8cSopenharmony_ci Arg::new("option") 102019625d8cSopenharmony_ci .long("option") 102119625d8cSopenharmony_ci .short('o') 102219625d8cSopenharmony_ci .num_args(1) 102319625d8cSopenharmony_ci .action(ArgAction::Append) 102419625d8cSopenharmony_ci .value_delimiter(','), 102519625d8cSopenharmony_ci ) 102619625d8cSopenharmony_ci .arg(Arg::new("args").num_args(1..).index(1)) 102719625d8cSopenharmony_ci .try_get_matches_from(vec![ 102819625d8cSopenharmony_ci "", 102919625d8cSopenharmony_ci "val1", 103019625d8cSopenharmony_ci "-oval2", 103119625d8cSopenharmony_ci "val3", 103219625d8cSopenharmony_ci "-o", 103319625d8cSopenharmony_ci "val4", 103419625d8cSopenharmony_ci "val5", 103519625d8cSopenharmony_ci "-o=val6", 103619625d8cSopenharmony_ci "val7", 103719625d8cSopenharmony_ci "--option=val8", 103819625d8cSopenharmony_ci "val9", 103919625d8cSopenharmony_ci "--option", 104019625d8cSopenharmony_ci "val10", 104119625d8cSopenharmony_ci "val11", 104219625d8cSopenharmony_ci "-oval12,val13", 104319625d8cSopenharmony_ci "val14", 104419625d8cSopenharmony_ci "-o", 104519625d8cSopenharmony_ci "val15,val16", 104619625d8cSopenharmony_ci "val17", 104719625d8cSopenharmony_ci "-o=val18,val19", 104819625d8cSopenharmony_ci "val20", 104919625d8cSopenharmony_ci "--option=val21,val22", 105019625d8cSopenharmony_ci "val23", 105119625d8cSopenharmony_ci "--option", 105219625d8cSopenharmony_ci "val24,val25", 105319625d8cSopenharmony_ci "val26", 105419625d8cSopenharmony_ci ]); 105519625d8cSopenharmony_ci 105619625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 105719625d8cSopenharmony_ci let m = m.unwrap(); 105819625d8cSopenharmony_ci 105919625d8cSopenharmony_ci assert!(m.contains_id("option")); 106019625d8cSopenharmony_ci assert_eq!( 106119625d8cSopenharmony_ci m.get_many::<String>("option") 106219625d8cSopenharmony_ci .unwrap() 106319625d8cSopenharmony_ci .map(|v| v.as_str()) 106419625d8cSopenharmony_ci .collect::<Vec<_>>(), 106519625d8cSopenharmony_ci [ 106619625d8cSopenharmony_ci "val2", "val4", "val6", "val8", "val10", "val12", "val13", "val15", "val16", "val18", 106719625d8cSopenharmony_ci "val19", "val21", "val22", "val24", "val25", 106819625d8cSopenharmony_ci ] 106919625d8cSopenharmony_ci ); 107019625d8cSopenharmony_ci assert_eq!( 107119625d8cSopenharmony_ci m.get_many::<String>("args") 107219625d8cSopenharmony_ci .unwrap() 107319625d8cSopenharmony_ci .map(|v| v.as_str()) 107419625d8cSopenharmony_ci .collect::<Vec<_>>(), 107519625d8cSopenharmony_ci [ 107619625d8cSopenharmony_ci "val1", "val3", "val5", "val7", "val9", "val11", "val14", "val17", "val20", "val23", 107719625d8cSopenharmony_ci "val26", 107819625d8cSopenharmony_ci ] 107919625d8cSopenharmony_ci ); 108019625d8cSopenharmony_ci} 108119625d8cSopenharmony_ci 108219625d8cSopenharmony_ci// This tests a programmer error and will only succeed with debug_assertions 108319625d8cSopenharmony_ci#[cfg(debug_assertions)] 108419625d8cSopenharmony_ci#[test] 108519625d8cSopenharmony_ci#[should_panic = "When using a positional argument with \ 108619625d8cSopenharmony_ci`.num_args(1..)` that is *not the last* positional argument, the last \ 108719625d8cSopenharmony_cipositional argument (i.e. the one with the highest index) *must* have \ 108819625d8cSopenharmony_ci.required(true) or .last(true) set."] 108919625d8cSopenharmony_cifn low_index_positional_not_required() { 109019625d8cSopenharmony_ci let _ = Command::new("lip") 109119625d8cSopenharmony_ci .arg( 109219625d8cSopenharmony_ci Arg::new("files") 109319625d8cSopenharmony_ci .index(1) 109419625d8cSopenharmony_ci .action(ArgAction::Set) 109519625d8cSopenharmony_ci .required(true) 109619625d8cSopenharmony_ci .num_args(1..), 109719625d8cSopenharmony_ci ) 109819625d8cSopenharmony_ci .arg(Arg::new("target").index(2)) 109919625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 110019625d8cSopenharmony_ci} 110119625d8cSopenharmony_ci 110219625d8cSopenharmony_ci// This tests a programmer error and will only succeed with debug_assertions 110319625d8cSopenharmony_ci#[cfg(debug_assertions)] 110419625d8cSopenharmony_ci#[test] 110519625d8cSopenharmony_ci#[should_panic = "Only one positional argument with `.num_args(1..)` \ 110619625d8cSopenharmony_ciset is allowed per command, unless the second one also has .last(true) set"] 110719625d8cSopenharmony_cifn low_index_positional_last_multiple_too() { 110819625d8cSopenharmony_ci let _ = Command::new("lip") 110919625d8cSopenharmony_ci .arg( 111019625d8cSopenharmony_ci Arg::new("files") 111119625d8cSopenharmony_ci .index(1) 111219625d8cSopenharmony_ci .action(ArgAction::Set) 111319625d8cSopenharmony_ci .required(true) 111419625d8cSopenharmony_ci .num_args(1..), 111519625d8cSopenharmony_ci ) 111619625d8cSopenharmony_ci .arg( 111719625d8cSopenharmony_ci Arg::new("target") 111819625d8cSopenharmony_ci .index(2) 111919625d8cSopenharmony_ci .action(ArgAction::Set) 112019625d8cSopenharmony_ci .required(true) 112119625d8cSopenharmony_ci .num_args(1..), 112219625d8cSopenharmony_ci ) 112319625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 112419625d8cSopenharmony_ci} 112519625d8cSopenharmony_ci 112619625d8cSopenharmony_ci// This tests a programmer error and will only succeed with debug_assertions 112719625d8cSopenharmony_ci#[cfg(debug_assertions)] 112819625d8cSopenharmony_ci#[test] 112919625d8cSopenharmony_ci#[should_panic = "Only the last positional argument, or second to \ 113019625d8cSopenharmony_cilast positional argument may be set to `.num_args(1..)`"] 113119625d8cSopenharmony_cifn low_index_positional_too_far_back() { 113219625d8cSopenharmony_ci let _ = Command::new("lip") 113319625d8cSopenharmony_ci .arg( 113419625d8cSopenharmony_ci Arg::new("files") 113519625d8cSopenharmony_ci .index(1) 113619625d8cSopenharmony_ci .action(ArgAction::Set) 113719625d8cSopenharmony_ci .required(true) 113819625d8cSopenharmony_ci .num_args(1..), 113919625d8cSopenharmony_ci ) 114019625d8cSopenharmony_ci .arg(Arg::new("target").required(true).index(2)) 114119625d8cSopenharmony_ci .arg(Arg::new("target2").required(true).index(3)) 114219625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 114319625d8cSopenharmony_ci} 114419625d8cSopenharmony_ci 114519625d8cSopenharmony_ci#[test] 114619625d8cSopenharmony_cifn low_index_positional() { 114719625d8cSopenharmony_ci let m = Command::new("lip") 114819625d8cSopenharmony_ci .arg( 114919625d8cSopenharmony_ci Arg::new("files") 115019625d8cSopenharmony_ci .index(1) 115119625d8cSopenharmony_ci .action(ArgAction::Set) 115219625d8cSopenharmony_ci .required(true) 115319625d8cSopenharmony_ci .num_args(1..), 115419625d8cSopenharmony_ci ) 115519625d8cSopenharmony_ci .arg(Arg::new("target").index(2).required(true)) 115619625d8cSopenharmony_ci .try_get_matches_from(vec!["lip", "file1", "file2", "file3", "target"]); 115719625d8cSopenharmony_ci 115819625d8cSopenharmony_ci assert!(m.is_ok(), "{:?}", m.unwrap_err().kind()); 115919625d8cSopenharmony_ci let m = m.unwrap(); 116019625d8cSopenharmony_ci 116119625d8cSopenharmony_ci assert!(m.contains_id("files")); 116219625d8cSopenharmony_ci assert_eq!( 116319625d8cSopenharmony_ci m.get_many::<String>("files") 116419625d8cSopenharmony_ci .unwrap() 116519625d8cSopenharmony_ci .map(|v| v.as_str()) 116619625d8cSopenharmony_ci .collect::<Vec<_>>(), 116719625d8cSopenharmony_ci ["file1", "file2", "file3"] 116819625d8cSopenharmony_ci ); 116919625d8cSopenharmony_ci assert!(m.contains_id("target")); 117019625d8cSopenharmony_ci assert_eq!( 117119625d8cSopenharmony_ci m.get_one::<String>("target").map(|v| v.as_str()).unwrap(), 117219625d8cSopenharmony_ci "target" 117319625d8cSopenharmony_ci ); 117419625d8cSopenharmony_ci} 117519625d8cSopenharmony_ci 117619625d8cSopenharmony_ci#[test] 117719625d8cSopenharmony_cifn low_index_positional_in_subcmd() { 117819625d8cSopenharmony_ci let m = Command::new("lip") 117919625d8cSopenharmony_ci .subcommand( 118019625d8cSopenharmony_ci Command::new("test") 118119625d8cSopenharmony_ci .arg( 118219625d8cSopenharmony_ci Arg::new("files") 118319625d8cSopenharmony_ci .index(1) 118419625d8cSopenharmony_ci .action(ArgAction::Set) 118519625d8cSopenharmony_ci .required(true) 118619625d8cSopenharmony_ci .num_args(1..), 118719625d8cSopenharmony_ci ) 118819625d8cSopenharmony_ci .arg(Arg::new("target").index(2).required(true)), 118919625d8cSopenharmony_ci ) 119019625d8cSopenharmony_ci .try_get_matches_from(vec!["lip", "test", "file1", "file2", "file3", "target"]); 119119625d8cSopenharmony_ci 119219625d8cSopenharmony_ci assert!(m.is_ok(), "{:?}", m.unwrap_err().kind()); 119319625d8cSopenharmony_ci let m = m.unwrap(); 119419625d8cSopenharmony_ci let sm = m.subcommand_matches("test").unwrap(); 119519625d8cSopenharmony_ci 119619625d8cSopenharmony_ci assert!(sm.contains_id("files")); 119719625d8cSopenharmony_ci assert_eq!( 119819625d8cSopenharmony_ci sm.get_many::<String>("files") 119919625d8cSopenharmony_ci .unwrap() 120019625d8cSopenharmony_ci .map(|v| v.as_str()) 120119625d8cSopenharmony_ci .collect::<Vec<_>>(), 120219625d8cSopenharmony_ci ["file1", "file2", "file3"] 120319625d8cSopenharmony_ci ); 120419625d8cSopenharmony_ci assert!(sm.contains_id("target")); 120519625d8cSopenharmony_ci assert_eq!( 120619625d8cSopenharmony_ci sm.get_one::<String>("target").map(|v| v.as_str()).unwrap(), 120719625d8cSopenharmony_ci "target" 120819625d8cSopenharmony_ci ); 120919625d8cSopenharmony_ci} 121019625d8cSopenharmony_ci 121119625d8cSopenharmony_ci#[test] 121219625d8cSopenharmony_cifn low_index_positional_with_option() { 121319625d8cSopenharmony_ci let m = Command::new("lip") 121419625d8cSopenharmony_ci .arg( 121519625d8cSopenharmony_ci Arg::new("files") 121619625d8cSopenharmony_ci .required(true) 121719625d8cSopenharmony_ci .index(1) 121819625d8cSopenharmony_ci .action(ArgAction::Set) 121919625d8cSopenharmony_ci .num_args(1..), 122019625d8cSopenharmony_ci ) 122119625d8cSopenharmony_ci .arg(Arg::new("target").index(2).required(true)) 122219625d8cSopenharmony_ci .arg(Arg::new("opt").long("option").action(ArgAction::Set)) 122319625d8cSopenharmony_ci .try_get_matches_from(vec![ 122419625d8cSopenharmony_ci "lip", "file1", "file2", "file3", "target", "--option", "test", 122519625d8cSopenharmony_ci ]); 122619625d8cSopenharmony_ci 122719625d8cSopenharmony_ci assert!(m.is_ok(), "{:?}", m.unwrap_err().kind()); 122819625d8cSopenharmony_ci let m = m.unwrap(); 122919625d8cSopenharmony_ci 123019625d8cSopenharmony_ci assert!(m.contains_id("files")); 123119625d8cSopenharmony_ci assert_eq!( 123219625d8cSopenharmony_ci m.get_many::<String>("files") 123319625d8cSopenharmony_ci .unwrap() 123419625d8cSopenharmony_ci .map(|v| v.as_str()) 123519625d8cSopenharmony_ci .collect::<Vec<_>>(), 123619625d8cSopenharmony_ci ["file1", "file2", "file3"] 123719625d8cSopenharmony_ci ); 123819625d8cSopenharmony_ci assert!(m.contains_id("target")); 123919625d8cSopenharmony_ci assert_eq!( 124019625d8cSopenharmony_ci m.get_one::<String>("target").map(|v| v.as_str()).unwrap(), 124119625d8cSopenharmony_ci "target" 124219625d8cSopenharmony_ci ); 124319625d8cSopenharmony_ci assert_eq!( 124419625d8cSopenharmony_ci m.get_one::<String>("opt").map(|v| v.as_str()).unwrap(), 124519625d8cSopenharmony_ci "test" 124619625d8cSopenharmony_ci ); 124719625d8cSopenharmony_ci} 124819625d8cSopenharmony_ci 124919625d8cSopenharmony_ci#[test] 125019625d8cSopenharmony_cifn low_index_positional_with_flag() { 125119625d8cSopenharmony_ci let m = Command::new("lip") 125219625d8cSopenharmony_ci .arg( 125319625d8cSopenharmony_ci Arg::new("files") 125419625d8cSopenharmony_ci .index(1) 125519625d8cSopenharmony_ci .action(ArgAction::Set) 125619625d8cSopenharmony_ci .required(true) 125719625d8cSopenharmony_ci .num_args(1..), 125819625d8cSopenharmony_ci ) 125919625d8cSopenharmony_ci .arg(Arg::new("target").index(2).required(true)) 126019625d8cSopenharmony_ci .arg(Arg::new("flg").long("flag").action(ArgAction::SetTrue)) 126119625d8cSopenharmony_ci .try_get_matches_from(vec!["lip", "file1", "file2", "file3", "target", "--flag"]); 126219625d8cSopenharmony_ci 126319625d8cSopenharmony_ci assert!(m.is_ok(), "{:?}", m.unwrap_err().kind()); 126419625d8cSopenharmony_ci let m = m.unwrap(); 126519625d8cSopenharmony_ci 126619625d8cSopenharmony_ci assert!(m.contains_id("files")); 126719625d8cSopenharmony_ci assert_eq!( 126819625d8cSopenharmony_ci m.get_many::<String>("files") 126919625d8cSopenharmony_ci .unwrap() 127019625d8cSopenharmony_ci .map(|v| v.as_str()) 127119625d8cSopenharmony_ci .collect::<Vec<_>>(), 127219625d8cSopenharmony_ci ["file1", "file2", "file3"] 127319625d8cSopenharmony_ci ); 127419625d8cSopenharmony_ci assert!(m.contains_id("target")); 127519625d8cSopenharmony_ci assert_eq!( 127619625d8cSopenharmony_ci m.get_one::<String>("target").map(|v| v.as_str()).unwrap(), 127719625d8cSopenharmony_ci "target" 127819625d8cSopenharmony_ci ); 127919625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flg").expect("defaulted by clap")); 128019625d8cSopenharmony_ci} 128119625d8cSopenharmony_ci 128219625d8cSopenharmony_ci#[test] 128319625d8cSopenharmony_cifn low_index_positional_with_extra_flags() { 128419625d8cSopenharmony_ci let cmd = Command::new("test") 128519625d8cSopenharmony_ci .arg(Arg::new("yes").long("yes").action(ArgAction::SetTrue)) 128619625d8cSopenharmony_ci .arg(Arg::new("one").long("one").action(ArgAction::Set)) 128719625d8cSopenharmony_ci .arg(Arg::new("two").long("two").action(ArgAction::Set)) 128819625d8cSopenharmony_ci .arg(Arg::new("input").num_args(1..).required(true)) 128919625d8cSopenharmony_ci .arg(Arg::new("output").required(true)); 129019625d8cSopenharmony_ci let m = cmd.try_get_matches_from([ 129119625d8cSopenharmony_ci "test", "--one", "1", "--two", "2", "3", "4", "5", "6", "7", "8", 129219625d8cSopenharmony_ci ]); 129319625d8cSopenharmony_ci 129419625d8cSopenharmony_ci assert!(m.is_ok(), "{:?}", m.unwrap_err().kind()); 129519625d8cSopenharmony_ci let m = m.unwrap(); 129619625d8cSopenharmony_ci 129719625d8cSopenharmony_ci assert_eq!( 129819625d8cSopenharmony_ci m.get_many::<String>("input") 129919625d8cSopenharmony_ci .unwrap() 130019625d8cSopenharmony_ci .into_iter() 130119625d8cSopenharmony_ci .map(String::from) 130219625d8cSopenharmony_ci .collect::<Vec<_>>(), 130319625d8cSopenharmony_ci vec![ 130419625d8cSopenharmony_ci "3".to_owned(), 130519625d8cSopenharmony_ci "4".to_owned(), 130619625d8cSopenharmony_ci "5".to_owned(), 130719625d8cSopenharmony_ci "6".to_owned(), 130819625d8cSopenharmony_ci "7".to_owned() 130919625d8cSopenharmony_ci ], 131019625d8cSopenharmony_ci ); 131119625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("output").unwrap(), "8"); 131219625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("one").unwrap(), "1"); 131319625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("two").unwrap(), "2"); 131419625d8cSopenharmony_ci assert!(!m.get_flag("yes")); 131519625d8cSopenharmony_ci} 131619625d8cSopenharmony_ci 131719625d8cSopenharmony_ci#[test] 131819625d8cSopenharmony_cifn multiple_value_terminator_option() { 131919625d8cSopenharmony_ci let m = Command::new("lip") 132019625d8cSopenharmony_ci .arg( 132119625d8cSopenharmony_ci Arg::new("files") 132219625d8cSopenharmony_ci .short('f') 132319625d8cSopenharmony_ci .value_terminator(";") 132419625d8cSopenharmony_ci .action(ArgAction::Set) 132519625d8cSopenharmony_ci .num_args(1..), 132619625d8cSopenharmony_ci ) 132719625d8cSopenharmony_ci .arg(Arg::new("other")) 132819625d8cSopenharmony_ci .try_get_matches_from(vec!["lip", "-f", "val1", "val2", ";", "otherval"]); 132919625d8cSopenharmony_ci 133019625d8cSopenharmony_ci assert!(m.is_ok(), "{:?}", m.unwrap_err().kind()); 133119625d8cSopenharmony_ci let m = m.unwrap(); 133219625d8cSopenharmony_ci 133319625d8cSopenharmony_ci assert!(m.contains_id("other")); 133419625d8cSopenharmony_ci assert!(m.contains_id("files")); 133519625d8cSopenharmony_ci assert_eq!( 133619625d8cSopenharmony_ci m.get_many::<String>("files") 133719625d8cSopenharmony_ci .unwrap() 133819625d8cSopenharmony_ci .map(|v| v.as_str()) 133919625d8cSopenharmony_ci .collect::<Vec<_>>(), 134019625d8cSopenharmony_ci ["val1", "val2"] 134119625d8cSopenharmony_ci ); 134219625d8cSopenharmony_ci assert_eq!( 134319625d8cSopenharmony_ci m.get_one::<String>("other").map(|v| v.as_str()), 134419625d8cSopenharmony_ci Some("otherval") 134519625d8cSopenharmony_ci ); 134619625d8cSopenharmony_ci} 134719625d8cSopenharmony_ci 134819625d8cSopenharmony_ci#[test] 134919625d8cSopenharmony_cifn multiple_value_terminator_option_other_arg() { 135019625d8cSopenharmony_ci let m = Command::new("lip") 135119625d8cSopenharmony_ci .arg( 135219625d8cSopenharmony_ci Arg::new("files") 135319625d8cSopenharmony_ci .short('f') 135419625d8cSopenharmony_ci .value_terminator(";") 135519625d8cSopenharmony_ci .action(ArgAction::Set) 135619625d8cSopenharmony_ci .num_args(1..), 135719625d8cSopenharmony_ci ) 135819625d8cSopenharmony_ci .arg(Arg::new("other")) 135919625d8cSopenharmony_ci .arg(Arg::new("flag").short('F').action(ArgAction::SetTrue)) 136019625d8cSopenharmony_ci .try_get_matches_from(vec!["lip", "-f", "val1", "val2", "-F", "otherval"]); 136119625d8cSopenharmony_ci 136219625d8cSopenharmony_ci assert!(m.is_ok(), "{:?}", m.unwrap_err().kind()); 136319625d8cSopenharmony_ci let m = m.unwrap(); 136419625d8cSopenharmony_ci 136519625d8cSopenharmony_ci assert!(m.contains_id("other")); 136619625d8cSopenharmony_ci assert!(m.contains_id("files")); 136719625d8cSopenharmony_ci assert_eq!( 136819625d8cSopenharmony_ci m.get_many::<String>("files") 136919625d8cSopenharmony_ci .unwrap() 137019625d8cSopenharmony_ci .map(|v| v.as_str()) 137119625d8cSopenharmony_ci .collect::<Vec<_>>(), 137219625d8cSopenharmony_ci ["val1", "val2"] 137319625d8cSopenharmony_ci ); 137419625d8cSopenharmony_ci assert_eq!( 137519625d8cSopenharmony_ci m.get_one::<String>("other").map(|v| v.as_str()), 137619625d8cSopenharmony_ci Some("otherval") 137719625d8cSopenharmony_ci ); 137819625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 137919625d8cSopenharmony_ci} 138019625d8cSopenharmony_ci 138119625d8cSopenharmony_ci#[test] 138219625d8cSopenharmony_cifn multiple_vals_with_hyphen() { 138319625d8cSopenharmony_ci let res = Command::new("do") 138419625d8cSopenharmony_ci .arg( 138519625d8cSopenharmony_ci Arg::new("cmds") 138619625d8cSopenharmony_ci .action(ArgAction::Set) 138719625d8cSopenharmony_ci .num_args(1..) 138819625d8cSopenharmony_ci .allow_hyphen_values(true) 138919625d8cSopenharmony_ci .value_terminator(";"), 139019625d8cSopenharmony_ci ) 139119625d8cSopenharmony_ci .arg(Arg::new("location")) 139219625d8cSopenharmony_ci .try_get_matches_from(vec![ 139319625d8cSopenharmony_ci "do", 139419625d8cSopenharmony_ci "find", 139519625d8cSopenharmony_ci "-type", 139619625d8cSopenharmony_ci "f", 139719625d8cSopenharmony_ci "-name", 139819625d8cSopenharmony_ci "special", 139919625d8cSopenharmony_ci ";", 140019625d8cSopenharmony_ci "/home/clap", 140119625d8cSopenharmony_ci ]); 140219625d8cSopenharmony_ci assert!(res.is_ok(), "{:?}", res.unwrap_err().kind()); 140319625d8cSopenharmony_ci 140419625d8cSopenharmony_ci let m = res.unwrap(); 140519625d8cSopenharmony_ci let cmds: Vec<_> = m 140619625d8cSopenharmony_ci .get_many::<String>("cmds") 140719625d8cSopenharmony_ci .unwrap() 140819625d8cSopenharmony_ci .map(|v| v.as_str()) 140919625d8cSopenharmony_ci .collect(); 141019625d8cSopenharmony_ci assert_eq!(&cmds, &["find", "-type", "f", "-name", "special"]); 141119625d8cSopenharmony_ci assert_eq!( 141219625d8cSopenharmony_ci m.get_one::<String>("location").map(|v| v.as_str()), 141319625d8cSopenharmony_ci Some("/home/clap") 141419625d8cSopenharmony_ci ); 141519625d8cSopenharmony_ci} 141619625d8cSopenharmony_ci 141719625d8cSopenharmony_ci#[test] 141819625d8cSopenharmony_cifn issue_1480_max_values_consumes_extra_arg_1() { 141919625d8cSopenharmony_ci let res = Command::new("prog") 142019625d8cSopenharmony_ci .arg(Arg::new("field").num_args(..=1).long("field")) 142119625d8cSopenharmony_ci .arg(Arg::new("positional").required(true).index(1)) 142219625d8cSopenharmony_ci .try_get_matches_from(vec!["prog", "--field", "1", "file"]); 142319625d8cSopenharmony_ci 142419625d8cSopenharmony_ci assert!(res.is_ok(), "{}", res.unwrap_err()); 142519625d8cSopenharmony_ci} 142619625d8cSopenharmony_ci 142719625d8cSopenharmony_ci#[test] 142819625d8cSopenharmony_cifn issue_1480_max_values_consumes_extra_arg_2() { 142919625d8cSopenharmony_ci let res = Command::new("prog") 143019625d8cSopenharmony_ci .arg(Arg::new("field").num_args(..=1).long("field")) 143119625d8cSopenharmony_ci .try_get_matches_from(vec!["prog", "--field", "1", "2"]); 143219625d8cSopenharmony_ci 143319625d8cSopenharmony_ci assert!(res.is_err()); 143419625d8cSopenharmony_ci assert_eq!(res.unwrap_err().kind(), ErrorKind::UnknownArgument); 143519625d8cSopenharmony_ci} 143619625d8cSopenharmony_ci 143719625d8cSopenharmony_ci#[test] 143819625d8cSopenharmony_cifn issue_1480_max_values_consumes_extra_arg_3() { 143919625d8cSopenharmony_ci let res = Command::new("prog") 144019625d8cSopenharmony_ci .arg(Arg::new("field").num_args(..=1).long("field")) 144119625d8cSopenharmony_ci .try_get_matches_from(vec!["prog", "--field", "1", "2", "3"]); 144219625d8cSopenharmony_ci 144319625d8cSopenharmony_ci assert!(res.is_err()); 144419625d8cSopenharmony_ci assert_eq!(res.unwrap_err().kind(), ErrorKind::UnknownArgument); 144519625d8cSopenharmony_ci} 144619625d8cSopenharmony_ci 144719625d8cSopenharmony_ci#[test] 144819625d8cSopenharmony_cifn value_names_building_num_vals() { 144919625d8cSopenharmony_ci let m = Command::new("test") 145019625d8cSopenharmony_ci .arg( 145119625d8cSopenharmony_ci Arg::new("pos") 145219625d8cSopenharmony_ci .long("pos") 145319625d8cSopenharmony_ci .value_names(["who", "what", "why"]), 145419625d8cSopenharmony_ci ) 145519625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "--pos", "val1", "val2", "val3"]); 145619625d8cSopenharmony_ci 145719625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 145819625d8cSopenharmony_ci let m = m.unwrap(); 145919625d8cSopenharmony_ci 146019625d8cSopenharmony_ci assert_eq!( 146119625d8cSopenharmony_ci m.get_many::<String>("pos") 146219625d8cSopenharmony_ci .unwrap() 146319625d8cSopenharmony_ci .map(|v| v.as_str()) 146419625d8cSopenharmony_ci .collect::<Vec<_>>(), 146519625d8cSopenharmony_ci ["val1", "val2", "val3"] 146619625d8cSopenharmony_ci ); 146719625d8cSopenharmony_ci} 146819625d8cSopenharmony_ci 146919625d8cSopenharmony_ci#[test] 147019625d8cSopenharmony_cifn value_names_building_num_vals_for_positional() { 147119625d8cSopenharmony_ci let m = Command::new("test") 147219625d8cSopenharmony_ci .arg(Arg::new("pos").value_names(["who", "what", "why"])) 147319625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "val1", "val2", "val3"]); 147419625d8cSopenharmony_ci 147519625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 147619625d8cSopenharmony_ci let m = m.unwrap(); 147719625d8cSopenharmony_ci 147819625d8cSopenharmony_ci assert_eq!( 147919625d8cSopenharmony_ci m.get_many::<String>("pos") 148019625d8cSopenharmony_ci .unwrap() 148119625d8cSopenharmony_ci .map(|v| v.as_str()) 148219625d8cSopenharmony_ci .collect::<Vec<_>>(), 148319625d8cSopenharmony_ci ["val1", "val2", "val3"] 148419625d8cSopenharmony_ci ); 148519625d8cSopenharmony_ci} 148619625d8cSopenharmony_ci 148719625d8cSopenharmony_ci#[test] 148819625d8cSopenharmony_cifn num_args_preferred_over_value_names() { 148919625d8cSopenharmony_ci let m = Command::new("test") 149019625d8cSopenharmony_ci .arg( 149119625d8cSopenharmony_ci Arg::new("pos") 149219625d8cSopenharmony_ci .long("pos") 149319625d8cSopenharmony_ci .num_args(4) 149419625d8cSopenharmony_ci .value_names(["who", "what", "why"]), 149519625d8cSopenharmony_ci ) 149619625d8cSopenharmony_ci .try_get_matches_from(vec!["myprog", "--pos", "val1", "val2", "val3", "val4"]); 149719625d8cSopenharmony_ci 149819625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 149919625d8cSopenharmony_ci let m = m.unwrap(); 150019625d8cSopenharmony_ci 150119625d8cSopenharmony_ci assert_eq!( 150219625d8cSopenharmony_ci m.get_many::<String>("pos") 150319625d8cSopenharmony_ci .unwrap() 150419625d8cSopenharmony_ci .map(|v| v.as_str()) 150519625d8cSopenharmony_ci .collect::<Vec<_>>(), 150619625d8cSopenharmony_ci ["val1", "val2", "val3", "val4"] 150719625d8cSopenharmony_ci ); 150819625d8cSopenharmony_ci} 150919625d8cSopenharmony_ci 151019625d8cSopenharmony_ci#[test] 151119625d8cSopenharmony_cifn values_per_occurrence_named() { 151219625d8cSopenharmony_ci let mut a = Command::new("test").arg( 151319625d8cSopenharmony_ci Arg::new("pos") 151419625d8cSopenharmony_ci .long("pos") 151519625d8cSopenharmony_ci .num_args(2) 151619625d8cSopenharmony_ci .action(ArgAction::Append), 151719625d8cSopenharmony_ci ); 151819625d8cSopenharmony_ci 151919625d8cSopenharmony_ci let m = a.try_get_matches_from_mut(vec!["myprog", "--pos", "val1", "val2"]); 152019625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 152119625d8cSopenharmony_ci let m = m.unwrap(); 152219625d8cSopenharmony_ci assert_eq!( 152319625d8cSopenharmony_ci m.get_many::<String>("pos") 152419625d8cSopenharmony_ci .unwrap() 152519625d8cSopenharmony_ci .map(|v| v.as_str()) 152619625d8cSopenharmony_ci .collect::<Vec<_>>(), 152719625d8cSopenharmony_ci ["val1", "val2"] 152819625d8cSopenharmony_ci ); 152919625d8cSopenharmony_ci 153019625d8cSopenharmony_ci let m = a.try_get_matches_from_mut(vec![ 153119625d8cSopenharmony_ci "myprog", "--pos", "val1", "val2", "--pos", "val3", "val4", 153219625d8cSopenharmony_ci ]); 153319625d8cSopenharmony_ci let m = match m { 153419625d8cSopenharmony_ci Ok(m) => m, 153519625d8cSopenharmony_ci Err(err) => panic!("{}", err), 153619625d8cSopenharmony_ci }; 153719625d8cSopenharmony_ci assert_eq!( 153819625d8cSopenharmony_ci m.get_many::<String>("pos") 153919625d8cSopenharmony_ci .unwrap() 154019625d8cSopenharmony_ci .map(|v| v.as_str()) 154119625d8cSopenharmony_ci .collect::<Vec<_>>(), 154219625d8cSopenharmony_ci ["val1", "val2", "val3", "val4"] 154319625d8cSopenharmony_ci ); 154419625d8cSopenharmony_ci} 154519625d8cSopenharmony_ci 154619625d8cSopenharmony_ci#[test] 154719625d8cSopenharmony_cifn values_per_occurrence_positional() { 154819625d8cSopenharmony_ci let mut a = Command::new("test").arg(Arg::new("pos").num_args(2).action(ArgAction::Append)); 154919625d8cSopenharmony_ci 155019625d8cSopenharmony_ci let m = a.try_get_matches_from_mut(vec!["myprog", "val1", "val2"]); 155119625d8cSopenharmony_ci assert!(m.is_ok(), "{}", m.unwrap_err()); 155219625d8cSopenharmony_ci let m = m.unwrap(); 155319625d8cSopenharmony_ci assert_eq!( 155419625d8cSopenharmony_ci m.get_many::<String>("pos") 155519625d8cSopenharmony_ci .unwrap() 155619625d8cSopenharmony_ci .map(|v| v.as_str()) 155719625d8cSopenharmony_ci .collect::<Vec<_>>(), 155819625d8cSopenharmony_ci ["val1", "val2"] 155919625d8cSopenharmony_ci ); 156019625d8cSopenharmony_ci} 156119625d8cSopenharmony_ci 156219625d8cSopenharmony_ci#[test] 156319625d8cSopenharmony_cifn issue_2229() { 156419625d8cSopenharmony_ci let m = Command::new("multiple_values") 156519625d8cSopenharmony_ci .arg(Arg::new("pos").help("multiple positionals").num_args(3)) 156619625d8cSopenharmony_ci .try_get_matches_from(vec![ 156719625d8cSopenharmony_ci "myprog", "val1", "val2", "val3", "val4", "val5", "val6", 156819625d8cSopenharmony_ci ]); 156919625d8cSopenharmony_ci 157019625d8cSopenharmony_ci assert!(m.is_err()); 157119625d8cSopenharmony_ci assert_eq!(m.unwrap_err().kind(), ErrorKind::WrongNumberOfValues); 157219625d8cSopenharmony_ci} 157319625d8cSopenharmony_ci 157419625d8cSopenharmony_ci#[test] 157519625d8cSopenharmony_ci#[should_panic = "Argument 'pos` is positional, it must take a value"] 157619625d8cSopenharmony_cifn disallow_positionals_without_values() { 157719625d8cSopenharmony_ci let cmd = Command::new("test").arg(Arg::new("pos").num_args(0)); 157819625d8cSopenharmony_ci cmd.debug_assert(); 157919625d8cSopenharmony_ci} 1580