You've already forked uutils-args
mirror of
https://github.com/uutils/uutils-args.git
synced 2026-06-10 16:13:08 -07:00
64 lines
1.4 KiB
Rust
64 lines
1.4 KiB
Rust
use std::ffi::OsString;
|
|
|
|
use uutils_args::{Arguments, Options};
|
|
|
|
#[test]
|
|
fn timeout_like() {
|
|
// The timeout coreutil has -v and a command argument
|
|
#[derive(Arguments)]
|
|
#[arguments(options_first)]
|
|
enum Arg {
|
|
#[arg("-v", "--verbose")]
|
|
Verbose,
|
|
}
|
|
|
|
#[derive(Default)]
|
|
struct Settings {
|
|
verbose: bool,
|
|
}
|
|
|
|
impl Options<Arg> for Settings {
|
|
fn apply(&mut self, arg: Arg) -> Result<(), uutils_args::Error> {
|
|
match arg {
|
|
Arg::Verbose => self.verbose = true,
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
let (settings, command) = Settings::default()
|
|
.parse(["timeout", "-v", "10", "foo", "-v"])
|
|
.unwrap();
|
|
|
|
assert!(settings.verbose);
|
|
assert_eq!(
|
|
command,
|
|
vec![
|
|
OsString::from("10"),
|
|
OsString::from("foo"),
|
|
OsString::from("-v")
|
|
]
|
|
);
|
|
|
|
let (settings, command) = Settings::default()
|
|
.parse(["timeout", "10", "foo", "-v"])
|
|
.unwrap();
|
|
|
|
assert!(!settings.verbose);
|
|
assert_eq!(
|
|
command,
|
|
vec![
|
|
OsString::from("10"),
|
|
OsString::from("foo"),
|
|
OsString::from("-v")
|
|
]
|
|
);
|
|
|
|
let (settings, command) = Settings::default()
|
|
.parse(["timeout", "--", "10", "-v"])
|
|
.unwrap();
|
|
|
|
assert!(!settings.verbose);
|
|
assert_eq!(command, vec![OsString::from("10"), OsString::from("-v")]);
|
|
}
|