devscout-rs 0.10.0

Fast code index for C# and TypeScript codebases -- map, find, refs, impact from the CLI.
use super::*;

#[test]
fn module_resolution_ac_4_declared_output_maps_to_indexed_source() {
    let outputs = BuildOutputs {
        mappings: HashMap::from([(
            "packages/a".into(),
            Mapping {
                out_dir: "packages/a/dist".into(),
                root_dir: Some("packages/a/src".into()),
            },
        )]),
        refused: vec![],
    };
    let files = HashSet::from(["packages/a/src/index.ts", "packages/a/dist/index.js"]);
    assert_eq!(
        outputs
            .source("packages/a", "packages/a/dist/index.js", &files)
            .as_deref(),
        Some("packages/a/src/index.ts")
    );
    assert!(outputs
        .source("packages/a", "packages/a/other/index.js", &files)
        .is_none());
    assert!(!outputs.covers("packages/a", "packages/a/other/index.js"));
}

#[test]
fn module_resolution_ac_4_output_extensions_follow_typescript_inputs() {
    let outputs = BuildOutputs {
        mappings: HashMap::from([(
            "a".into(),
            Mapping {
                out_dir: "a/dist".into(),
                root_dir: Some("a/src".into()),
            },
        )]),
        refused: vec![],
    };
    let files = HashSet::from(["a/src/one.mts", "a/src/two.cts"]);
    assert_eq!(
        outputs.source("a", "a/dist/one.mjs", &files).as_deref(),
        Some("a/src/one.mts")
    );
    assert_eq!(
        outputs.source("a", "a/dist/two.cjs", &files).as_deref(),
        Some("a/src/two.cts")
    );
}

#[test]
fn module_resolution_ac_4_outdir_without_root_reports_missing_mapping() {
    let outputs = BuildOutputs {
        mappings: HashMap::from([(
            "a".into(),
            Mapping {
                out_dir: "a/dist".into(),
                root_dir: None,
            },
        )]),
        refused: vec![],
    };
    let files = HashSet::from(["a/src/index.ts"]);
    assert!(outputs.covers("a", "a/dist/index.js"));
    assert!(outputs.source("a", "a/dist/index.js", &files).is_none());
}