conpty 0.7.0

A library which provides an interface for ConPTY
Documentation
use std::io::{Read, Write};

use conpty::spawn;

#[test]
pub fn close_one_pty_input_doesnt_close_others() {
    let mut proc = spawn("cmd").unwrap();
    let writer1 = proc.input().unwrap();
    let mut writer2 = proc.input().unwrap();

    assert!(writer2.write(b"").is_ok());

    drop(writer1);

    assert!(writer2.write(b"").is_ok());
}

#[test]
pub fn non_blocking_read() {
    let mut proc = spawn("cmd").unwrap();
    let mut reader = proc.output().unwrap();
    reader.blocking(false);

    let mut buf = [0; 1028];
    loop {
        match reader.read(&mut buf) {
            Ok(_) => break,
            Err(err) if err.kind() == std::io::ErrorKind::WouldBlock => {}
            Err(err) => Err(err).unwrap(),
        }
    }
}

#[test]
pub fn non_blocking_mode_does_not_affect_all_readers() {
    let mut proc = spawn("cmd").unwrap();
    let mut reader1 = proc.output().unwrap();
    let mut reader2 = proc.output().unwrap();
    reader2.blocking(false);

    assert!(reader1.read(&mut [0; 128]).is_ok());
}

#[test]
pub fn dropping_one_reader_doesnt_affect_others() {
    let mut proc = spawn("cmd").unwrap();
    let mut reader1 = proc.output().unwrap();
    let reader2 = proc.output().unwrap();

    drop(reader2);

    reader1.blocking(false);
    assert_eq!(
        reader1.read(&mut [0; 128]).unwrap_err().kind(),
        std::io::ErrorKind::WouldBlock
    );
}