// 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::>()[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"); }