mirror of
https://github.com/uutils/coreutils.git
synced 2025-07-07 21:45:01 +00:00
120 lines
3.1 KiB
Rust
120 lines
3.1 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 std::io::IsTerminal;
|
|
|
|
use uutests::{at_and_ucmd, new_ucmd};
|
|
|
|
#[cfg(unix)]
|
|
#[test]
|
|
fn test_no_arg() {
|
|
if std::io::stdout().is_terminal() {
|
|
new_ucmd!()
|
|
.terminal_simulation(true)
|
|
.fails()
|
|
.stderr_contains("more: bad usage");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_valid_arg() {
|
|
if std::io::stdout().is_terminal() {
|
|
let args_list: Vec<&[&str]> = vec![
|
|
&["-c"],
|
|
&["--clean-print"],
|
|
&["-p"],
|
|
&["--print-over"],
|
|
&["-s"],
|
|
&["--squeeze"],
|
|
&["-u"],
|
|
&["--plain"],
|
|
&["-n", "10"],
|
|
&["--lines", "0"],
|
|
&["--number", "0"],
|
|
&["-F", "10"],
|
|
&["--from-line", "0"],
|
|
&["-P", "something"],
|
|
&["--pattern", "-1"],
|
|
];
|
|
for args in args_list {
|
|
test_alive(args);
|
|
}
|
|
}
|
|
}
|
|
|
|
fn test_alive(args: &[&str]) {
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
let file = "test_file";
|
|
at.touch(file);
|
|
|
|
ucmd.args(args)
|
|
.arg(file)
|
|
.run_no_wait()
|
|
.make_assertion()
|
|
.is_alive();
|
|
}
|
|
|
|
#[test]
|
|
fn test_invalid_arg() {
|
|
if std::io::stdout().is_terminal() {
|
|
new_ucmd!().arg("--invalid").fails();
|
|
|
|
new_ucmd!().arg("--lines").arg("-10").fails();
|
|
new_ucmd!().arg("--number").arg("-10").fails();
|
|
|
|
new_ucmd!().arg("--from-line").arg("-10").fails();
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_file_arg() {
|
|
// Run the test only if there's a valid terminal, else do nothing
|
|
// Maybe we could capture the error, i.e. "Device not found" in that case
|
|
// but I am leaving this for later
|
|
if std::io::stdout().is_terminal() {
|
|
// Directory as argument
|
|
new_ucmd!()
|
|
.arg(".")
|
|
.succeeds()
|
|
.stderr_contains("'.' is a directory.");
|
|
|
|
// Single argument errors
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
at.mkdir_all("folder");
|
|
ucmd.arg("folder")
|
|
.succeeds()
|
|
.stderr_contains("is a directory");
|
|
|
|
new_ucmd!()
|
|
.arg("nonexistent_file")
|
|
.succeeds()
|
|
.stderr_contains("No such file or directory");
|
|
|
|
// Multiple nonexistent files
|
|
new_ucmd!()
|
|
.arg("file2")
|
|
.arg("file3")
|
|
.succeeds()
|
|
.stderr_contains("file2")
|
|
.stderr_contains("file3");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(target_family = "unix")]
|
|
fn test_invalid_file_perms() {
|
|
if std::io::stdout().is_terminal() {
|
|
use std::fs::{Permissions, set_permissions};
|
|
use std::os::unix::fs::PermissionsExt;
|
|
|
|
let (at, mut ucmd) = at_and_ucmd!();
|
|
let permissions = Permissions::from_mode(0o244);
|
|
at.make_file("invalid-perms.txt");
|
|
set_permissions(at.plus("invalid-perms.txt"), permissions).unwrap();
|
|
ucmd.arg("invalid-perms.txt")
|
|
.succeeds()
|
|
.stderr_contains("permission denied");
|
|
}
|
|
}
|