From 445905a045ec0094f38895338f72cf625a6894fc Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Sat, 24 Feb 2024 20:42:51 +0100 Subject: [PATCH] base32/base64/basenc: permit repeating -d/-i/-w flags --- src/uu/base32/src/base_common.rs | 11 ++++++----- tests/by-util/test_base32.rs | 30 ++++++++++++++++++++++++++++++ tests/by-util/test_base64.rs | 30 ++++++++++++++++++++++++++++++ tests/by-util/test_basenc.rs | 21 +++++++++++++++++++++ 4 files changed, 87 insertions(+), 5 deletions(-) diff --git a/src/uu/base32/src/base_common.rs b/src/uu/base32/src/base_common.rs index 68c40287d..897722dd3 100644 --- a/src/uu/base32/src/base_common.rs +++ b/src/uu/base32/src/base_common.rs @@ -102,23 +102,24 @@ pub fn base_app(about: &'static str, usage: &str) -> Command { .short('d') .long(options::DECODE) .help("decode data") - .action(ArgAction::SetTrue), + .action(ArgAction::SetTrue) + .overrides_with(options::DECODE), ) .arg( Arg::new(options::IGNORE_GARBAGE) .short('i') .long(options::IGNORE_GARBAGE) .help("when decoding, ignore non-alphabetic characters") - .action(ArgAction::SetTrue), + .action(ArgAction::SetTrue) + .overrides_with(options::IGNORE_GARBAGE), ) .arg( Arg::new(options::WRAP) .short('w') .long(options::WRAP) .value_name("COLS") - .help( - "wrap encoded lines after COLS character (default 76, 0 to disable wrapping)", - ), + .help("wrap encoded lines after COLS character (default 76, 0 to disable wrapping)") + .overrides_with(options::WRAP), ) // "multiple" arguments are used to check whether there is more than one // file passed in. diff --git a/tests/by-util/test_base32.rs b/tests/by-util/test_base32.rs index 8bb5bda54..785db388b 100644 --- a/tests/by-util/test_base32.rs +++ b/tests/by-util/test_base32.rs @@ -22,6 +22,26 @@ fn test_encode() { .stdout_only("JBSWY3DPFQQFO33SNRSCC===\n"); // spell-checker:disable-line } +#[test] +fn test_encode_repeat_flags_later_wrap_10() { + let input = "Hello, World!\n"; + new_ucmd!() + .args(&["-ii", "-w17", "-w10"]) + .pipe_in(input) + .succeeds() + .stdout_only("JBSWY3DPFQ\nQFO33SNRSC\nCCQ=\n"); // spell-checker:disable-line +} + +#[test] +fn test_encode_repeat_flags_later_wrap_17() { + let input = "Hello, World!\n"; + new_ucmd!() + .args(&["-ii", "-w10", "-w17"]) + .pipe_in(input) + .succeeds() + .stdout_only("JBSWY3DPFQQFO33SN\nRSCCCQ=\n"); // spell-checker:disable-line +} + #[test] fn test_base32_encode_file() { new_ucmd!() @@ -42,6 +62,16 @@ fn test_decode() { } } +#[test] +fn test_decode_repeat_flags() { + let input = "JBSWY3DPFQQFO33SNRSCC===\n"; // spell-checker:disable-line + new_ucmd!() + .args(&["-didiw80", "--wrap=17", "--wrap", "8"]) // spell-checker:disable-line + .pipe_in(input) + .succeeds() + .stdout_only("Hello, World!"); +} + #[test] fn test_garbage() { let input = "aGVsbG8sIHdvcmxkIQ==\0"; // spell-checker:disable-line diff --git a/tests/by-util/test_base64.rs b/tests/by-util/test_base64.rs index b46507fae..403fd7db8 100644 --- a/tests/by-util/test_base64.rs +++ b/tests/by-util/test_base64.rs @@ -20,6 +20,26 @@ fn test_encode() { .stdout_only("aGVsbG8sIHdvcmxkIQ==\n"); // spell-checker:disable-line } +#[test] +fn test_encode_repeat_flags_later_wrap_10() { + let input = "hello, world!"; + new_ucmd!() + .args(&["-ii", "-w15", "-w10"]) + .pipe_in(input) + .succeeds() + .stdout_only("aGVsbG8sIH\ndvcmxkIQ==\n"); // spell-checker:disable-line +} + +#[test] +fn test_encode_repeat_flags_later_wrap_15() { + let input = "hello, world!"; + new_ucmd!() + .args(&["-ii", "-w10", "-w15"]) + .pipe_in(input) + .succeeds() + .stdout_only("aGVsbG8sIHdvcmx\nkIQ==\n"); // spell-checker:disable-line +} + #[test] fn test_base64_encode_file() { new_ucmd!() @@ -40,6 +60,16 @@ fn test_decode() { } } +#[test] +fn test_decode_repeat_flags() { + let input = "aGVsbG8sIHdvcmxkIQ==\n"; // spell-checker:disable-line + new_ucmd!() + .args(&["-didiw80", "--wrap=17", "--wrap", "8"]) // spell-checker:disable-line + .pipe_in(input) + .succeeds() + .stdout_only("hello, world!"); +} + #[test] fn test_garbage() { let input = "aGVsbG8sIHdvcmxkIQ==\0"; // spell-checker:disable-line diff --git a/tests/by-util/test_basenc.rs b/tests/by-util/test_basenc.rs index 2ed915cb5..2976d6099 100644 --- a/tests/by-util/test_basenc.rs +++ b/tests/by-util/test_basenc.rs @@ -230,3 +230,24 @@ fn test_choose_last_encoding_base2lsbf() { .no_stderr() .stdout_only("00110110110011100100011001100110\n"); } + +#[test] +fn test_base32_decode_repeated() { + new_ucmd!() + .args(&[ + "--ignore", + "--wrap=80", + "--base32hex", + "--z85", + "--ignore", + "--decode", + "--z85", + "--base32", + "-w", + "10", + ]) + .pipe_in("NZUWGZJ6MJQXGZJ7") // spell-checker:disable-line + .succeeds() + .no_stderr() + .stdout_only("nice>base?"); +}