rustcodegraph 1.2.5

Local-first code intelligence graph and CLI for AI agents
Documentation
use crate::common::*;

#[test]
fn should_watch_and_unwatch_via_code_graph_api() {
    let _guard = TestGuard::new();
    let project = TempProject::new("codegraph-watcher");
    let mut cg = CodeGraph::init_sync(project.path()).expect("CodeGraph init should work");
    let _ = cg.index_all(IndexOptions::default());

    assert!(!cg.is_watching());

    let started = cg.watch(CodeGraphWatchOptions {
        debounce_ms: Some(200),
        ..CodeGraphWatchOptions::default()
    });
    assert!(started);
    assert!(cg.is_watching());

    cg.unwatch();
    assert!(!cg.is_watching());
}

#[test]
fn should_stop_watching_on_close() {
    let _guard = TestGuard::new();
    let project = TempProject::new("codegraph-watcher");
    let mut cg = CodeGraph::init_sync(project.path()).expect("CodeGraph init should work");
    let _ = cg.index_all(IndexOptions::default());

    cg.watch(CodeGraphWatchOptions {
        debounce_ms: Some(200),
        ..CodeGraphWatchOptions::default()
    });
    assert!(cg.is_watching());

    cg.close();
    assert!(!cg.is_watching());
}

#[test]
fn should_auto_sync_when_files_change_while_watching_real_fs_watch_end_to_end() {
    let _guard = TestGuard::new();
    let project = TempProject::new("codegraph-watcher");
    let mut cg = CodeGraph::init_sync(project.path()).expect("CodeGraph init should work");
    let _ = cg.index_all(IndexOptions::default());
    let initial_stats = cg.get_stats();
    let initial_nodes = initial_stats.node_count;

    cg.watch(CodeGraphWatchOptions {
        debounce_ms: Some(300),
        ..CodeGraphWatchOptions::default()
    });
    thread::sleep(Duration::from_millis(100));

    fs::write(
        project.path().join("src").join("added.ts"),
        "export function added() { return 42; }",
    )
    .expect("added source file should be written");

    wait_for(
        || {
            let stats = cg.get_stats();
            stats.node_count > initial_nodes
        },
        8000,
        25,
    );

    let results = cg.search_nodes("added", None);
    assert!(!results.is_empty());

    cg.unwatch();
}