mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-30 12:37:49 +00:00
Merge pull request #6007 from BenWiederhake/dev-basexx-multi-arg
base32/base64/basenc: implement and test proper flag parsing
This commit is contained in:
commit
ae7d03cb15
5 changed files with 294 additions and 11 deletions
|
@ -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.
|
||||
|
|
|
@ -53,12 +53,14 @@ const ENCODINGS: &[(&str, Format, &str)] = &[
|
|||
pub fn uu_app() -> Command {
|
||||
let mut command = base_common::base_app(ABOUT, USAGE);
|
||||
for encoding in ENCODINGS {
|
||||
command = command.arg(
|
||||
Arg::new(encoding.0)
|
||||
.long(encoding.0)
|
||||
.help(encoding.2)
|
||||
.action(ArgAction::SetTrue),
|
||||
);
|
||||
let raw_arg = Arg::new(encoding.0)
|
||||
.long(encoding.0)
|
||||
.help(encoding.2)
|
||||
.action(ArgAction::SetTrue);
|
||||
let overriding_arg = ENCODINGS
|
||||
.iter()
|
||||
.fold(raw_arg, |arg, enc| arg.overrides_with(enc.0));
|
||||
command = command.arg(overriding_arg);
|
||||
}
|
||||
command
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
//
|
||||
// For the full copyright and license information, please view the LICENSE
|
||||
// file that was distributed with this source code.
|
||||
|
||||
//spell-checker: ignore (encodings) lsbf msbf
|
||||
use crate::common::util::TestScenario;
|
||||
|
||||
#[test]
|
||||
|
@ -31,3 +33,221 @@ fn test_invalid_input() {
|
|||
.fails()
|
||||
.stderr_only(error_message);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base64() {
|
||||
new_ucmd!()
|
||||
.arg("--base64")
|
||||
.pipe_in("to>be?")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("dG8+YmU/\n"); // spell-checker:disable-line
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base64_decode() {
|
||||
new_ucmd!()
|
||||
.args(&["--base64", "-d"])
|
||||
.pipe_in("dG8+YmU/") // spell-checker:disable-line
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("to>be?");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base64url() {
|
||||
new_ucmd!()
|
||||
.arg("--base64url")
|
||||
.pipe_in("to>be?")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("dG8-YmU_\n"); // spell-checker:disable-line
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base64url_decode() {
|
||||
new_ucmd!()
|
||||
.args(&["--base64url", "-d"])
|
||||
.pipe_in("dG8-YmU_") // spell-checker:disable-line
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("to>be?");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base32() {
|
||||
new_ucmd!()
|
||||
.arg("--base32")
|
||||
.pipe_in("nice>base?")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("NZUWGZJ6MJQXGZJ7\n"); // spell-checker:disable-line
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base32_decode() {
|
||||
new_ucmd!()
|
||||
.args(&["--base32", "-d"])
|
||||
.pipe_in("NZUWGZJ6MJQXGZJ7") // spell-checker:disable-line
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("nice>base?");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base32hex() {
|
||||
new_ucmd!()
|
||||
.arg("--base32hex")
|
||||
.pipe_in("nice>base?")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("DPKM6P9UC9GN6P9V\n"); // spell-checker:disable-line
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base32hex_decode() {
|
||||
new_ucmd!()
|
||||
.args(&["--base32hex", "-d"])
|
||||
.pipe_in("DPKM6P9UC9GN6P9V") // spell-checker:disable-line
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("nice>base?");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base16() {
|
||||
new_ucmd!()
|
||||
.arg("--base16")
|
||||
.pipe_in("Hello, World!")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("48656C6C6F2C20576F726C6421\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base16_decode() {
|
||||
new_ucmd!()
|
||||
.args(&["--base16", "-d"])
|
||||
.pipe_in("48656C6C6F2C20576F726C6421")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("Hello, World!");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base2msbf() {
|
||||
new_ucmd!()
|
||||
.arg("--base2msbf")
|
||||
.pipe_in("msbf")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("01101101011100110110001001100110\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base2msbf_decode() {
|
||||
new_ucmd!()
|
||||
.args(&["--base2msbf", "-d"])
|
||||
.pipe_in("01101101011100110110001001100110")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("msbf");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base2lsbf() {
|
||||
new_ucmd!()
|
||||
.arg("--base2lsbf")
|
||||
.pipe_in("lsbf")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("00110110110011100100011001100110\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_base2lsbf_decode() {
|
||||
new_ucmd!()
|
||||
.args(&["--base2lsbf", "-d"])
|
||||
.pipe_in("00110110110011100100011001100110")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("lsbf");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_choose_last_encoding_z85() {
|
||||
new_ucmd!()
|
||||
.args(&[
|
||||
"--base2lsbf",
|
||||
"--base2msbf",
|
||||
"--base16",
|
||||
"--base32hex",
|
||||
"--base64url",
|
||||
"--base32",
|
||||
"--base64",
|
||||
"--z85",
|
||||
])
|
||||
.pipe_in("Hello, World")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("nm=QNz.92jz/PV8\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_choose_last_encoding_base64() {
|
||||
new_ucmd!()
|
||||
.args(&[
|
||||
"--base2msbf",
|
||||
"--base2lsbf",
|
||||
"--base64url",
|
||||
"--base32hex",
|
||||
"--base32",
|
||||
"--base16",
|
||||
"--z85",
|
||||
"--base64",
|
||||
])
|
||||
.pipe_in("Hello, World!")
|
||||
.succeeds()
|
||||
.no_stderr()
|
||||
.stdout_only("SGVsbG8sIFdvcmxkIQ==\n"); // spell-checker:disable-line
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_choose_last_encoding_base2lsbf() {
|
||||
new_ucmd!()
|
||||
.args(&[
|
||||
"--base64url",
|
||||
"--base16",
|
||||
"--base2msbf",
|
||||
"--base32",
|
||||
"--base64",
|
||||
"--z85",
|
||||
"--base32hex",
|
||||
"--base2lsbf",
|
||||
])
|
||||
.pipe_in("lsbf")
|
||||
.succeeds()
|
||||
.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?");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue