From 2b5391e6ebeabed63e74d6d2b30c6d5f3eb918d6 Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Thu, 24 Apr 2025 14:52:34 +0200 Subject: [PATCH] id: fix error message & simplify tests --- src/uu/id/src/id.rs | 2 +- tests/by-util/test_id.rs | 49 ++++++++++++++++++++++++++-------------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/uu/id/src/id.rs b/src/uu/id/src/id.rs index 47e6af1ad..4a91c8483 100644 --- a/src/uu/id/src/id.rs +++ b/src/uu/id/src/id.rs @@ -157,7 +157,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { if (state.nflag || state.rflag) && default_format && !state.cflag { return Err(USimpleError::new( 1, - "cannot print only names or real IDs in default format", + "printing only names or real IDs requires -u, -g, or -G", )); } if state.zflag && default_format && !state.cflag { diff --git a/tests/by-util/test_id.rs b/tests/by-util/test_id.rs index 3418739d1..6719d9f8a 100644 --- a/tests/by-util/test_id.rs +++ b/tests/by-util/test_id.rs @@ -291,17 +291,21 @@ fn test_id_multiple_users_non_existing() { } } +#[test] +fn test_id_name_or_real_with_default_format() { + for flag in ["-n", "--name", "-r", "--real"] { + new_ucmd!() + .arg(flag) + .fails() + .stderr_only("id: printing only names or real IDs requires -u, -g, or -G\n"); + } +} + #[test] #[cfg(unix)] fn test_id_default_format() { let ts = TestScenario::new(util_name!()); for opt1 in ["--name", "--real"] { - // id: cannot print only names or real IDs in default format - let args = [opt1]; - ts.ucmd() - .args(&args) - .fails() - .stderr_only(unwrap_or_return!(expected_result(&ts, &args)).stderr_str()); for opt2 in ["--user", "--group", "--groups"] { // u/g/G n/r let args = [opt2, opt1]; @@ -328,23 +332,34 @@ fn test_id_default_format() { } } +#[test] +fn test_id_zero_with_default_format() { + for z_flag in ["-z", "--zero"] { + new_ucmd!() + .arg(z_flag) + .fails() + .stderr_only("id: option --zero not permitted in default format\n"); + } +} + +#[test] +fn test_id_zero_with_name_or_real() { + for z_flag in ["-z", "--zero"] { + for flag in ["-n", "--name", "-r", "--real"] { + new_ucmd!() + .args(&[z_flag, flag]) + .fails() + .stderr_only("id: printing only names or real IDs requires -u, -g, or -G\n"); + } + } +} + #[test] #[cfg(unix)] fn test_id_zero() { let ts = TestScenario::new(util_name!()); for z_flag in ["-z", "--zero"] { - // id: option --zero not permitted in default format - ts.ucmd() - .args(&[z_flag]) - .fails() - .stderr_only(unwrap_or_return!(expected_result(&ts, &[z_flag])).stderr_str()); for opt1 in ["--name", "--real"] { - // id: cannot print only names or real IDs in default format - let args = [opt1, z_flag]; - ts.ucmd() - .args(&args) - .fails() - .stderr_only(unwrap_or_return!(expected_result(&ts, &args)).stderr_str()); for opt2 in ["--user", "--group", "--groups"] { // u/g/G n/r z let args = [opt2, z_flag, opt1];