| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- use std::path::PathBuf;
- use tempfile::TempDir;
- #[test]
- fn test_scanner_finds_all_sample_files() {
- let samples_dir = PathBuf::from("tests/samples");
- let scanner = codebase_summarizer::scanner::Scanner::default_config();
- let files = scanner.scan(&samples_dir).unwrap();
- assert!(files.len() >= 12, "Should find at least 12 sample files");
- }
- #[test]
- fn test_parse_go_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.go");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::GoParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Go);
- assert!(summary.symbols.len() >= 4, "Should find functions, structs, const");
- }
- #[test]
- fn test_parse_rust_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.rs");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::RustParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Rust);
- assert!(summary.symbols.len() >= 5, "Should find struct, functions, const, type");
- }
- #[test]
- fn test_parse_python_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.py");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::PythonParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Python);
- assert!(summary.symbols.len() >= 3, "Should find functions and class");
- }
- #[test]
- fn test_parse_dart_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.dart");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::DartParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Dart);
- assert!(summary.symbols.len() >= 4, "Should find class, enum, methods");
- }
- #[test]
- fn test_parse_typescript_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.ts");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::TypeScriptParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::TypeScript);
- assert!(summary.symbols.len() >= 5, "Should find class, interface, type, enum, const");
- }
- #[test]
- fn test_parse_r_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.r");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::RParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::R);
- assert!(summary.symbols.len() >= 2, "Should find function and class");
- }
- #[test]
- fn test_parse_java_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.java");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::GenericParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Java);
- assert!(summary.symbols.len() >= 3, "Should find class, interface, enum");
- }
- #[test]
- fn test_parse_c_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.c");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::GenericParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::C);
- assert!(summary.symbols.len() >= 3, "Should find struct, functions, const");
- }
- #[test]
- fn test_parse_ruby_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.rb");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::GenericParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Ruby);
- assert!(summary.symbols.len() >= 2, "Should find class and module");
- }
- #[test]
- fn test_parse_php_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.php");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::GenericParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Php);
- assert!(summary.symbols.len() >= 2, "Should find class and interface");
- }
- #[test]
- fn test_parse_swift_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.swift");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::GenericParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Swift);
- assert!(summary.symbols.len() >= 2, "Should find struct and func");
- }
- #[test]
- fn test_parse_kotlin_sample() {
- use codebase_summarizer::parser::LanguageParser;
- let path = PathBuf::from("tests/samples/sample.kt");
- let content = std::fs::read_to_string(&path).unwrap();
- let parser = codebase_summarizer::parser::GenericParser;
- let summary = parser.parse(&path, &content);
- assert_eq!(summary.language, codebase_summarizer::models::Language::Kotlin);
- assert!(summary.symbols.len() >= 3, "Should find data class, functions, enum");
- }
- #[test]
- fn test_parser_factory() {
- use codebase_summarizer::parser::{get_parser, LanguageParser};
- let go_parser = get_parser(&codebase_summarizer::models::Language::Go);
- let rust_parser = get_parser(&codebase_summarizer::models::Language::Rust);
- let python_parser = get_parser(&codebase_summarizer::models::Language::Python);
- let generic_parser = get_parser(&codebase_summarizer::models::Language::Cpp);
- assert!(go_parser.parse(&PathBuf::from("test.go"), "").language == codebase_summarizer::models::Language::Go);
- assert!(rust_parser.parse(&PathBuf::from("test.rs"), "").language == codebase_summarizer::models::Language::Rust);
- assert!(python_parser.parse(&PathBuf::from("test.py"), "").language == codebase_summarizer::models::Language::Python);
- assert!(generic_parser.parse(&PathBuf::from("test.cpp"), "").language == codebase_summarizer::models::Language::Cpp);
- }
- #[test]
- fn test_writer_generates_markdown() {
- use codebase_summarizer::models::{CodebaseSummary, FileSummary, Symbol, SymbolKind};
- use codebase_summarizer::writer::MarkdownWriter;
- let temp_dir = TempDir::new().unwrap();
- let output_path = temp_dir.path().join("summary.md");
- let symbols = vec![
- Symbol {
- kind: SymbolKind::Function,
- name: "test_func".to_string(),
- signature: "fn test_func()".to_string(),
- doc: Some("Test function".to_string()),
- line: 1,
- },
- ];
- let file_summary = FileSummary {
- path: PathBuf::from("test.rs"),
- language: codebase_summarizer::models::Language::Rust,
- symbols,
- };
- let summary = CodebaseSummary::new(temp_dir.path().to_path_buf());
- let mut summary = summary;
- summary.add_file(file_summary);
- let writer = MarkdownWriter::new();
- writer.write_summary(&summary, &output_path).unwrap();
- assert!(output_path.exists());
- let content = std::fs::read_to_string(&output_path).unwrap();
- assert!(content.contains("test_func"));
- }
- #[test]
- fn test_language_from_extension() {
- use codebase_summarizer::models::Language;
- assert_eq!(Language::from_extension("go"), Language::Go);
- assert_eq!(Language::from_extension("rs"), Language::Rust);
- assert_eq!(Language::from_extension("py"), Language::Python);
- assert_eq!(Language::from_extension("dart"), Language::Dart);
- assert_eq!(Language::from_extension("ts"), Language::TypeScript);
- assert_eq!(Language::from_extension("r"), Language::R);
- assert_eq!(Language::from_extension("R"), Language::R);
- assert_eq!(Language::from_extension("java"), Language::Java);
- assert_eq!(Language::from_extension("c"), Language::C);
- assert_eq!(Language::from_extension("cpp"), Language::Cpp);
- assert_eq!(Language::from_extension("rb"), Language::Ruby);
- assert_eq!(Language::from_extension("php"), Language::Php);
- assert_eq!(Language::from_extension("swift"), Language::Swift);
- assert_eq!(Language::from_extension("kt"), Language::Kotlin);
- assert_eq!(Language::from_extension("unknown"), Language::Unknown);
- }
|