fish-shell/src/tests/wgetopt.rs

44 lines
1.3 KiB
Rust

use crate::wchar::prelude::*;
use crate::wcstringutil::join_strings;
use crate::wgetopt::{wopt, ArgType, WGetopter, WOption};
#[test]
fn test_wgetopt() {
// Regression test for a crash.
const short_options: &wstr = L!("-a");
const long_options: &[WOption] = &[wopt(L!("add"), ArgType::NoArgument, 'a')];
let mut argv = [
L!("abbr"),
L!("--add"),
L!("emacsnw"),
L!("emacs"),
L!("-nw"),
];
let mut w = WGetopter::new(short_options, long_options, &mut argv);
let mut a_count = 0;
let mut arguments = vec![];
while let Some(opt) = w.next_opt() {
match opt {
'a' => {
a_count += 1;
}
'\x01' => {
// non-option argument
arguments.push(w.woptarg.as_ref().unwrap().to_owned());
}
'?' => {
// unrecognized option
if let Some(arg) = w.argv.get(w.wopt_index - 1) {
arguments.push(arg.to_owned());
}
}
_ => {
panic!("unexpected option: {:?}", opt);
}
}
}
assert_eq!(a_count, 1);
assert_eq!(arguments.len(), 3);
assert_eq!(join_strings(&arguments, ' '), "emacsnw emacs -nw");
}