rash_core 2.20.0

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

#[test]
fn test_replace_simple() {
    let dir = tempdir().unwrap();
    let file_path = dir.path().join("test.txt");
    fs::write(&file_path, "hello world\n").unwrap();

    let script_text = format!(
        r#"
- replace:
    path: {}
    regexp: 'hello'
    replace: 'hi'
"#,
        file_path.display()
    );
    let (stdout, stderr) = run_test(&script_text, &[]);
    assert!(stderr.contains("changed") || stdout.contains("changed"));
}

#[test]
fn test_replace_with_backup() {
    let dir = tempdir().unwrap();
    let file_path = dir.path().join("test.txt");
    fs::write(&file_path, "old content\n").unwrap();

    let script_text = format!(
        r#"
- replace:
    path: {}
    regexp: 'old'
    replace: 'new'
    backup: true
"#,
        file_path.display()
    );
    let (stdout, stderr) = run_test(&script_text, &[]);
    assert!(stderr.contains("changed") || stdout.contains("changed"));
}

#[test]
fn test_replace_with_after_before() {
    let dir = tempdir().unwrap();
    let file_path = dir.path().join("test.txt");
    fs::write(&file_path, "START content END\n").unwrap();

    let script_text = format!(
        r#"
- replace:
    path: {}
    regexp: 'content'
    replace: 'modified'
    after: 'START'
    before: 'END'
"#,
        file_path.display()
    );
    let (stdout, stderr) = run_test(&script_text, &[]);
    assert!(stderr.contains("changed") || stdout.contains("changed"));
}