diff --git a/src/uu/kill/src/kill.rs b/src/uu/kill/src/kill.rs index abb55f84526..5e2ca2a151e 100644 --- a/src/uu/kill/src/kill.rs +++ b/src/uu/kill/src/kill.rs @@ -71,7 +71,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { table(); Ok(()) } - Mode::List => list(pids_or_signals.first()), + Mode::List => { + list(&pids_or_signals); + Ok(()) + } } } @@ -164,12 +167,14 @@ fn print_signals() { } } -fn list(arg: Option<&String>) -> UResult<()> { - match arg { - Some(x) => print_signal(x), - None => { - print_signals(); - Ok(()) +fn list(signals: &Vec) { + if signals.is_empty() { + print_signals(); + } else { + for signal in signals { + if let Err(e) = print_signal(signal) { + uucore::show!(e) + } } } } diff --git a/tests/by-util/test_kill.rs b/tests/by-util/test_kill.rs index a9094ecf6a7..54e2ea2cf6e 100644 --- a/tests/by-util/test_kill.rs +++ b/tests/by-util/test_kill.rs @@ -92,6 +92,38 @@ fn test_kill_list_one_signal_from_name() { .stdout_matches(&Regex::new("\\b9\\b").unwrap()); } +#[test] +fn test_kill_list_all_vertically() { + // Check for a few signals. Do not try to be comprehensive. + let command = new_ucmd!().arg("-l").succeeds(); + let signals = command.stdout_str().split('\n').collect::>(); + assert!(signals.contains(&"KILL")); + assert!(signals.contains(&"TERM")); + assert!(signals.contains(&"HUP")); +} + +#[test] +fn test_kill_list_two_signal_from_name() { + new_ucmd!() + .arg("-l") + .arg("INT") + .arg("KILL") + .succeeds() + .stdout_matches(&Regex::new("\\d\n\\d").unwrap()); +} + +#[test] +fn test_kill_list_three_signal_first_unknown() { + new_ucmd!() + .arg("-l") + .arg("IAMNOTASIGNAL") // spell-checker:disable-line + .arg("INT") + .arg("KILL") + .fails() + .stderr_contains("unknown signal") + .stdout_matches(&Regex::new("\\d\n\\d").unwrap()); +} + #[test] fn test_kill_set_bad_signal_name() { // spell-checker:disable-line