pub mod config;
pub mod error;
pub mod traits;
#[cfg(unix)]
pub mod unix;
#[cfg(windows)]
pub mod windows;
pub use config::{PtyConfig, PtyConfigBuilder, PtySignal, WindowSize};
pub use error::{PtyError, Result};
pub use traits::{ExitStatus, PtyChild, PtyMaster, PtySystem};
#[cfg(unix)]
pub use unix::{NativePtySystem, UnixPtyChild, UnixPtyMaster, UnixPtySystem};
#[cfg(windows)]
pub use windows::{NativePtySystem, WindowsPtyChild, WindowsPtyMaster, WindowsPtySystem};
#[cfg(unix)]
pub async fn spawn_shell() -> Result<(UnixPtyMaster, UnixPtyChild)> {
UnixPtySystem::spawn_shell(&PtyConfig::default()).await
}
#[cfg(windows)]
pub async fn spawn_shell() -> Result<(WindowsPtyMaster, WindowsPtyChild)> {
WindowsPtySystem::spawn_shell(&PtyConfig::default()).await
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_config() {
let config = PtyConfig::default();
assert_eq!(config.window_size, (80, 24));
assert!(config.new_session);
}
#[test]
fn window_size_conversion() {
let size = WindowSize::new(120, 40);
assert_eq!(size.cols, 120);
assert_eq!(size.rows, 40);
}
#[cfg(unix)]
#[tokio::test]
async fn spawn_echo() {
let config = PtyConfig::default();
let result = UnixPtySystem::spawn("echo", ["test"], &config).await;
if let Ok((mut master, mut child)) = result {
let _ = child.wait().await;
master.close().ok();
}
}
}