fn create_test_ast_item(kind: &str, name: &str) -> AstItem {
match kind {
"function" | "method" => AstItem::Function {
name: name.to_string(),
visibility: "public".to_string(),
is_async: false,
line: 1,
},
"class" | "struct" => AstItem::Struct {
name: name.to_string(),
visibility: "public".to_string(),
fields_count: 0,
derives: vec![],
line: 1,
},
"trait" | "interface" => AstItem::Trait {
name: name.to_string(),
visibility: "public".to_string(),
line: 1,
},
"enum" => AstItem::Enum {
name: name.to_string(),
visibility: "public".to_string(),
variants_count: 0,
line: 1,
},
"module" | "namespace" => AstItem::Module {
name: name.to_string(),
visibility: "public".to_string(),
line: 1,
},
_ => AstItem::Struct {
name: name.to_string(),
visibility: "public".to_string(),
fields_count: 0,
derives: vec![],
line: 1,
},
}
}
#[test]
fn test_language_mapper_factory() {
let java_mapper = LanguageMapperFactory::create(Language::Java);
assert!(java_mapper.is_ok());
assert_eq!(java_mapper.unwrap().language(), Language::Java);
let scala_mapper = LanguageMapperFactory::create(Language::Scala);
assert!(scala_mapper.is_ok());
assert_eq!(scala_mapper.unwrap().language(), Language::Scala);
let unsupported = LanguageMapperFactory::create(Language::Other(0));
assert!(unsupported.is_err());
let file_path = Path::new("test.java");
let file_mapper = LanguageMapperFactory::create_for_file(file_path);
assert!(file_mapper.is_ok());
assert_eq!(file_mapper.unwrap().language(), Language::Java);
}
#[test]
fn test_convert_ast_items() {
let java_mapper = JavaMapper::new();
let file_path = Path::new("/path/to/Test.java");
let items = vec![
create_test_ast_item("class", "TestClass"),
create_test_ast_item("method", "testMethod"),
];
let nodes = java_mapper.convert_ast_items(&items, file_path);
assert_eq!(nodes.len(), 2);
assert_eq!(nodes[0].kind, NodeKind::Struct); assert_eq!(nodes[0].name, "TestClass");
assert_eq!(nodes[1].kind, NodeKind::Function); assert_eq!(nodes[1].name, "testMethod");
}