Skip to content

Commit

Permalink
fix(builder): Don't double-has arg id in default_value_ifs_os (#3815)
Browse files Browse the repository at this point in the history
  • Loading branch information
zw201913 committed Jun 13, 2022
1 parent 8bb3853 commit 3eacf5b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/builder/arg.rs
Expand Up @@ -3307,7 +3307,7 @@ impl<'help> Arg<'help> {
ifs: &[(T, Option<&'help OsStr>, Option<&'help OsStr>)],
) -> Self {
for (arg, val, default) in ifs {
self = self.default_value_if_os(arg.key(), *val, *default);
self = self.default_value_if_os(arg, *val, *default);
}
self
}
Expand Down
43 changes: 42 additions & 1 deletion tests/builder/arg_settings.rs
@@ -1,5 +1,7 @@
#![allow(deprecated)]
use clap::{Arg, ArgSettings};

use clap::{Arg, ArgSettings, Command};
use std::ffi::OsStr;

#[test]
fn setting() {
Expand Down Expand Up @@ -42,3 +44,42 @@ fn unset_setting_bitor() {
assert!(!m.is_hide_set(), "{:#?}", m);
assert!(!m.is_last_set(), "{:#?}", m);
}

#[test]
fn default_value_ifs_os() {
let cmd = Command::new("my_cargo")
.arg(
Arg::new("flag")
.long("flag")
.allow_invalid_utf8(true)
.takes_value(true),
)
.arg(
Arg::new("other")
.long("other")
.allow_invalid_utf8(true)
.default_value_ifs_os(&[(
"flag",
Some("标记2").map(OsStr::new),
Some("flag=标记2").map(OsStr::new),
)]),
);
let result = cmd.try_get_matches_from([
OsStr::new("my_cargo"),
OsStr::new("--flag"),
OsStr::new("标记2"),
]);
assert!(result.is_ok());
match result {
Ok(arg_matches) => {
assert_eq!(arg_matches.value_of_os("flag"), Some(OsStr::new("标记2")));
assert_eq!(
arg_matches.value_of_os("other"),
Some(OsStr::new("flag=标记2")),
);
}
Err(e) => {
println!("{}", e.to_string());
}
}
}

0 comments on commit 3eacf5b

Please sign in to comment.