Codex Handbook
apply-patch/tests/suite/cli.rs 91 lines
use assert_cmd::Command;use std::fs;use tempfile::tempdir;fn apply_patch_command() -> anyhow::Result<Command> {    Ok(Command::new(codex_utils_cargo_bin::cargo_bin(        "apply_patch",    )?))}#[test]fn test_apply_patch_cli_add_and_update() -> anyhow::Result<()> {    let tmp = tempdir()?;    let file = "cli_test.txt";    let absolute_path = tmp.path().join(file);    // 1) Add a file    let add_patch = format!(        r#"*** Begin Patch*** Add File: {file}+hello*** End Patch"#    );    apply_patch_command()?        .arg(add_patch)        .current_dir(tmp.path())        .assert()        .success()        .stdout(format!("Success. Updated the following files:\nA {file}\n"));    assert_eq!(fs::read_to_string(&absolute_path)?, "hello\n");    // 2) Update the file    let update_patch = format!(        r#"*** Begin Patch*** Update File: {file}@@-hello+world*** End Patch"#    );    apply_patch_command()?        .arg(update_patch)        .current_dir(tmp.path())        .assert()        .success()        .stdout(format!("Success. Updated the following files:\nM {file}\n"));    assert_eq!(fs::read_to_string(&absolute_path)?, "world\n");    Ok(())}#[test]fn test_apply_patch_cli_stdin_add_and_update() -> anyhow::Result<()> {    let tmp = tempdir()?;    let file = "cli_test_stdin.txt";    let absolute_path = tmp.path().join(file);    // 1) Add a file via stdin    let add_patch = format!(        r#"*** Begin Patch*** Add File: {file}+hello*** End Patch"#    );    apply_patch_command()?        .current_dir(tmp.path())        .write_stdin(add_patch)        .assert()        .success()        .stdout(format!("Success. Updated the following files:\nA {file}\n"));    assert_eq!(fs::read_to_string(&absolute_path)?, "hello\n");    // 2) Update the file via stdin    let update_patch = format!(        r#"*** Begin Patch*** Update File: {file}@@-hello+world*** End Patch"#    );    apply_patch_command()?        .current_dir(tmp.path())        .write_stdin(update_patch)        .assert()        .success()        .stdout(format!("Success. Updated the following files:\nM {file}\n"));    assert_eq!(fs::read_to_string(&absolute_path)?, "world\n");    Ok(())}