mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
172 lines
4.8 KiB
Rust
172 lines
4.8 KiB
Rust
// This file is part of the uutils coreutils package.
|
|
//
|
|
// For the full copyright and license information, please view the LICENSE
|
|
// file that was distributed with this source code.
|
|
|
|
use uutests::new_ucmd;
|
|
use uutests::util::TestScenario;
|
|
use uutests::util_name;
|
|
// spell-checker:ignore checkfile, testf, ntestf
|
|
macro_rules! get_hash(
|
|
($str:expr) => (
|
|
$str.split(' ').collect::<Vec<&str>>()[0]
|
|
);
|
|
);
|
|
|
|
macro_rules! test_digest {
|
|
($id:ident) => {
|
|
mod $id {
|
|
use uutests::util::*;
|
|
use uutests::util_name;
|
|
static EXPECTED_FILE: &'static str = concat!(stringify!($id), ".expected");
|
|
static CHECK_FILE: &'static str = concat!(stringify!($id), ".checkfile");
|
|
static INPUT_FILE: &'static str = "input.txt";
|
|
|
|
#[test]
|
|
fn test_single_file() {
|
|
let ts = TestScenario::new(util_name!());
|
|
assert_eq!(
|
|
ts.fixtures.read(EXPECTED_FILE),
|
|
get_hash!(
|
|
ts.ucmd()
|
|
.arg(INPUT_FILE)
|
|
.succeeds()
|
|
.no_stderr()
|
|
.stdout_str()
|
|
)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_stdin() {
|
|
let ts = TestScenario::new(util_name!());
|
|
assert_eq!(
|
|
ts.fixtures.read(EXPECTED_FILE),
|
|
get_hash!(
|
|
ts.ucmd()
|
|
.pipe_in_fixture(INPUT_FILE)
|
|
.succeeds()
|
|
.no_stderr()
|
|
.stdout_str()
|
|
)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_check() {
|
|
let ts = TestScenario::new(util_name!());
|
|
println!("File content='{}'", ts.fixtures.read(INPUT_FILE));
|
|
println!("Check file='{}'", ts.fixtures.read(CHECK_FILE));
|
|
|
|
ts.ucmd()
|
|
.args(&["--check", CHECK_FILE])
|
|
.succeeds()
|
|
.no_stderr()
|
|
.stdout_is("input.txt: OK\n");
|
|
}
|
|
|
|
#[test]
|
|
fn test_zero() {
|
|
let ts = TestScenario::new(util_name!());
|
|
assert_eq!(
|
|
ts.fixtures.read(EXPECTED_FILE),
|
|
get_hash!(
|
|
ts.ucmd()
|
|
.arg("--zero")
|
|
.arg(INPUT_FILE)
|
|
.succeeds()
|
|
.no_stderr()
|
|
.stdout_str()
|
|
)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_missing_file() {
|
|
let ts = TestScenario::new(util_name!());
|
|
let at = &ts.fixtures;
|
|
|
|
at.write("a", "file1\n");
|
|
at.write("c", "file3\n");
|
|
|
|
ts.ucmd()
|
|
.args(&["a", "b", "c"])
|
|
.fails()
|
|
.stdout_contains("a\n")
|
|
.stdout_contains("c\n")
|
|
.stderr_contains("b: No such file or directory");
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
test_digest! {sha256}
|
|
|
|
#[test]
|
|
fn test_invalid_arg() {
|
|
new_ucmd!().arg("--definitely-invalid").fails_with_code(1);
|
|
}
|
|
|
|
#[test]
|
|
fn test_conflicting_arg() {
|
|
new_ucmd!().arg("--tag").arg("--check").fails_with_code(1);
|
|
new_ucmd!().arg("--tag").arg("--text").fails_with_code(1);
|
|
}
|
|
|
|
#[test]
|
|
fn test_tag() {
|
|
let scene = TestScenario::new(util_name!());
|
|
let at = &scene.fixtures;
|
|
|
|
at.write("foobar", "foo bar\n");
|
|
scene
|
|
.ccmd("sha256sum")
|
|
.arg("--tag")
|
|
.arg("foobar")
|
|
.succeeds()
|
|
.stdout_is(
|
|
"SHA256 (foobar) = 1f2ec52b774368781bed1d1fb140a92e0eb6348090619c9291f9a5a3c8e8d151\n",
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_sha256_binary() {
|
|
let ts = TestScenario::new(util_name!());
|
|
assert_eq!(
|
|
ts.fixtures.read("binary.sha256.expected"),
|
|
get_hash!(
|
|
ts.ucmd()
|
|
.arg("binary.png")
|
|
.succeeds()
|
|
.no_stderr()
|
|
.stdout_str()
|
|
)
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_sha256_stdin_binary() {
|
|
let ts = TestScenario::new(util_name!());
|
|
assert_eq!(
|
|
ts.fixtures.read("binary.sha256.expected"),
|
|
get_hash!(
|
|
ts.ucmd()
|
|
.pipe_in_fixture("binary.png")
|
|
.succeeds()
|
|
.no_stderr()
|
|
.stdout_str()
|
|
)
|
|
);
|
|
}
|
|
|
|
// This test is currently disabled on windows
|
|
#[test]
|
|
#[cfg_attr(windows, ignore = "Discussion is in #9168")]
|
|
fn test_check_sha256_binary() {
|
|
new_ucmd!()
|
|
.args(&["--check", "binary.sha256.checkfile"])
|
|
.succeeds()
|
|
.no_stderr()
|
|
.stdout_is("binary.png: OK\n");
|
|
}
|