recast-core 0.1.15

Engine behind the recast CLI: regex / Rhai script / tree-sitter rewrites, atomic two-phase commit, schema-locked JSON output.
Documentation
#![allow(clippy::unwrap_used)]

use super::*;
use tempfile::TempDir;

#[test]
fn exclusive_lock_blocks_second_acquire() {
    let dir = TempDir::new().unwrap();
    let lock_path = dir.path().join(".recast.lock");

    let _first = acquire_workspace_lock(&lock_path).unwrap();
    let second = acquire_workspace_lock(&lock_path).unwrap_err();
    assert!(matches!(second, Error::Locked { .. }));
}

#[test]
fn lock_released_when_guard_dropped() {
    let dir = TempDir::new().unwrap();
    let lock_path = dir.path().join(".recast.lock");

    {
        let _guard = acquire_workspace_lock(&lock_path).unwrap();
    }
    let again = acquire_workspace_lock(&lock_path).unwrap();
    drop(again);
}

#[test]
fn lock_creates_lockfile_in_parent_dir() {
    let dir = TempDir::new().unwrap();
    let lock_path = dir.path().join(".recast.lock");
    let _guard = acquire_workspace_lock(&lock_path).unwrap();
    assert!(lock_path.exists());
}