mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
fix tr with any flag with more than 2 operands (#5952)
* fix tr * add tests * fix clippy * fix clippy2 * do suggestions * do suggestions * remove mut * tr: move var to block & remove its type --------- Co-authored-by: Daniel Hofstetter <daniel.hofstetter@42dh.com>
This commit is contained in:
parent
826cdbe3dc
commit
5603305e75
2 changed files with 48 additions and 7 deletions
|
@ -57,15 +57,32 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
|
|||
if !(delete_flag || squeeze_flag) && sets_len < 2 {
|
||||
return Err(UUsageError::new(
|
||||
1,
|
||||
format!("missing operand after {}", sets[0].quote()),
|
||||
format!(
|
||||
"missing operand after {}\nTwo strings must be given when translating.",
|
||||
sets[0].quote()
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
if delete_flag && !squeeze_flag && sets_len > 1 {
|
||||
return Err(UUsageError::new(
|
||||
1,
|
||||
format!("extra operand {}\nOnly one string may be given when deleting without squeezing repeats.", sets[1].quote()),
|
||||
));
|
||||
if sets_len > 1 {
|
||||
let start = "extra operand";
|
||||
if delete_flag && !squeeze_flag {
|
||||
let op = sets[1].quote();
|
||||
let msg = if sets_len == 2 {
|
||||
format!(
|
||||
"{} {}\nOnly one string may be given when deleting without squeezing repeats.",
|
||||
start, op,
|
||||
)
|
||||
} else {
|
||||
format!("{} {}", start, op,)
|
||||
};
|
||||
return Err(UUsageError::new(1, msg));
|
||||
}
|
||||
if sets_len > 2 {
|
||||
let op = sets[2].quote();
|
||||
let msg = format!("{} {}", start, op);
|
||||
return Err(UUsageError::new(1, msg));
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(first) = sets.first() {
|
||||
|
@ -170,5 +187,5 @@ pub fn uu_app() -> Command {
|
|||
.help("first truncate SET1 to length of SET2")
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(Arg::new(options::SETS).num_args(1..=2))
|
||||
.arg(Arg::new(options::SETS).num_args(1..))
|
||||
}
|
||||
|
|
|
@ -1155,3 +1155,27 @@ fn test_delete_flag_takes_only_one_operand() {
|
|||
"extra operand 'p'\nOnly one string may be given when deleting without squeezing repeats.",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_truncate_flag_fails_with_more_than_two_operand() {
|
||||
new_ucmd!()
|
||||
.args(&["-t", "a", "b", "c"])
|
||||
.fails()
|
||||
.stderr_contains("extra operand 'c'");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_squeeze_flag_fails_with_more_than_two_operand() {
|
||||
new_ucmd!()
|
||||
.args(&["-s", "a", "b", "c"])
|
||||
.fails()
|
||||
.stderr_contains("extra operand 'c'");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_complement_flag_fails_with_more_than_two_operand() {
|
||||
new_ucmd!()
|
||||
.args(&["-c", "a", "b", "c"])
|
||||
.fails()
|
||||
.stderr_contains("extra operand 'c'");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue