91 lines
2.4 KiB
Rust
91 lines
2.4 KiB
Rust
|
|
use assert_cmd::prelude::*;
|
||
|
|
use std::fs;
|
||
|
|
use std::process::Command;
|
||
|
|
use tempfile::tempdir;
|
||
|
|
|
||
|
|
#[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"#
|
||
|
|
);
|
||
|
|
Command::cargo_bin("apply_patch")
|
||
|
|
.expect("should find apply_patch binary")
|
||
|
|
.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"#
|
||
|
|
);
|
||
|
|
Command::cargo_bin("apply_patch")
|
||
|
|
.expect("should find apply_patch binary")
|
||
|
|
.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"#
|
||
|
|
);
|
||
|
|
let mut cmd =
|
||
|
|
assert_cmd::Command::cargo_bin("apply_patch").expect("should find apply_patch binary");
|
||
|
|
cmd.current_dir(tmp.path());
|
||
|
|
cmd.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"#
|
||
|
|
);
|
||
|
|
let mut cmd =
|
||
|
|
assert_cmd::Command::cargo_bin("apply_patch").expect("should find apply_patch binary");
|
||
|
|
cmd.current_dir(tmp.path());
|
||
|
|
cmd.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(())
|
||
|
|
}
|