command-stream 1.8.0

Modern shell command execution library with streaming, async iteration, and event support
Documentation
use assert_cmd::Command;

#[test]
fn repl_reports_missing_rust_evaluator() {
    let dir = tempfile::tempdir().unwrap();
    let missing = dir.path().join("missing-evcxr");
    let output = Command::new(env!("CARGO_BIN_EXE_command-stream"))
        .arg("repl")
        .env("COMMAND_STREAM_EVCXR", missing)
        .output()
        .unwrap();
    assert!(!output.status.success());
    assert!(String::from_utf8_lossy(&output.stderr).contains("cargo install --locked evcxr_repl"));
}

#[test]
fn help_describes_repl_and_cargo_development() {
    let output = Command::new(env!("CARGO_BIN_EXE_command-stream"))
        .arg("--help")
        .output()
        .unwrap();
    assert!(output.status.success());
    let help = String::from_utf8_lossy(&output.stdout);
    assert!(help.contains("repl"));
    assert!(help.contains("dev"));
}

#[test]
#[ignore = "requires Evcxr and rust-src; explicitly run by the Linux CI integration step"]
fn real_repl_evaluates_rust_state_and_public_command_apis() {
    let output = Command::new(env!("CARGO_BIN_EXE_command-stream"))
        .args([
            "repl",
            "--crate",
            env!("CARGO_MANIFEST_DIR"),
            "--disable-readline",
        ])
        .env("CARGO_BUILD_JOBS", "1")
        .env("CARGO_PROFILE_DEV_DEBUG", "0")
        .timeout(std::time::Duration::from_secs(240))
        .write_stdin(include_str!("../examples/repl-input.txt"))
        .output()
        .unwrap();
    let transcript = format!(
        "{}\n{}",
        String::from_utf8_lossy(&output.stdout),
        String::from_utf8_lossy(&output.stderr)
    );
    assert!(output.status.success(), "{transcript}");
    assert!(transcript.contains("RUST_REPL_VERIFIED"), "{transcript}");
    assert!(
        !transcript.contains("error[") && !transcript.contains("Error:"),
        "{transcript}"
    );
}