coreutils/tests/by-util/test_stty.rs
2025-07-06 22:29:47 -04:00

295 lines
7.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.
// spell-checker:ignore parenb parmrk ixany iuclc onlcr ofdel icanon noflsh econl igpar ispeed ospeed
use uutests::new_ucmd;
#[test]
fn test_invalid_arg() {
new_ucmd!().arg("--definitely-invalid").fails_with_code(1);
}
#[test]
#[ignore = "Fails because cargo test does not run in a tty"]
fn runs() {
new_ucmd!().succeeds();
}
#[test]
#[ignore = "Fails because cargo test does not run in a tty"]
fn print_all() {
let res = new_ucmd!().args(&["--all"]).succeeds();
// Random selection of flags to check for
for flag in [
"parenb", "parmrk", "ixany", "onlcr", "ofdel", "icanon", "noflsh",
] {
res.stdout_contains(flag);
}
}
#[test]
fn save_and_setting() {
new_ucmd!()
.args(&["--save", "nl0"])
.fails()
.stderr_contains("when specifying an output style, modes may not be set");
}
#[test]
fn all_and_setting() {
new_ucmd!()
.args(&["--all", "nl0"])
.fails()
.stderr_contains("when specifying an output style, modes may not be set");
}
#[test]
fn all_and_print_setting() {
new_ucmd!()
.args(&["--all", "size"])
.fails()
.stderr_contains("when specifying an output style, modes may not be set");
}
#[test]
fn save_and_all() {
new_ucmd!()
.args(&["--save", "--all"])
.fails()
.stderr_contains(
"the options for verbose and stty-readable output styles are mutually exclusive",
);
new_ucmd!()
.args(&["--all", "--save"])
.fails()
.stderr_contains(
"the options for verbose and stty-readable output styles are mutually exclusive",
);
}
#[test]
fn no_mapping() {
new_ucmd!()
.args(&["intr"])
.fails()
.stderr_contains("missing argument to 'intr'");
}
#[test]
fn invalid_mapping() {
new_ucmd!()
.args(&["intr", "cc"])
.fails()
.stderr_contains("invalid integer argument: 'cc'");
new_ucmd!()
.args(&["intr", "256"])
.fails()
.stderr_contains("invalid integer argument: '256': Value too large for defined data type");
new_ucmd!()
.args(&["intr", "0x100"])
.fails()
.stderr_contains(
"invalid integer argument: '0x100': Value too large for defined data type",
);
new_ucmd!()
.args(&["intr", "0400"])
.fails()
.stderr_contains("invalid integer argument: '0400': Value too large for defined data type");
}
#[test]
fn invalid_setting() {
new_ucmd!()
.args(&["-econl"])
.fails()
.stderr_contains("invalid argument '-econl'");
new_ucmd!()
.args(&["igpar"])
.fails()
.stderr_contains("invalid argument 'igpar'");
}
#[test]
fn invalid_baud_setting() {
#[cfg(not(any(
target_os = "freebsd",
target_os = "dragonfly",
target_os = "ios",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd"
)))]
new_ucmd!()
.args(&["100"])
.fails()
.stderr_contains("invalid argument '100'");
new_ucmd!()
.args(&["-1"])
.fails()
.stderr_contains("invalid argument '-1'");
new_ucmd!()
.args(&["ispeed"])
.fails()
.stderr_contains("missing argument to 'ispeed'");
new_ucmd!()
.args(&["ospeed"])
.fails()
.stderr_contains("missing argument to 'ospeed'");
#[cfg(not(any(
target_os = "freebsd",
target_os = "dragonfly",
target_os = "ios",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd"
)))]
new_ucmd!()
.args(&["ispeed", "995"])
.fails()
.stderr_contains("invalid ispeed '995'");
#[cfg(not(any(
target_os = "freebsd",
target_os = "dragonfly",
target_os = "ios",
target_os = "macos",
target_os = "netbsd",
target_os = "openbsd"
)))]
new_ucmd!()
.args(&["ospeed", "995"])
.fails()
.stderr_contains("invalid ospeed '995'");
}
#[test]
#[ignore = "Fails because cargo test does not run in a tty"]
fn set_mapping() {
new_ucmd!().args(&["intr", "'"]).succeeds();
new_ucmd!()
.args(&["--all"])
.succeeds()
.stdout_contains("intr = '");
new_ucmd!().args(&["intr", "undef"]).succeeds();
new_ucmd!()
.args(&["--all"])
.succeeds()
.stdout_contains("intr = <undef>");
new_ucmd!().args(&["intr", "^-"]).succeeds();
new_ucmd!()
.args(&["--all"])
.succeeds()
.stdout_contains("intr = <undef>");
new_ucmd!().args(&["intr", ""]).succeeds();
new_ucmd!()
.args(&["--all"])
.succeeds()
.stdout_contains("intr = <undef>");
new_ucmd!().args(&["intr", "^C"]).succeeds();
new_ucmd!()
.args(&["--all"])
.succeeds()
.stdout_contains("intr = ^C");
}
#[test]
fn row_column_sizes() {
new_ucmd!()
.args(&["rows", "-1"])
.fails()
.stderr_contains("invalid integer argument: '-1'");
new_ucmd!()
.args(&["columns", "-1"])
.fails()
.stderr_contains("invalid integer argument: '-1'");
// overflow the u32 used for row/col counts
new_ucmd!()
.args(&["cols", "4294967296"])
.fails()
.stderr_contains("invalid integer argument: '4294967296'");
new_ucmd!()
.args(&["rows", ""])
.fails()
.stderr_contains("invalid integer argument: ''");
new_ucmd!()
.args(&["columns"])
.fails()
.stderr_contains("missing argument to 'columns'");
new_ucmd!()
.args(&["rows"])
.fails()
.stderr_contains("missing argument to 'rows'");
}
#[test]
#[cfg(any(target_os = "linux", target_os = "android"))]
fn line() {
new_ucmd!()
.args(&["line"])
.fails()
.stderr_contains("missing argument to 'line'");
new_ucmd!()
.args(&["line", "-1"])
.fails()
.stderr_contains("invalid integer argument: '-1'");
new_ucmd!()
.args(&["line", "256"])
.fails()
.stderr_contains("invalid integer argument: '256'");
}
#[test]
fn min_and_time() {
new_ucmd!()
.args(&["min"])
.fails()
.stderr_contains("missing argument to 'min'");
new_ucmd!()
.args(&["time"])
.fails()
.stderr_contains("missing argument to 'time'");
new_ucmd!()
.args(&["min", "-1"])
.fails()
.stderr_contains("invalid integer argument: '-1'");
new_ucmd!()
.args(&["time", "-1"])
.fails()
.stderr_contains("invalid integer argument: '-1'");
new_ucmd!()
.args(&["min", "256"])
.fails()
.stderr_contains("invalid integer argument: '256': Value too large for defined data type");
new_ucmd!()
.args(&["time", "256"])
.fails()
.stderr_contains("invalid integer argument: '256': Value too large for defined data type");
}