mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-20 06:13:47 +08:00
44 lines
1.3 KiB
Rust
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");
|
|
}
|