integration_tests.rs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. use std::path::PathBuf;
  2. use tempfile::TempDir;
  3. #[test]
  4. fn test_scanner_finds_all_sample_files() {
  5. let samples_dir = PathBuf::from("tests/samples");
  6. let scanner = codebase_summarizer::scanner::Scanner::default_config();
  7. let files = scanner.scan(&samples_dir).unwrap();
  8. assert!(files.len() >= 12, "Should find at least 12 sample files");
  9. }
  10. #[test]
  11. fn test_parse_go_sample() {
  12. use codebase_summarizer::parser::LanguageParser;
  13. let path = PathBuf::from("tests/samples/sample.go");
  14. let content = std::fs::read_to_string(&path).unwrap();
  15. let parser = codebase_summarizer::parser::GoParser;
  16. let summary = parser.parse(&path, &content);
  17. assert_eq!(summary.language, codebase_summarizer::models::Language::Go);
  18. assert!(summary.symbols.len() >= 4, "Should find functions, structs, const");
  19. }
  20. #[test]
  21. fn test_parse_rust_sample() {
  22. use codebase_summarizer::parser::LanguageParser;
  23. let path = PathBuf::from("tests/samples/sample.rs");
  24. let content = std::fs::read_to_string(&path).unwrap();
  25. let parser = codebase_summarizer::parser::RustParser;
  26. let summary = parser.parse(&path, &content);
  27. assert_eq!(summary.language, codebase_summarizer::models::Language::Rust);
  28. assert!(summary.symbols.len() >= 5, "Should find struct, functions, const, type");
  29. }
  30. #[test]
  31. fn test_parse_python_sample() {
  32. use codebase_summarizer::parser::LanguageParser;
  33. let path = PathBuf::from("tests/samples/sample.py");
  34. let content = std::fs::read_to_string(&path).unwrap();
  35. let parser = codebase_summarizer::parser::PythonParser;
  36. let summary = parser.parse(&path, &content);
  37. assert_eq!(summary.language, codebase_summarizer::models::Language::Python);
  38. assert!(summary.symbols.len() >= 3, "Should find functions and class");
  39. }
  40. #[test]
  41. fn test_parse_dart_sample() {
  42. use codebase_summarizer::parser::LanguageParser;
  43. let path = PathBuf::from("tests/samples/sample.dart");
  44. let content = std::fs::read_to_string(&path).unwrap();
  45. let parser = codebase_summarizer::parser::DartParser;
  46. let summary = parser.parse(&path, &content);
  47. assert_eq!(summary.language, codebase_summarizer::models::Language::Dart);
  48. assert!(summary.symbols.len() >= 4, "Should find class, enum, methods");
  49. }
  50. #[test]
  51. fn test_parse_typescript_sample() {
  52. use codebase_summarizer::parser::LanguageParser;
  53. let path = PathBuf::from("tests/samples/sample.ts");
  54. let content = std::fs::read_to_string(&path).unwrap();
  55. let parser = codebase_summarizer::parser::TypeScriptParser;
  56. let summary = parser.parse(&path, &content);
  57. assert_eq!(summary.language, codebase_summarizer::models::Language::TypeScript);
  58. assert!(summary.symbols.len() >= 5, "Should find class, interface, type, enum, const");
  59. }
  60. #[test]
  61. fn test_parse_r_sample() {
  62. use codebase_summarizer::parser::LanguageParser;
  63. let path = PathBuf::from("tests/samples/sample.r");
  64. let content = std::fs::read_to_string(&path).unwrap();
  65. let parser = codebase_summarizer::parser::RParser;
  66. let summary = parser.parse(&path, &content);
  67. assert_eq!(summary.language, codebase_summarizer::models::Language::R);
  68. assert!(summary.symbols.len() >= 2, "Should find function and class");
  69. }
  70. #[test]
  71. fn test_parse_java_sample() {
  72. use codebase_summarizer::parser::LanguageParser;
  73. let path = PathBuf::from("tests/samples/sample.java");
  74. let content = std::fs::read_to_string(&path).unwrap();
  75. let parser = codebase_summarizer::parser::GenericParser;
  76. let summary = parser.parse(&path, &content);
  77. assert_eq!(summary.language, codebase_summarizer::models::Language::Java);
  78. assert!(summary.symbols.len() >= 3, "Should find class, interface, enum");
  79. }
  80. #[test]
  81. fn test_parse_c_sample() {
  82. use codebase_summarizer::parser::LanguageParser;
  83. let path = PathBuf::from("tests/samples/sample.c");
  84. let content = std::fs::read_to_string(&path).unwrap();
  85. let parser = codebase_summarizer::parser::GenericParser;
  86. let summary = parser.parse(&path, &content);
  87. assert_eq!(summary.language, codebase_summarizer::models::Language::C);
  88. assert!(summary.symbols.len() >= 3, "Should find struct, functions, const");
  89. }
  90. #[test]
  91. fn test_parse_ruby_sample() {
  92. use codebase_summarizer::parser::LanguageParser;
  93. let path = PathBuf::from("tests/samples/sample.rb");
  94. let content = std::fs::read_to_string(&path).unwrap();
  95. let parser = codebase_summarizer::parser::GenericParser;
  96. let summary = parser.parse(&path, &content);
  97. assert_eq!(summary.language, codebase_summarizer::models::Language::Ruby);
  98. assert!(summary.symbols.len() >= 2, "Should find class and module");
  99. }
  100. #[test]
  101. fn test_parse_php_sample() {
  102. use codebase_summarizer::parser::LanguageParser;
  103. let path = PathBuf::from("tests/samples/sample.php");
  104. let content = std::fs::read_to_string(&path).unwrap();
  105. let parser = codebase_summarizer::parser::GenericParser;
  106. let summary = parser.parse(&path, &content);
  107. assert_eq!(summary.language, codebase_summarizer::models::Language::Php);
  108. assert!(summary.symbols.len() >= 2, "Should find class and interface");
  109. }
  110. #[test]
  111. fn test_parse_swift_sample() {
  112. use codebase_summarizer::parser::LanguageParser;
  113. let path = PathBuf::from("tests/samples/sample.swift");
  114. let content = std::fs::read_to_string(&path).unwrap();
  115. let parser = codebase_summarizer::parser::GenericParser;
  116. let summary = parser.parse(&path, &content);
  117. assert_eq!(summary.language, codebase_summarizer::models::Language::Swift);
  118. assert!(summary.symbols.len() >= 2, "Should find struct and func");
  119. }
  120. #[test]
  121. fn test_parse_kotlin_sample() {
  122. use codebase_summarizer::parser::LanguageParser;
  123. let path = PathBuf::from("tests/samples/sample.kt");
  124. let content = std::fs::read_to_string(&path).unwrap();
  125. let parser = codebase_summarizer::parser::GenericParser;
  126. let summary = parser.parse(&path, &content);
  127. assert_eq!(summary.language, codebase_summarizer::models::Language::Kotlin);
  128. assert!(summary.symbols.len() >= 3, "Should find data class, functions, enum");
  129. }
  130. #[test]
  131. fn test_parser_factory() {
  132. use codebase_summarizer::parser::{get_parser, LanguageParser};
  133. let go_parser = get_parser(&codebase_summarizer::models::Language::Go);
  134. let rust_parser = get_parser(&codebase_summarizer::models::Language::Rust);
  135. let python_parser = get_parser(&codebase_summarizer::models::Language::Python);
  136. let generic_parser = get_parser(&codebase_summarizer::models::Language::Cpp);
  137. assert!(go_parser.parse(&PathBuf::from("test.go"), "").language == codebase_summarizer::models::Language::Go);
  138. assert!(rust_parser.parse(&PathBuf::from("test.rs"), "").language == codebase_summarizer::models::Language::Rust);
  139. assert!(python_parser.parse(&PathBuf::from("test.py"), "").language == codebase_summarizer::models::Language::Python);
  140. assert!(generic_parser.parse(&PathBuf::from("test.cpp"), "").language == codebase_summarizer::models::Language::Cpp);
  141. }
  142. #[test]
  143. fn test_writer_generates_markdown() {
  144. use codebase_summarizer::models::{CodebaseSummary, FileSummary, Symbol, SymbolKind};
  145. use codebase_summarizer::writer::MarkdownWriter;
  146. let temp_dir = TempDir::new().unwrap();
  147. let output_path = temp_dir.path().join("summary.md");
  148. let symbols = vec![
  149. Symbol {
  150. kind: SymbolKind::Function,
  151. name: "test_func".to_string(),
  152. signature: "fn test_func()".to_string(),
  153. doc: Some("Test function".to_string()),
  154. line: 1,
  155. },
  156. ];
  157. let file_summary = FileSummary {
  158. path: PathBuf::from("test.rs"),
  159. language: codebase_summarizer::models::Language::Rust,
  160. symbols,
  161. };
  162. let summary = CodebaseSummary::new(temp_dir.path().to_path_buf());
  163. let mut summary = summary;
  164. summary.add_file(file_summary);
  165. let writer = MarkdownWriter::new();
  166. writer.write_summary(&summary, &output_path).unwrap();
  167. assert!(output_path.exists());
  168. let content = std::fs::read_to_string(&output_path).unwrap();
  169. assert!(content.contains("test_func"));
  170. }
  171. #[test]
  172. fn test_language_from_extension() {
  173. use codebase_summarizer::models::Language;
  174. assert_eq!(Language::from_extension("go"), Language::Go);
  175. assert_eq!(Language::from_extension("rs"), Language::Rust);
  176. assert_eq!(Language::from_extension("py"), Language::Python);
  177. assert_eq!(Language::from_extension("dart"), Language::Dart);
  178. assert_eq!(Language::from_extension("ts"), Language::TypeScript);
  179. assert_eq!(Language::from_extension("r"), Language::R);
  180. assert_eq!(Language::from_extension("R"), Language::R);
  181. assert_eq!(Language::from_extension("java"), Language::Java);
  182. assert_eq!(Language::from_extension("c"), Language::C);
  183. assert_eq!(Language::from_extension("cpp"), Language::Cpp);
  184. assert_eq!(Language::from_extension("rb"), Language::Ruby);
  185. assert_eq!(Language::from_extension("php"), Language::Php);
  186. assert_eq!(Language::from_extension("swift"), Language::Swift);
  187. assert_eq!(Language::from_extension("kt"), Language::Kotlin);
  188. assert_eq!(Language::from_extension("unknown"), Language::Unknown);
  189. }