mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-09-15 11:36:16 +00:00
Merge branch 'uutils:main' into more_implement_print_over_and_clean_print
This commit is contained in:
commit
1ce52903b0
92 changed files with 1026 additions and 274 deletions
|
@ -1,7 +1,11 @@
|
|||
// spell-checker:ignore (words) asdf
|
||||
// spell-checker:ignore (words) asdf algo algos
|
||||
|
||||
use crate::common::util::TestScenario;
|
||||
|
||||
const ALGOS: [&str; 11] = [
|
||||
"sysv", "bsd", "crc", "md5", "sha1", "sha224", "sha256", "sha384", "sha512", "blake2b", "sm3",
|
||||
];
|
||||
|
||||
#[test]
|
||||
fn test_invalid_arg() {
|
||||
new_ucmd!().arg("--definitely-invalid").fails().code_is(1);
|
||||
|
@ -12,7 +16,7 @@ fn test_single_file() {
|
|||
new_ucmd!()
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture("single_file.expected");
|
||||
.stdout_is_fixture("crc_single_file.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -21,7 +25,7 @@ fn test_multiple_files() {
|
|||
.arg("lorem_ipsum.txt")
|
||||
.arg("alice_in_wonderland.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture("multiple_files.expected");
|
||||
.stdout_is_fixture("crc_multiple_files.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -29,11 +33,11 @@ fn test_stdin() {
|
|||
new_ucmd!()
|
||||
.pipe_in_fixture("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture("stdin.expected");
|
||||
.stdout_is_fixture("crc_stdin.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_empty() {
|
||||
fn test_empty_file() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
at.touch("a");
|
||||
|
@ -62,25 +66,26 @@ fn test_arg_overrides_stdin() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn test_invalid_file() {
|
||||
let ts = TestScenario::new(util_name!());
|
||||
let at = ts.fixtures.clone();
|
||||
fn test_nonexisting_file() {
|
||||
let file_name = "asdf";
|
||||
|
||||
let folder_name = "asdf";
|
||||
|
||||
// First check when file doesn't exist
|
||||
ts.ucmd()
|
||||
.arg(folder_name)
|
||||
new_ucmd!()
|
||||
.arg(file_name)
|
||||
.fails()
|
||||
.no_stdout()
|
||||
.stderr_contains("cksum: asdf: No such file or directory");
|
||||
.stderr_contains(format!("cksum: {file_name}: No such file or directory"));
|
||||
}
|
||||
|
||||
// Then check when the file is of an invalid type
|
||||
#[test]
|
||||
fn test_folder() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
let folder_name = "a_folder";
|
||||
at.mkdir(folder_name);
|
||||
ts.ucmd()
|
||||
.arg(folder_name)
|
||||
|
||||
ucmd.arg(folder_name)
|
||||
.succeeds()
|
||||
.stdout_only("4294967295 0 asdf\n");
|
||||
.stdout_only(format!("4294967295 0 {folder_name}\n"));
|
||||
}
|
||||
|
||||
// Make sure crc is correct for files larger than 32 bytes
|
||||
|
@ -116,77 +121,106 @@ fn test_stdin_larger_than_128_bytes() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn test_sha1_single_file() {
|
||||
new_ucmd!()
|
||||
.arg("-a=sha1")
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is("ab1dd0bae1d8883a3d18a66de6afbd28252cfbef 772 lorem_ipsum.txt\n");
|
||||
fn test_algorithm_single_file() {
|
||||
for algo in ALGOS {
|
||||
for option in ["-a", "--algorithm"] {
|
||||
new_ucmd!()
|
||||
.arg(format!("{option}={algo}"))
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture(format!("{algo}_single_file.expected"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_sm3_single_file() {
|
||||
new_ucmd!()
|
||||
.arg("-a=sm3")
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is(
|
||||
"6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 772 lorem_ipsum.txt\n",
|
||||
);
|
||||
fn test_algorithm_multiple_files() {
|
||||
for algo in ALGOS {
|
||||
for option in ["-a", "--algorithm"] {
|
||||
new_ucmd!()
|
||||
.arg(format!("{option}={algo}"))
|
||||
.arg("lorem_ipsum.txt")
|
||||
.arg("alice_in_wonderland.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture(format!("{algo}_multiple_files.expected"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bsd_single_file() {
|
||||
new_ucmd!()
|
||||
.arg("-a=bsd")
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_only_fixture("bsd_single_file.expected");
|
||||
fn test_algorithm_stdin() {
|
||||
for algo in ALGOS {
|
||||
for option in ["-a", "--algorithm"] {
|
||||
new_ucmd!()
|
||||
.arg(format!("{option}={algo}"))
|
||||
.pipe_in_fixture("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture(format!("{algo}_stdin.expected"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bsd_multiple_files() {
|
||||
fn test_untagged_single_file() {
|
||||
new_ucmd!()
|
||||
.arg("-a=bsd")
|
||||
.arg("--untagged")
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture("untagged/crc_single_file.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_untagged_multiple_files() {
|
||||
new_ucmd!()
|
||||
.arg("--untagged")
|
||||
.arg("lorem_ipsum.txt")
|
||||
.arg("alice_in_wonderland.txt")
|
||||
.succeeds()
|
||||
.stdout_only_fixture("bsd_multiple_files.expected");
|
||||
.stdout_is_fixture("untagged/crc_multiple_files.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bsd_stdin() {
|
||||
fn test_untagged_stdin() {
|
||||
new_ucmd!()
|
||||
.arg("-a=bsd")
|
||||
.arg("--untagged")
|
||||
.pipe_in_fixture("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_only_fixture("bsd_stdin.expected");
|
||||
.stdout_is_fixture("untagged/crc_stdin.expected");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_sysv_single_file() {
|
||||
new_ucmd!()
|
||||
.arg("-a=sysv")
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_only_fixture("sysv_single_file.expected");
|
||||
fn test_untagged_algorithm_single_file() {
|
||||
for algo in ALGOS {
|
||||
new_ucmd!()
|
||||
.arg("--untagged")
|
||||
.arg(format!("--algorithm={algo}"))
|
||||
.arg("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture(format!("untagged/{algo}_single_file.expected"));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_sysv_multiple_files() {
|
||||
new_ucmd!()
|
||||
.arg("-a=sysv")
|
||||
.arg("lorem_ipsum.txt")
|
||||
.arg("alice_in_wonderland.txt")
|
||||
.succeeds()
|
||||
.stdout_only_fixture("sysv_multiple_files.expected");
|
||||
fn test_untagged_algorithm_multiple_files() {
|
||||
for algo in ALGOS {
|
||||
new_ucmd!()
|
||||
.arg("--untagged")
|
||||
.arg(format!("--algorithm={algo}"))
|
||||
.arg("lorem_ipsum.txt")
|
||||
.arg("alice_in_wonderland.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture(format!("untagged/{algo}_multiple_files.expected"));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_sysv_stdin() {
|
||||
new_ucmd!()
|
||||
.arg("-a=sysv")
|
||||
.pipe_in_fixture("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_only_fixture("sysv_stdin.expected");
|
||||
fn test_untagged_algorithm_stdin() {
|
||||
for algo in ALGOS {
|
||||
new_ucmd!()
|
||||
.arg("--untagged")
|
||||
.arg(format!("--algorithm={algo}"))
|
||||
.pipe_in_fixture("lorem_ipsum.txt")
|
||||
.succeeds()
|
||||
.stdout_is_fixture(format!("untagged/{algo}_stdin.expected"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1075,6 +1075,88 @@ fn test_cp_parents_dest_not_directory() {
|
|||
.stderr_contains("with --parents, the destination must be a directory");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cp_parents_with_permissions_copy_file() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
let dir = "dir";
|
||||
let file = "p1/p2/file";
|
||||
|
||||
at.mkdir(dir);
|
||||
at.mkdir_all("p1/p2");
|
||||
at.touch(file);
|
||||
|
||||
let p1_mode = 0o0777;
|
||||
let p2_mode = 0o0711;
|
||||
let file_mode = 0o0702;
|
||||
|
||||
#[cfg(unix)]
|
||||
{
|
||||
at.set_mode("p1", p1_mode);
|
||||
at.set_mode("p1/p2", p2_mode);
|
||||
at.set_mode(file, file_mode);
|
||||
}
|
||||
|
||||
ucmd.arg("-p")
|
||||
.arg("--parents")
|
||||
.arg(file)
|
||||
.arg(dir)
|
||||
.succeeds();
|
||||
|
||||
#[cfg(all(unix, not(target_os = "freebsd")))]
|
||||
{
|
||||
let p1_metadata = at.metadata("p1");
|
||||
let p2_metadata = at.metadata("p1/p2");
|
||||
let file_metadata = at.metadata(file);
|
||||
|
||||
assert_metadata_eq!(p1_metadata, at.metadata("dir/p1"));
|
||||
assert_metadata_eq!(p2_metadata, at.metadata("dir/p1/p2"));
|
||||
assert_metadata_eq!(file_metadata, at.metadata("dir/p1/p2/file"));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cp_parents_with_permissions_copy_dir() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
let dir1 = "dir";
|
||||
let dir2 = "p1/p2";
|
||||
let file = "p1/p2/file";
|
||||
|
||||
at.mkdir(dir1);
|
||||
at.mkdir_all(dir2);
|
||||
at.touch(file);
|
||||
|
||||
let p1_mode = 0o0777;
|
||||
let p2_mode = 0o0711;
|
||||
let file_mode = 0o0702;
|
||||
|
||||
#[cfg(unix)]
|
||||
{
|
||||
at.set_mode("p1", p1_mode);
|
||||
at.set_mode("p1/p2", p2_mode);
|
||||
at.set_mode(file, file_mode);
|
||||
}
|
||||
|
||||
ucmd.arg("-p")
|
||||
.arg("--parents")
|
||||
.arg("-r")
|
||||
.arg(dir2)
|
||||
.arg(dir1)
|
||||
.succeeds();
|
||||
|
||||
#[cfg(all(unix, not(target_os = "freebsd")))]
|
||||
{
|
||||
let p1_metadata = at.metadata("p1");
|
||||
let p2_metadata = at.metadata("p1/p2");
|
||||
let file_metadata = at.metadata(file);
|
||||
|
||||
assert_metadata_eq!(p1_metadata, at.metadata("dir/p1"));
|
||||
assert_metadata_eq!(p2_metadata, at.metadata("dir/p1/p2"));
|
||||
assert_metadata_eq!(file_metadata, at.metadata("dir/p1/p2/file"));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(unix)]
|
||||
fn test_cp_writable_special_file_permissions() {
|
||||
|
@ -1581,13 +1663,13 @@ fn test_cp_one_file_system() {
|
|||
use walkdir::WalkDir;
|
||||
|
||||
let scene = TestScenario::new(util_name!());
|
||||
let at = &scene.fixtures;
|
||||
|
||||
// Test must be run as root (or with `sudo -E`)
|
||||
if scene.cmd("whoami").run().stdout_str() != "root\n" {
|
||||
return;
|
||||
}
|
||||
|
||||
let at = scene.fixtures.clone();
|
||||
let at_src = AtPath::new(&at.plus(TEST_MOUNT_COPY_FROM_FOLDER));
|
||||
let at_dst = AtPath::new(&at.plus(TEST_COPY_TO_FOLDER_NEW));
|
||||
|
||||
|
|
|
@ -282,6 +282,27 @@ fn test_date_for_invalid_file() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(unix)]
|
||||
fn test_date_for_no_permission_file() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
const FILE: &str = "file-no-perm-1";
|
||||
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
let file = std::fs::OpenOptions::new()
|
||||
.create(true)
|
||||
.write(true)
|
||||
.open(at.plus(FILE))
|
||||
.unwrap();
|
||||
file.set_permissions(std::fs::Permissions::from_mode(0o222))
|
||||
.unwrap();
|
||||
let result = ucmd.arg("--file").arg(FILE).fails();
|
||||
result.no_stdout();
|
||||
assert_eq!(
|
||||
result.stderr_str().trim(),
|
||||
format!("date: {FILE}: Permission denied")
|
||||
);
|
||||
}
|
||||
|
||||
fn test_date_for_dir_as_file() {
|
||||
let result = new_ucmd!().arg("--file").arg("/").fails();
|
||||
result.no_stdout();
|
||||
|
|
|
@ -1536,3 +1536,29 @@ fn test_multiple_processes_reading_stdin() {
|
|||
.succeeds()
|
||||
.stdout_only("def\n");
|
||||
}
|
||||
|
||||
/// Test that discarding system file cache fails for stdin.
|
||||
#[test]
|
||||
#[cfg(target_os = "linux")]
|
||||
fn test_nocache_stdin_error() {
|
||||
#[cfg(not(target_env = "musl"))]
|
||||
let detail = "Illegal seek";
|
||||
#[cfg(target_env = "musl")]
|
||||
let detail = "Invalid seek";
|
||||
new_ucmd!()
|
||||
.args(&["iflag=nocache", "count=0", "status=noxfer"])
|
||||
.fails()
|
||||
.code_is(1)
|
||||
.stderr_only(format!("dd: failed to discard cache for: 'standard input': {detail}\n0+0 records in\n0+0 records out\n"));
|
||||
}
|
||||
|
||||
/// Test for discarding system file cache.
|
||||
#[test]
|
||||
#[cfg(target_os = "linux")]
|
||||
fn test_nocache_file() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
at.write_bytes("f", b"a".repeat(1 << 20).as_slice());
|
||||
ucmd.args(&["if=f", "of=/dev/null", "iflag=nocache", "status=noxfer"])
|
||||
.succeeds()
|
||||
.stderr_only("2048+0 records in\n2048+0 records out\n");
|
||||
}
|
||||
|
|
|
@ -7,6 +7,10 @@ use crate::common::util::TestScenario;
|
|||
use nix::unistd::{close, dup};
|
||||
use regex::Regex;
|
||||
use std::collections::HashMap;
|
||||
#[cfg(target_os = "linux")]
|
||||
use std::ffi::OsStr;
|
||||
#[cfg(target_os = "linux")]
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
#[cfg(all(unix, feature = "chmod"))]
|
||||
use std::os::unix::io::IntoRawFd;
|
||||
use std::path::Path;
|
||||
|
@ -1239,7 +1243,7 @@ fn test_ls_long_total_size() {
|
|||
("long_si", "total 8.2k"),
|
||||
]
|
||||
.iter()
|
||||
.cloned()
|
||||
.copied()
|
||||
.collect()
|
||||
} else {
|
||||
[
|
||||
|
@ -1248,7 +1252,7 @@ fn test_ls_long_total_size() {
|
|||
("long_si", "total 2"),
|
||||
]
|
||||
.iter()
|
||||
.cloned()
|
||||
.copied()
|
||||
.collect()
|
||||
};
|
||||
|
||||
|
@ -3393,3 +3397,54 @@ fn test_tabsize_formatting() {
|
|||
.succeeds()
|
||||
.stdout_is("aaaaaaaa bbbb\ncccc dddddddd");
|
||||
}
|
||||
|
||||
#[cfg(any(
|
||||
target_os = "linux",
|
||||
target_os = "macos",
|
||||
target_os = "ios",
|
||||
target_os = "freebsd",
|
||||
target_os = "dragonfly",
|
||||
target_os = "netbsd",
|
||||
target_os = "openbsd",
|
||||
target_os = "illumos",
|
||||
target_os = "solaris"
|
||||
))]
|
||||
#[test]
|
||||
fn test_device_number() {
|
||||
use std::fs::{metadata, read_dir};
|
||||
use std::os::unix::fs::{FileTypeExt, MetadataExt};
|
||||
use uucore::libc::{dev_t, major, minor};
|
||||
|
||||
let dev_dir = read_dir("/dev").unwrap();
|
||||
// let's use the first device for test
|
||||
let blk_dev = dev_dir
|
||||
.map(|res_entry| res_entry.unwrap())
|
||||
.find(|entry| {
|
||||
entry.file_type().unwrap().is_block_device()
|
||||
|| entry.file_type().unwrap().is_char_device()
|
||||
})
|
||||
.expect("Expect a block/char device");
|
||||
let blk_dev_path = blk_dev.path();
|
||||
let blk_dev_meta = metadata(blk_dev_path.as_path()).unwrap();
|
||||
let blk_dev_number = blk_dev_meta.rdev() as dev_t;
|
||||
let (major, minor) = unsafe { (major(blk_dev_number), minor(blk_dev_number)) };
|
||||
let major_minor_str = format!("{}, {}", major, minor);
|
||||
|
||||
let scene = TestScenario::new(util_name!());
|
||||
scene
|
||||
.ucmd()
|
||||
.arg("-l")
|
||||
.arg(blk_dev_path.to_str().expect("should be UTF-8 encoded"))
|
||||
.succeeds()
|
||||
.stdout_contains(major_minor_str);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_os = "linux")]
|
||||
fn test_invalid_utf8() {
|
||||
let (at, mut ucmd) = at_and_ucmd!();
|
||||
|
||||
let filename = OsStr::from_bytes(b"-\xE0-foo");
|
||||
at.touch(filename);
|
||||
ucmd.succeeds();
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ fn test_deleted_dir() {
|
|||
use std::process::Command;
|
||||
|
||||
let ts = TestScenario::new(util_name!());
|
||||
let at = ts.fixtures.clone();
|
||||
let at = ts.fixtures;
|
||||
let output = Command::new("sh")
|
||||
.arg("-c")
|
||||
.arg(format!(
|
||||
|
|
|
@ -118,9 +118,10 @@ mod linux_only {
|
|||
use std::os::unix::io::FromRawFd;
|
||||
|
||||
let mut fds: [c_int; 2] = [0, 0];
|
||||
if unsafe { libc::pipe(&mut fds as *mut c_int) } != 0 {
|
||||
panic!("Failed to create pipe");
|
||||
}
|
||||
assert!(
|
||||
(unsafe { libc::pipe(&mut fds as *mut c_int) } == 0),
|
||||
"Failed to create pipe"
|
||||
);
|
||||
|
||||
// Drop the read end of the pipe
|
||||
let _ = unsafe { File::from_raw_fd(fds[0]) };
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use std::ffi::OsStr;
|
||||
use std::process::{ExitStatus, Stdio};
|
||||
|
||||
#[cfg(unix)]
|
||||
|
@ -6,24 +7,26 @@ use std::os::unix::process::ExitStatusExt;
|
|||
use crate::common::util::TestScenario;
|
||||
|
||||
#[cfg(unix)]
|
||||
fn check_termination(result: &ExitStatus) {
|
||||
fn check_termination(result: ExitStatus) {
|
||||
assert_eq!(result.signal(), Some(libc::SIGPIPE));
|
||||
}
|
||||
|
||||
#[cfg(not(unix))]
|
||||
fn check_termination(result: &ExitStatus) {
|
||||
fn check_termination(result: ExitStatus) {
|
||||
assert!(result.success(), "yes did not exit successfully");
|
||||
}
|
||||
|
||||
const NO_ARGS: &[&str] = &[];
|
||||
|
||||
/// Run `yes`, capture some of the output, close the pipe, and verify it.
|
||||
fn run(args: &[&str], expected: &[u8]) {
|
||||
fn run(args: &[impl AsRef<OsStr>], expected: &[u8]) {
|
||||
let mut cmd = new_ucmd!();
|
||||
let mut child = cmd.args(args).set_stdout(Stdio::piped()).run_no_wait();
|
||||
let buf = child.stdout_exact_bytes(expected.len());
|
||||
child.close_stdout();
|
||||
|
||||
#[allow(deprecated)]
|
||||
check_termination(&child.wait_with_output().unwrap().status);
|
||||
check_termination(child.wait_with_output().unwrap().status);
|
||||
assert_eq!(buf.as_slice(), expected);
|
||||
}
|
||||
|
||||
|
@ -34,7 +37,7 @@ fn test_invalid_arg() {
|
|||
|
||||
#[test]
|
||||
fn test_simple() {
|
||||
run(&[], b"y\ny\ny\ny\n");
|
||||
run(NO_ARGS, b"y\ny\ny\ny\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -44,7 +47,7 @@ fn test_args() {
|
|||
|
||||
#[test]
|
||||
fn test_long_output() {
|
||||
run(&[], "y\n".repeat(512 * 1024).as_bytes());
|
||||
run(NO_ARGS, "y\n".repeat(512 * 1024).as_bytes());
|
||||
}
|
||||
|
||||
/// Test with an output that seems likely to get mangled in case of incomplete writes.
|
||||
|
@ -88,3 +91,20 @@ fn test_piped_to_dev_full() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(unix, target_os = "wasi"))]
|
||||
fn test_non_utf8() {
|
||||
#[cfg(unix)]
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
#[cfg(target_os = "wasi")]
|
||||
use std::os::wasi::ffi::OsStrExt;
|
||||
|
||||
run(
|
||||
&[
|
||||
OsStr::from_bytes(b"\xbf\xff\xee"),
|
||||
OsStr::from_bytes(b"bar"),
|
||||
],
|
||||
&b"\xbf\xff\xee bar\n".repeat(5000),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -2016,7 +2016,7 @@ impl UChild {
|
|||
|
||||
/// Read, consume and return the output as [`String`] from [`Child`]'s stdout.
|
||||
///
|
||||
/// See also [`UChild::stdout_bytes] for side effects.
|
||||
/// See also [`UChild::stdout_bytes`] for side effects.
|
||||
pub fn stdout(&mut self) -> String {
|
||||
String::from_utf8(self.stdout_bytes()).unwrap()
|
||||
}
|
||||
|
|
2
tests/fixtures/cksum/blake2b_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/blake2b_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
BLAKE2b (lorem_ipsum.txt) = 0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3
|
||||
BLAKE2b (alice_in_wonderland.txt) = 91b8b0f0868e905ad18b8ac35e4a1dacd289857b19258ab5d1e071761af758b0134ec152d4f011fe1825ca889c80c2e072ca70eb50548c25fc49a98937515af4
|
1
tests/fixtures/cksum/blake2b_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/blake2b_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
BLAKE2b (lorem_ipsum.txt) = 0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3
|
1
tests/fixtures/cksum/blake2b_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/blake2b_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
BLAKE2b (-) = 0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3
|
2
tests/fixtures/cksum/md5_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/md5_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
MD5 (lorem_ipsum.txt) = cd724690f7dc61775dfac400a71f2caa
|
||||
MD5 (alice_in_wonderland.txt) = f6fa7033e16166a9589aa1c0388ffd58
|
1
tests/fixtures/cksum/md5_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/md5_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
MD5 (lorem_ipsum.txt) = cd724690f7dc61775dfac400a71f2caa
|
1
tests/fixtures/cksum/md5_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/md5_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
MD5 (-) = cd724690f7dc61775dfac400a71f2caa
|
2
tests/fixtures/cksum/sha1_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/sha1_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
SHA1 (lorem_ipsum.txt) = ab1dd0bae1d8883a3d18a66de6afbd28252cfbef
|
||||
SHA1 (alice_in_wonderland.txt) = 22b54b2520e8b4fa59eb10719028a4e587c12d1e
|
1
tests/fixtures/cksum/sha1_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/sha1_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA1 (lorem_ipsum.txt) = ab1dd0bae1d8883a3d18a66de6afbd28252cfbef
|
1
tests/fixtures/cksum/sha1_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/sha1_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA1 (-) = ab1dd0bae1d8883a3d18a66de6afbd28252cfbef
|
2
tests/fixtures/cksum/sha224_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/sha224_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
SHA224 (lorem_ipsum.txt) = 3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01
|
||||
SHA224 (alice_in_wonderland.txt) = 54c9c7d78458886418ce0845111fc49fe1c628ffd4bf3da14226ffd9
|
1
tests/fixtures/cksum/sha224_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/sha224_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA224 (lorem_ipsum.txt) = 3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01
|
1
tests/fixtures/cksum/sha224_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/sha224_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA224 (-) = 3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01
|
2
tests/fixtures/cksum/sha256_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/sha256_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
SHA256 (lorem_ipsum.txt) = f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02
|
||||
SHA256 (alice_in_wonderland.txt) = 14ab7e5a0aa3a670222744714bc96961d51012cb216225d965db71824a46e5fe
|
1
tests/fixtures/cksum/sha256_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/sha256_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA256 (lorem_ipsum.txt) = f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02
|
1
tests/fixtures/cksum/sha256_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/sha256_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA256 (-) = f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02
|
2
tests/fixtures/cksum/sha384_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/sha384_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
SHA384 (lorem_ipsum.txt) = 4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb
|
||||
SHA384 (alice_in_wonderland.txt) = b7966c97ef84ab5858db2e0cdd33fbaf4fa8346d84de65aba001e738c242598a43272854d0073ad1099404eaa1d93766
|
1
tests/fixtures/cksum/sha384_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/sha384_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA384 (lorem_ipsum.txt) = 4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb
|
1
tests/fixtures/cksum/sha384_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/sha384_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA384 (-) = 4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb
|
2
tests/fixtures/cksum/sha512_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/sha512_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
SHA512 (lorem_ipsum.txt) = 965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05
|
||||
SHA512 (alice_in_wonderland.txt) = 251646d5a7eb481e0f3aced7839d78dd5e97153f822dc55938e17059c485990d85d602e2881b528b565ab6262584a69c97b068b26bda81acc9356c53c7c1c96d
|
1
tests/fixtures/cksum/sha512_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/sha512_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA512 (lorem_ipsum.txt) = 965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05
|
1
tests/fixtures/cksum/sha512_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/sha512_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SHA512 (-) = 965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05
|
2
tests/fixtures/cksum/sm3_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/sm3_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
SM3 (lorem_ipsum.txt) = 6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2
|
||||
SM3 (alice_in_wonderland.txt) = d66617ae3c4e87828298dcd836f79efbab488c53b84e09c3e8e83a16c902418d
|
1
tests/fixtures/cksum/sm3_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/sm3_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SM3 (lorem_ipsum.txt) = 6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2
|
1
tests/fixtures/cksum/sm3_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/sm3_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
SM3 (-) = 6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2
|
2
tests/fixtures/cksum/untagged/blake2b_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/blake2b_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 lorem_ipsum.txt
|
||||
91b8b0f0868e905ad18b8ac35e4a1dacd289857b19258ab5d1e071761af758b0134ec152d4f011fe1825ca889c80c2e072ca70eb50548c25fc49a98937515af4 alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/blake2b_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/blake2b_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/blake2b_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/blake2b_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 -
|
2
tests/fixtures/cksum/untagged/bsd_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/bsd_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
08109 1 lorem_ipsum.txt
|
||||
01814 1 alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/bsd_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/bsd_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
08109 1 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/bsd_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/bsd_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
08109 1
|
2
tests/fixtures/cksum/untagged/crc_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/crc_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
378294376 772 lorem_ipsum.txt
|
||||
3805907707 302 alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/crc_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/crc_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
378294376 772 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/crc_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/crc_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
378294376 772
|
2
tests/fixtures/cksum/untagged/md5_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/md5_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
cd724690f7dc61775dfac400a71f2caa lorem_ipsum.txt
|
||||
f6fa7033e16166a9589aa1c0388ffd58 alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/md5_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/md5_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
cd724690f7dc61775dfac400a71f2caa lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/md5_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/md5_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
cd724690f7dc61775dfac400a71f2caa -
|
2
tests/fixtures/cksum/untagged/sha1_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/sha1_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef lorem_ipsum.txt
|
||||
22b54b2520e8b4fa59eb10719028a4e587c12d1e alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/sha1_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha1_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/sha1_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha1_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef -
|
2
tests/fixtures/cksum/untagged/sha224_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/sha224_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 lorem_ipsum.txt
|
||||
54c9c7d78458886418ce0845111fc49fe1c628ffd4bf3da14226ffd9 alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/sha224_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha224_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/sha224_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha224_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 -
|
2
tests/fixtures/cksum/untagged/sha256_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/sha256_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 lorem_ipsum.txt
|
||||
14ab7e5a0aa3a670222744714bc96961d51012cb216225d965db71824a46e5fe alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/sha256_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha256_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/sha256_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha256_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 -
|
2
tests/fixtures/cksum/untagged/sha384_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/sha384_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb lorem_ipsum.txt
|
||||
b7966c97ef84ab5858db2e0cdd33fbaf4fa8346d84de65aba001e738c242598a43272854d0073ad1099404eaa1d93766 alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/sha384_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha384_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/sha384_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha384_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb -
|
2
tests/fixtures/cksum/untagged/sha512_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/sha512_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 lorem_ipsum.txt
|
||||
251646d5a7eb481e0f3aced7839d78dd5e97153f822dc55938e17059c485990d85d602e2881b528b565ab6262584a69c97b068b26bda81acc9356c53c7c1c96d alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/sha512_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha512_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/sha512_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sha512_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 -
|
2
tests/fixtures/cksum/untagged/sm3_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/sm3_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 lorem_ipsum.txt
|
||||
d66617ae3c4e87828298dcd836f79efbab488c53b84e09c3e8e83a16c902418d alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/sm3_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sm3_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/sm3_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sm3_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 -
|
2
tests/fixtures/cksum/untagged/sysv_multiple_files.expected
vendored
Normal file
2
tests/fixtures/cksum/untagged/sysv_multiple_files.expected
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
6985 2 lorem_ipsum.txt
|
||||
27441 1 alice_in_wonderland.txt
|
1
tests/fixtures/cksum/untagged/sysv_single_file.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sysv_single_file.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
6985 2 lorem_ipsum.txt
|
1
tests/fixtures/cksum/untagged/sysv_stdin.expected
vendored
Normal file
1
tests/fixtures/cksum/untagged/sysv_stdin.expected
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
6985 2
|
Loading…
Add table
Add a link
Reference in a new issue