#[test]
fn test_is_reference_match_name() {
let deps = CrossLanguageDependencies::new();
let source = create_test_node(
"Java:class:A",
NodeKind::Class,
"A",
"com.example.A",
Language::Java,
);
let target = create_test_node(
"Kotlin:class:Shared",
NodeKind::Class,
"Shared",
"pkg.Shared",
Language::Kotlin,
);
let reference = crate::ast::polyglot::unified_node::NodeReference {
kind: ReferenceKind::Uses,
target_id: String::new(),
target_name: "Shared".to_string(),
target_language: None,
};
assert!(deps.is_reference_match(
&source,
&reference,
&target,
Language::Java,
Language::Kotlin,
));
}
#[test]
fn test_is_reference_match_fqn() {
let deps = CrossLanguageDependencies::new();
let source = create_test_node(
"Java:class:A",
NodeKind::Class,
"A",
"com.example.A",
Language::Java,
);
let target = create_test_node(
"Kotlin:module:Mod",
NodeKind::Module,
"Mod",
"com.example.Shared",
Language::Kotlin,
);
let reference = crate::ast::polyglot::unified_node::NodeReference {
kind: ReferenceKind::Imports,
target_id: String::new(),
target_name: "com.example.Shared".to_string(),
target_language: None,
};
assert!(deps.is_reference_match(
&source,
&reference,
&target,
Language::Java,
Language::Kotlin,
));
}
#[test]
fn test_is_reference_match_none() {
let deps = CrossLanguageDependencies::new();
let source = create_test_node(
"Python:class:Foo",
NodeKind::Class,
"Foo",
"pkg.Foo",
Language::Python,
);
let target = create_test_node(
"Python:class:Bar",
NodeKind::Class,
"Bar",
"pkg.Bar",
Language::Python,
);
let reference = crate::ast::polyglot::unified_node::NodeReference {
kind: ReferenceKind::Uses,
target_id: "OtherId".to_string(),
target_name: "OtherName".to_string(),
target_language: None,
};
assert!(!deps.is_reference_match(
&source,
&reference,
&target,
Language::Python,
Language::Python,
));
}
#[test]
fn test_is_reference_match_resolver() {
let mut deps = CrossLanguageDependencies::new();
let source = create_test_node(
"Java:class:Foo",
NodeKind::Class,
"Foo",
"com.example.Foo",
Language::Java,
);
let target = create_test_node(
"Kotlin:class:FooImpl",
NodeKind::Class,
"FooImpl",
"com.example.Foo",
Language::Kotlin,
);
let reference = crate::ast::polyglot::unified_node::NodeReference {
kind: ReferenceKind::Uses,
target_id: String::new(),
target_name: "com.example.Foo".to_string(),
target_language: Some(Language::Kotlin),
};
deps.add_name_resolver(Language::Java, Box::new(JavaKotlinResolver));
let reference_no_name = crate::ast::polyglot::unified_node::NodeReference {
kind: ReferenceKind::Uses,
target_id: String::new(),
target_name: String::new(),
target_language: Some(Language::Kotlin),
};
let resolver_matched = deps.is_reference_match(
&source,
&reference_no_name,
&target,
Language::Java,
Language::Kotlin,
);
let name_matched = deps.is_reference_match(
&source,
&reference,
&target,
Language::Java,
Language::Kotlin,
);
assert!(
resolver_matched || name_matched,
"resolver or name path must match"
);
}