use jbuild::checkstyle::api::ast::DetailAst;
use jbuild::checkstyle::api::file::{FileContents, FileText};
use jbuild::checkstyle::parser::java_parser::JavaParser;
use std::path::PathBuf;
#[test]
fn test_java_parser_simple_class() {
let java_code = "public class Test {}";
let file_text = FileText::new(PathBuf::from("Test.java"), java_code.to_string());
let file_contents = FileContents::new(file_text);
let result = JavaParser::parse(&file_contents);
assert!(result.is_ok(), "Should parse simple class");
let ast = result.unwrap();
assert_eq!(
ast.get_type(),
jbuild::checkstyle::api::ast::token_types::COMPILATION_UNIT,
"Root should be COMPILATION_UNIT"
);
}
#[test]
fn test_java_parser_with_package() {
let java_code = "package com.example; public class Test {}";
let file_text = FileText::new(PathBuf::from("Test.java"), java_code.to_string());
let file_contents = FileContents::new(file_text);
let result = JavaParser::parse(&file_contents);
assert!(result.is_ok(), "Should parse class with package");
let ast = result.unwrap();
let package = ast.find_first_token_arc(jbuild::checkstyle::api::ast::token_types::PACKAGE_DEF);
assert!(package.is_some(), "Should find package definition");
}
#[test]
fn test_java_parser_with_imports() {
let java_code = r#"
import java.util.List;
import java.util.Map;
public class Test {}
"#;
let file_text = FileText::new(PathBuf::from("Test.java"), java_code.to_string());
let file_contents = FileContents::new(file_text);
let result = JavaParser::parse(&file_contents);
assert!(result.is_ok(), "Should parse class with imports");
}
#[test]
fn test_java_parser_with_method() {
let java_code = r#"
public class Test {
public void test() {
System.out.println("test");
}
}
"#;
let file_text = FileText::new(PathBuf::from("Test.java"), java_code.to_string());
let file_contents = FileContents::new(file_text);
let result = JavaParser::parse(&file_contents);
assert!(result.is_ok(), "Should parse class with method");
let ast = result.unwrap();
let method = ast.find_first_token_arc(jbuild::checkstyle::api::ast::token_types::METHOD_DEF);
assert!(method.is_some(), "Should find method definition");
}
#[test]
fn test_java_parser_invalid_syntax() {
let java_code = "public class {"; let file_text = FileText::new(PathBuf::from("Test.java"), java_code.to_string());
let file_contents = FileContents::new(file_text);
let _result = JavaParser::parse(&file_contents);
assert!(true, "Parser should handle invalid syntax gracefully");
}
#[test]
fn test_java_parser_empty_file() {
let java_code = "";
let file_text = FileText::new(PathBuf::from("Test.java"), java_code.to_string());
let file_contents = FileContents::new(file_text);
let _result = JavaParser::parse(&file_contents);
assert!(true, "Parser should handle empty file");
}
#[test]
fn test_java_parser_complex_class() {
let java_code = r#"
package com.example;
import java.util.List;
import java.util.Map;
public class Test {
private int field;
public Test() {
this.field = 0;
}
public void method(int param) {
if (param > 0) {
System.out.println("positive");
} else {
System.out.println("non-positive");
}
}
}
"#;
let file_text = FileText::new(PathBuf::from("Test.java"), java_code.to_string());
let file_contents = FileContents::new(file_text);
let result = JavaParser::parse(&file_contents);
assert!(result.is_ok(), "Should parse complex class");
let ast = result.unwrap();
assert!(
ast.find_first_token_arc(jbuild::checkstyle::api::ast::token_types::PACKAGE_DEF)
.is_some(),
"Should find package"
);
assert!(
ast.find_first_token_arc(jbuild::checkstyle::api::ast::token_types::CLASS_DEF)
.is_some(),
"Should find class"
);
}