rash_core 2.20.0

Declarative shell scripting using Rust native bindings
Documentation
use super::*;
use std::fs;
use tempfile::tempdir;

#[test]
fn test_patch_apply() {
    let dir = tempdir().unwrap();
    let file_path = dir.path().join("test.txt");
    let patch_path = dir.path().join("test.patch");

    fs::write(&file_path, "hello world\n").unwrap();
    fs::write(
        &patch_path,
        "--- test.txt\n+++ test.txt\n@@ -1 +1 @@\n-hello world\n+hello universe\n",
    )
    .unwrap();

    let script_text = format!(
        r#"
- patch:
    src: {}
    dest: {}
"#,
        patch_path.display(),
        file_path.display()
    );
    let (stdout, stderr) = run_test(&script_text, &[]);
    assert!(stderr.contains("changed") || stdout.contains("changed"));
}

#[test]
fn test_patch_with_backup() {
    let dir = tempdir().unwrap();
    let file_path = dir.path().join("test.txt");
    let patch_path = dir.path().join("test.patch");

    fs::write(&file_path, "hello world\n").unwrap();
    fs::write(
        &patch_path,
        "--- test.txt\n+++ test.txt\n@@ -1 +1 @@\n-hello world\n+hello universe\n",
    )
    .unwrap();

    let script_text = format!(
        r#"
- patch:
    src: {}
    dest: {}
    backup: true
"#,
        patch_path.display(),
        file_path.display()
    );
    let (stdout, stderr) = run_test(&script_text, &[]);
    assert!(stderr.contains("changed") || stdout.contains("changed"));
}

#[test]
fn test_patch_with_strip() {
    let dir = tempdir().unwrap();
    let file_path = dir.path().join("test.txt");
    let patch_path = dir.path().join("test.patch");

    fs::write(&file_path, "hello world\n").unwrap();
    fs::write(
        &patch_path,
        "--- a/test.txt\n+++ b/test.txt\n@@ -1 +1 @@\n-hello world\n+hello universe\n",
    )
    .unwrap();

    let script_text = format!(
        r#"
- patch:
    src: {}
    dest: {}
    strip: 1
"#,
        patch_path.display(),
        file_path.display()
    );
    let (stdout, stderr) = run_test(&script_text, &[]);
    assert!(stderr.contains("changed") || stdout.contains("changed"));
}