1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

Merge pull request #4269 from rivy/fix.usage-error

Fix usage error production and testing (multiple uutils)
This commit is contained in:
Sylvestre Ledru 2023-01-15 14:34:18 +01:00 committed by GitHub
commit 98f02f78d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 52 additions and 66 deletions

View file

@ -415,8 +415,9 @@ impl std::fmt::Display for ParseError {
// Additional message about 'dd --help' is displayed only in this situation.
write!(
f,
"invalid input flag: {}\nTry 'dd --help' for more information.",
arg
"invalid input flag: {}\nTry '{} --help' for more information.",
arg,
uucore::execution_phrase()
)
}
Self::ConvFlagNoMatch(arg) => {

View file

@ -71,8 +71,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
let files = matches.get_many::<OsString>(ARG_FILES).ok_or_else(|| {
USimpleError::new(
1,
r##"missing file operand
Try 'touch --help' for more information."##,
format!(
"missing file operand\nTry '{} --help' for more information.",
uucore::execution_phrase()
),
)
})?;
let (mut atime, mut mtime) =

View file

@ -1303,12 +1303,12 @@ fn test_invalid_flag_arg_gnu_compatibility() {
new_ucmd!()
.args(&[format!("{}=", command)])
.fails()
.stderr_is("dd: invalid input flag: \nTry 'dd --help' for more information.");
.usage_error("invalid input flag: ");
new_ucmd!()
.args(&[format!("{}=29d", command)])
.fails()
.stderr_is("dd: invalid input flag: 29d\nTry 'dd --help' for more information.");
.usage_error("invalid input flag: 29d");
}
}

View file

@ -1257,16 +1257,14 @@ fn test_install_missing_arguments() {
.ucmd()
.fails()
.code_is(1)
.stderr_contains("install: missing file operand")
.stderr_contains("install --help' for more information.");
.usage_error("missing file operand");
scene
.ucmd()
.arg("-D")
.arg(format!("-t {}", no_target_dir))
.fails()
.stderr_contains("install: missing file operand")
.stderr_contains("install --help' for more information.");
.usage_error("missing file operand");
assert!(!at.dir_exists(no_target_dir));
}
@ -1282,27 +1280,17 @@ fn test_install_missing_destination() {
at.mkdir(dir_1);
// will fail and also print some info on correct usage
scene
.ucmd()
.arg(file_1)
.fails()
.stderr_contains(format!(
"install: missing destination file operand after '{}'",
scene.ucmd().arg(file_1).fails().usage_error(format!(
"missing destination file operand after '{}'",
file_1
))
.stderr_contains("install --help' for more information.");
));
// GNU's install will check for correct num of arguments and then fail
// and it does not recognize, that the source is not a file but a directory.
scene
.ucmd()
.arg(dir_1)
.fails()
.stderr_contains(format!(
"install: missing destination file operand after '{}'",
scene.ucmd().arg(dir_1).fails().usage_error(format!(
"missing destination file operand after '{}'",
dir_1
))
.stderr_contains("install --help' for more information.");
));
}
#[test]

View file

@ -673,11 +673,7 @@ fn test_mktemp_with_posixly_correct() {
.env("POSIXLY_CORRECT", "1")
.args(&["aXXXX", "--suffix=b"])
.fails()
.stderr_is(&format!(
"mktemp: too many templates\nTry '{} {} --help' for more information.\n",
scene.bin_path.to_string_lossy(),
scene.util_name
));
.usage_error("too many templates");
scene
.ucmd()

View file

@ -286,11 +286,7 @@ fn test_rm_force_no_operand() {
#[test]
fn test_rm_no_operand() {
let ts = TestScenario::new(util_name!());
ts.ucmd().fails().stderr_is(&format!(
"{0}: missing operand\nTry '{1} {0} --help' for more information.\n",
ts.util_name,
ts.bin_path.to_string_lossy()
));
ts.ucmd().fails().usage_error("missing operand");
}
#[test]

View file

@ -13,25 +13,40 @@ fn test_hex_rejects_sign_after_identifier() {
.args(&["0x-123ABC"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '0x-123ABC'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '0x-123ABC'");
new_ucmd!()
.args(&["0x+123ABC"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '0x+123ABC'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '0x+123ABC'");
new_ucmd!()
.args(&["--", "-0x-123ABC"])
.fails()
.no_stdout()
.usage_error("invalid floating point argument: '-0x-123ABC'");
new_ucmd!()
.args(&["--", "-0x+123ABC"])
.fails()
.no_stdout()
.usage_error("invalid floating point argument: '-0x+123ABC'");
// test without "--" => argument parsed as (invalid) flag
new_ucmd!()
.args(&["-0x-123ABC"])
.fails()
.no_stdout()
.stderr_contains("which wasn't expected, or isn't valid in this context")
.stderr_contains(
"Found argument '-0' which wasn't expected, or isn't valid in this context",
)
.stderr_contains("For more information try '--help'");
new_ucmd!()
.args(&["-0x+123ABC"])
.fails()
.no_stdout()
.stderr_contains("which wasn't expected, or isn't valid in this context")
.stderr_contains(
"Found argument '-0' which wasn't expected, or isn't valid in this context",
)
.stderr_contains("For more information try '--help'");
}
@ -66,8 +81,7 @@ fn test_hex_identifier_in_wrong_place() {
.args(&["1234ABCD0x"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1234ABCD0x'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1234ABCD0x'");
}
#[test]
@ -119,38 +133,32 @@ fn test_invalid_float() {
.args(&["1e2.3"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1e2.3'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1e2.3'");
new_ucmd!()
.args(&["1e2.3", "2"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1e2.3'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1e2.3'");
new_ucmd!()
.args(&["1", "1e2.3"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1e2.3'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1e2.3'");
new_ucmd!()
.args(&["1e2.3", "2", "3"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1e2.3'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1e2.3'");
new_ucmd!()
.args(&["1", "1e2.3", "3"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1e2.3'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1e2.3'");
new_ucmd!()
.args(&["1", "2", "1e2.3"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1e2.3'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1e2.3'");
}
#[test]
@ -159,8 +167,7 @@ fn test_width_invalid_float() {
.args(&["-w", "1e2.3"])
.fails()
.no_stdout()
.stderr_contains("invalid floating point argument: '1e2.3'")
.stderr_contains("for more information.");
.usage_error("invalid floating point argument: '1e2.3'");
}
// ---- Tests for the big integer based path ----
@ -738,6 +745,5 @@ fn test_invalid_zero_increment_value() {
.args(&["0", "0", "1"])
.fails()
.no_stdout()
.stderr_contains("invalid Zero increment value: '0'")
.stderr_contains("for more information.");
.usage_error("invalid Zero increment value: '0'");
}

View file

@ -763,10 +763,7 @@ fn test_touch_permission_denied_error_msg() {
#[test]
fn test_touch_no_args() {
let mut ucmd = new_ucmd!();
ucmd.fails().stderr_only(
r##"touch: missing file operand
Try 'touch --help' for more information."##,
);
ucmd.fails().no_stdout().usage_error("missing file operand");
}
#[test]