#[cfg(unix)]
pub fn run_with_tty_stdin(args: &[&str], current_dir: Option<&str>) -> std::process::Output {
use assert_cmd::cargo::CommandCargoExt;
use std::os::fd::{FromRawFd, OwnedFd};
use std::process::{Command, Stdio};
let mut master: libc::c_int = -1;
let mut slave: libc::c_int = -1;
let rc = unsafe {
libc::openpty(
&mut master,
&mut slave,
std::ptr::null_mut(),
std::ptr::null_mut::<libc::termios>(),
std::ptr::null_mut::<libc::winsize>(),
)
};
assert_eq!(rc, 0, "openpty failed: {}", std::io::Error::last_os_error());
let _master_fd = unsafe { OwnedFd::from_raw_fd(master) };
let slave_fd = unsafe { OwnedFd::from_raw_fd(slave) };
let stdin = Stdio::from(slave_fd);
let mut command = Command::cargo_bin("blockwatch").expect("blockwatch binary should be built");
if let Some(dir) = current_dir {
command.current_dir(dir);
}
let child = command
.args(args)
.stdin(stdin)
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
.expect("failed to spawn blockwatch");
let output = child
.wait_with_output()
.expect("failed to wait for blockwatch");
output
}