#![cfg_attr(coverage_nightly, coverage(off))]
use crate::ast::polyglot::{Language, NodeKind};
use crate::services::context::AstItem;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::path::{Path, PathBuf};
include!("unified_node_types.rs");
include!("unified_node_impl.rs");
#[cfg(test)]
mod tests {
use super::*;
use crate::services::context::AstItem;
fn create_test_ast_item() -> AstItem {
AstItem::Struct {
name: "TestClass".to_string(),
visibility: "public".to_string(),
fields_count: 0,
derives: vec![],
line: 10,
}
}
#[test]
fn test_unified_node_from_ast_item() {
let ast_item = create_test_ast_item();
let file_path = Path::new("/path/to/TestClass.java");
let node = UnifiedNode::from_ast_item(&ast_item, Language::Java, file_path, None);
assert_eq!(node.id, "Java:struct:TestClass"); assert_eq!(node.kind, NodeKind::Struct);
assert_eq!(node.name, "TestClass");
assert_eq!(node.fqn, "TestClass"); assert_eq!(node.language, Language::Java);
assert_eq!(node.position.start_line, 10);
assert_eq!(node.position.end_line, 11); assert_eq!(node.access(), Some("public"));
}
#[test]
fn test_add_reference() {
let ast_item = create_test_ast_item();
let file_path = Path::new("/path/to/TestClass.java");
let mut node = UnifiedNode::from_ast_item(&ast_item, Language::Java, file_path, None);
node.add_reference(
ReferenceKind::Inherits,
"BaseClass".to_string(),
Some("Java:class:BaseClass".to_string()),
);
assert_eq!(node.references.len(), 1);
assert_eq!(node.references[0].kind, ReferenceKind::Inherits);
assert_eq!(node.references[0].target_name, "BaseClass");
assert_eq!(node.references[0].target_id, "Java:class:BaseClass");
let inherits_refs = node.get_references_by_kind(ReferenceKind::Inherits);
assert_eq!(inherits_refs.len(), 1);
assert_eq!(inherits_refs[0].target_name, "BaseClass");
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod coverage_tests {
use super::*;
use crate::services::context::AstItem;
include!("unified_node_coverage_tests_part1.rs");
include!("unified_node_coverage_tests_part2.rs");
}