use crate::posix::helpers::*;
use std::fs;
use std::os::unix::fs::PermissionsExt;
#[test]
fn posix_test_exit_true() {
let result = run(&["test", "-n", "nonempty"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_exit_false() {
let result = run(&["test", "-n", ""]);
assert_eq!(result.0, 1);
}
#[test]
fn posix_test_exit_error() {
let result = run(&["test", "a", "b", "c", "d", "e"]);
assert!(result.0 > 1);
}
#[test]
fn posix_test_string_n_nonempty() {
let result = run(&["test", "-n", "hello"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_string_n_empty() {
let result = run(&["test", "-n", ""]);
assert_eq!(result.0, 1);
}
#[test]
fn posix_test_string_z_empty() {
let result = run(&["test", "-z", ""]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_string_z_nonempty() {
let result = run(&["test", "-z", "hello"]);
assert_eq!(result.0, 1);
}
#[test]
fn posix_test_string_equal() {
let result = run(&["test", "abc", "=", "abc"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_string_not_equal() {
let result = run(&["test", "abc", "=", "xyz"]);
assert_eq!(result.0, 1);
}
#[test]
fn posix_test_string_neq() {
let result = run(&["test", "abc", "!=", "xyz"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_int_eq() {
let result = run(&["test", "42", "-eq", "42"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_int_ne() {
let result = run(&["test", "42", "-ne", "43"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_int_gt() {
let result = run(&["test", "10", "-gt", "5"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_int_ge() {
let result = run(&["test", "10", "-ge", "10"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_int_lt() {
let result = run(&["test", "5", "-lt", "10"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_int_le() {
let result = run(&["test", "10", "-le", "10"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_exists() {
let dir = setup_test_env();
let file = dir.path().join("exists");
fs::write(&file, "content").unwrap();
let result = run(&["test", "-e", file.to_str().unwrap()]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_not_exists() {
let result = run(&["test", "-e", "/nonexistent/path/file"]);
assert_eq!(result.0, 1);
}
#[test]
fn posix_test_file_regular() {
let dir = setup_test_env();
let file = dir.path().join("regular");
fs::write(&file, "content").unwrap();
let result = run(&["test", "-f", file.to_str().unwrap()]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_directory() {
let dir = setup_test_env();
let result = run(&["test", "-d", dir.path().to_str().unwrap()]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_readable() {
let dir = setup_test_env();
let file = dir.path().join("readable");
fs::write(&file, "content").unwrap();
let result = run(&["test", "-r", file.to_str().unwrap()]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_writable() {
let dir = setup_test_env();
let file = dir.path().join("writable");
fs::write(&file, "content").unwrap();
let result = run(&["test", "-w", file.to_str().unwrap()]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_executable() {
let dir = setup_test_env();
let file = dir.path().join("executable");
fs::write(&file, "#!/bin/sh\necho hi").unwrap();
let mut perms = fs::metadata(&file).unwrap().permissions();
perms.set_mode(0o755);
fs::set_permissions(&file, perms).unwrap();
let result = run(&["test", "-x", file.to_str().unwrap()]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_size_nonzero() {
let dir = setup_test_env();
let file = dir.path().join("nonempty");
fs::write(&file, "content").unwrap();
let result = run(&["test", "-s", file.to_str().unwrap()]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_file_size_zero() {
let dir = setup_test_env();
let file = dir.path().join("empty");
fs::write(&file, "").unwrap();
let result = run(&["test", "-s", file.to_str().unwrap()]);
assert_eq!(result.0, 1);
}
#[test]
fn posix_test_not() {
let result = run(&["test", "!", "-n", ""]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_test_grouping() {
let result = run(&["test", "(", "-n", "hello", ")"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_bracket_alias() {
let result = run(&["[", "-n", "hello", "]"]);
assert_eq!(result.0, 0);
}
#[test]
fn posix_bracket_requires_closing() {
let result = run(&["[", "-n", "hello"]);
assert!(result.0 > 0);
}