rustcodegraph 1.2.10

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

#[test]
fn should_resolve_relative_import_paths() {
    let mut context = MockResolutionContext::with_files(&[
        "src/components/utils.ts",
        "src/components/utils/index.ts",
    ]);

    let result = resolve_import_path(
        "./utils",
        "src/components/Button.ts",
        Language::TypeScript,
        &mut context,
    );

    assert_eq!(result.as_deref(), Some("src/components/utils.ts"));
}

#[test]
fn should_resolve_parent_directory_imports() {
    let mut context =
        MockResolutionContext::with_files(&["src/helpers.ts", "src/helpers/index.ts"]);

    let result = resolve_import_path(
        "../helpers",
        "src/components/Button.ts",
        Language::TypeScript,
        &mut context,
    );

    assert_eq!(result.as_deref(), Some("src/helpers.ts"));
}

#[test]
fn should_extract_js_ts_import_mappings() {
    let content = r#"
import { foo } from './foo';
import bar from '../bar';
import * as utils from './utils';
import { baz, qux } from './baz';
"#;

    let mappings = extract_import_mappings("src/index.ts", content, Language::TypeScript);

    assert!(!mappings.is_empty());
    assert!(mappings.iter().any(|mapping| mapping.local_name == "foo"));
    assert!(mappings.iter().any(|mapping| mapping.local_name == "bar"));
}

#[test]
fn should_extract_rust_use_import_mappings() {
    let content = r#"
use crate::utils::format_date;
use crate::models::{User, Profile as UserProfile};
use crate::services as svc;
"#;

    let mappings = extract_import_mappings("src/main.rs", content, Language::Rust);

    assert!(mappings.iter().any(|mapping| {
        mapping.local_name == "format_date"
            && mapping.exported_name == "format_date"
            && mapping.source == "crate::utils"
    }));
    assert!(mappings.iter().any(|mapping| {
        mapping.local_name == "UserProfile"
            && mapping.exported_name == "Profile"
            && mapping.source == "crate::models"
    }));
    assert!(mappings.iter().any(|mapping| {
        mapping.local_name == "svc"
            && mapping.exported_name == "services"
            && mapping.source == "crate"
    }));
}

#[test]
fn should_extract_python_import_mappings() {
    let content = r#"
from utils import helper
from .models import User
import os
from ..services import auth_service
"#;

    let mappings = extract_import_mappings("src/main.py", content, Language::Python);

    assert!(!mappings.is_empty());
    assert!(
        mappings
            .iter()
            .any(|mapping| mapping.local_name == "helper")
    );
    assert!(mappings.iter().any(|mapping| mapping.local_name == "User"));
}