mirror of
https://github.com/uutils/coreutils
synced 2024-12-24 12:03:24 +00:00
7ef4bb37a8
The main motivation is to move toward running those tests for a specific target, that is, if a test won't run on Windows, then we shouldn't build it. This was previously the default behavior and prevented a successful run on AppVeyor. I borrowed this pattern from the tests in the Cargo project.
90 lines
2.2 KiB
Rust
90 lines
2.2 KiB
Rust
use common::util::*;
|
|
|
|
static UTIL_NAME: &'static str = "basename";
|
|
|
|
fn expect_successful_stdout(input: Vec<&str>, expected: &str) {
|
|
let (_, mut ucmd) = testing(UTIL_NAME);
|
|
let results = ucmd.args(&input).run();
|
|
assert_empty_stderr!(results);
|
|
assert!(results.success);
|
|
assert_eq!(expected, results.stdout.trim_right());
|
|
}
|
|
|
|
#[test]
|
|
fn test_directory() {
|
|
let dir = "/root/alpha/beta/gamma/delta/epsilon/omega/";
|
|
expect_successful_stdout(vec![dir], "omega");
|
|
}
|
|
|
|
#[test]
|
|
fn test_file() {
|
|
let file = "/etc/passwd";
|
|
expect_successful_stdout(vec![file], "passwd");
|
|
}
|
|
|
|
#[test]
|
|
fn test_remove_suffix() {
|
|
let path = "/usr/local/bin/reallylongexecutable.exe";
|
|
expect_successful_stdout(vec![path, ".exe"], "reallylongexecutable");
|
|
}
|
|
|
|
#[test]
|
|
fn test_dont_remove_suffix() {
|
|
let path = "/foo/bar/baz";
|
|
expect_successful_stdout(vec![path, "baz"], "baz");
|
|
}
|
|
|
|
fn expect_error(input: Vec<&str>, expected_stdout: &str) {
|
|
let (_, mut ucmd) = testing(UTIL_NAME);
|
|
let results = ucmd.args(&input).run();
|
|
assert!(!results.success);
|
|
assert!(results.stderr.len() > 0);
|
|
assert_eq!(expected_stdout, results.stdout.trim_right());
|
|
}
|
|
|
|
#[cfg_attr(not(feature="test_unimplemented"),ignore)]
|
|
#[test]
|
|
fn test_multiple_param() {
|
|
for multiple_param in vec!["-a", "--multiple"] {
|
|
let path = "/foo/bar/baz";
|
|
expect_successful_stdout(vec![multiple_param, path, path], "baz\nbaz");
|
|
}
|
|
}
|
|
|
|
#[cfg_attr(not(feature="test_unimplemented"),ignore)]
|
|
#[test]
|
|
fn test_suffix_param() {
|
|
for suffix_param in vec!["-s", "--suffix"] {
|
|
let path = "/foo/bar/baz.exe";
|
|
let suffix = ".exe";
|
|
expect_successful_stdout(
|
|
vec![suffix_param, suffix, path, path],
|
|
"baz\nbaz"
|
|
);
|
|
}
|
|
}
|
|
|
|
#[cfg_attr(not(feature="test_unimplemented"),ignore)]
|
|
#[test]
|
|
fn test_zero_param() {
|
|
for zero_param in vec!["-z", "--zero"] {
|
|
let path = "/foo/bar/baz";
|
|
expect_successful_stdout(vec![zero_param, "-a", path, path], "baz\0baz\0");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_invalid_option() {
|
|
let path = "/foo/bar/baz";
|
|
expect_error(vec!["-q", path], "");
|
|
}
|
|
|
|
#[test]
|
|
fn test_no_args() {
|
|
expect_error(vec![], "");
|
|
}
|
|
|
|
#[test]
|
|
fn test_too_many_args() {
|
|
expect_error(vec!["a", "b", "c"], "");
|
|
}
|