From 56f4e809fd7043b1451defee203cbee776c085d5 Mon Sep 17 00:00:00 2001 From: Hanif Bin Ariffin Date: Thu, 29 Jul 2021 21:36:13 +0800 Subject: [PATCH 1/2] Silently accepts ---presume-input-tty For whatever reason, the following is equivalent, cargo run -- rm --presume-input-tty cargo run -- rm ---presume-input-tty cargo run -- rm -----presume-input-tty cargo run -- rm ---------presume-input-tty Signed-off-by: Hanif Bin Ariffin --- src/uu/rm/src/rm.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/uu/rm/src/rm.rs b/src/uu/rm/src/rm.rs index 259d1ab39..1fdc59371 100644 --- a/src/uu/rm/src/rm.rs +++ b/src/uu/rm/src/rm.rs @@ -49,6 +49,7 @@ static OPT_PROMPT_MORE: &str = "prompt-more"; static OPT_RECURSIVE: &str = "recursive"; static OPT_RECURSIVE_R: &str = "recursive_R"; static OPT_VERBOSE: &str = "verbose"; +static PRESUME_INPUT_TTY: &str = "presume-input-tty"; static ARG_FILES: &str = "files"; @@ -206,6 +207,17 @@ pub fn uu_app() -> App<'static, 'static> { .long(OPT_VERBOSE) .help("explain what is being done") ) + // From the GNU source code: + // This is solely for testing. + // Do not document. + // It is relatively difficult to ensure that there is a tty on stdin. + // Since rm acts differently depending on that, without this option, + // it'd be harder to test the parts of rm that depend on that setting. + .arg( + Arg::with_name(PRESUME_INPUT_TTY) + .long(PRESUME_INPUT_TTY) + .hidden(true) + ) .arg( Arg::with_name(ARG_FILES) .multiple(true) From 7baa05b2db54f96a5b168a55e2283ebe9f5790b1 Mon Sep 17 00:00:00 2001 From: Hanif Bin Ariffin Date: Thu, 4 Nov 2021 17:04:26 +0800 Subject: [PATCH 2/2] Add tests for silently accepting presume-input-tty Signed-off-by: Hanif Bin Ariffin --- tests/by-util/test_rm.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/by-util/test_rm.rs b/tests/by-util/test_rm.rs index 092a5f00d..740c30bdd 100644 --- a/tests/by-util/test_rm.rs +++ b/tests/by-util/test_rm.rs @@ -314,3 +314,39 @@ fn test_rm_verbose_slash() { assert!(!at.dir_exists(dir)); assert!(!at.file_exists(file_a)); } + +#[test] +fn test_rm_silently_accepts_presume_input_tty1() { + let (at, mut ucmd) = at_and_ucmd!(); + let file_1 = "test_rm_silently_accepts_presume_input_tty1"; + + at.touch(file_1); + + ucmd.arg("--presume-input-tty").arg(file_1).succeeds(); + + assert!(!at.file_exists(file_1)); +} + +#[test] +fn test_rm_silently_accepts_presume_input_tty2() { + let (at, mut ucmd) = at_and_ucmd!(); + let file_2 = "test_rm_silently_accepts_presume_input_tty2"; + + at.touch(file_2); + + ucmd.arg("---presume-input-tty").arg(file_2).succeeds(); + + assert!(!at.file_exists(file_2)); +} + +#[test] +fn test_rm_silently_accepts_presume_input_tty3() { + let (at, mut ucmd) = at_and_ucmd!(); + let file_3 = "test_rm_silently_accepts_presume_input_tty3"; + + at.touch(file_3); + + ucmd.arg("----presume-input-tty").arg(file_3).succeeds(); + + assert!(!at.file_exists(file_3)); +}