#[test]
fn test_python_language_detection() {
let language = llmgrep::query::infer_language("src/test.py");
assert_eq!(language, Some("Python"));
}
#[test]
fn test_javascript_language_detection() {
let language = llmgrep::query::infer_language("src/test.js");
assert_eq!(language, Some("JavaScript"));
let language_jsx = llmgrep::query::infer_language("src/component.jsx");
assert_eq!(language_jsx, Some("JavaScript"));
}
#[test]
fn test_typescript_language_detection() {
let language = llmgrep::query::infer_language("src/test.ts");
assert_eq!(language, Some("TypeScript"));
let language_tsx = llmgrep::query::infer_language("src/component.tsx");
assert_eq!(language_tsx, Some("TypeScript"));
}
#[test]
fn test_c_language_detection() {
let language = llmgrep::query::infer_language("src/test.c");
assert_eq!(language, Some("C"));
let language_h = llmgrep::query::infer_language("include/header.h");
assert_eq!(language_h, Some("C"));
}
#[test]
fn test_cpp_language_detection() {
let language = llmgrep::query::infer_language("src/test.cpp");
assert_eq!(language, Some("C++"));
let language_cc = llmgrep::query::infer_language("src/test.cc");
assert_eq!(language_cc, Some("C++"));
let language_cxx = llmgrep::query::infer_language("src/test.cxx");
assert_eq!(language_cxx, Some("C++"));
let language_hpp = llmgrep::query::infer_language("include/header.hpp");
assert_eq!(language_hpp, Some("C++"));
}
#[test]
fn test_java_language_detection() {
let language = llmgrep::query::infer_language("src/Test.java");
assert_eq!(language, Some("Java"));
}
#[test]
fn test_rust_language_detection() {
let language = llmgrep::query::infer_language("src/test.rs");
assert_eq!(language, Some("Rust"));
}
#[test]
fn test_unknown_language_detection() {
let language = llmgrep::query::infer_language("src/test.unknown");
assert_eq!(language, None);
let language_no_ext = llmgrep::query::infer_language("src/Makefile");
assert_eq!(language_no_ext, None);
}
#[test]
fn test_all_supported_extensions() {
let extensions = vec![
("test.rs", "Rust"),
("test.py", "Python"),
("test.js", "JavaScript"),
("test.jsx", "JavaScript"),
("test.ts", "TypeScript"),
("test.tsx", "TypeScript"),
("test.c", "C"),
("test.cpp", "C++"),
("test.cc", "C++"),
("test.cxx", "C++"),
("test.h", "C"),
("test.hpp", "C++"),
("test.hxx", "C++"),
("test.java", "Java"),
("test.go", "Go"),
("test.rb", "Ruby"),
("test.php", "PHP"),
("test.swift", "Swift"),
("test.kt", "Kotlin"),
("test.kts", "Kotlin"),
("test.scala", "Scala"),
("test.sh", "Shell"),
("test.bash", "Shell"),
("test.lua", "Lua"),
("test.r", "R"),
("test.m", "Matlab"),
("test.cs", "C#"),
];
for (file, expected) in extensions {
let result = llmgrep::query::infer_language(&format!("src/{}", file));
assert_eq!(result, Some(expected), "Failed for {}.{}", file, expected);
}
}
#[test]
fn test_language_consistency() {
let test_cases = vec![
("file.rs", "Rust"),
("file.py", "Python"),
("file.js", "JavaScript"),
("file.ts", "TypeScript"),
("file.tsx", "TypeScript"),
("file.jsx", "JavaScript"),
("file.c", "C"),
("file.cpp", "C++"),
("file.java", "Java"),
];
for (file, expected) in test_cases {
let result = llmgrep::query::infer_language(file);
assert_eq!(
result,
Some(expected),
"Language mismatch for {}: got {:?}, expected {}",
file,
result,
expected
);
}
}
#[test]
fn test_language_detection_with_paths() {
let test_cases = vec![
("src/lib/module/test.py", "Python"),
("../../components/Header.tsx", "TypeScript"),
("/usr/local/include/header.h", "C"),
("./src/main.rs", "Rust"),
("vendor/bundle/ruby/gem.rb", "Ruby"),
];
for (path, expected) in test_cases {
let result = llmgrep::query::infer_language(path);
assert_eq!(
result,
Some(expected),
"Language mismatch for {}: got {:?}, expected {}",
path,
result,
expected
);
}
}
#[test]
fn test_language_detection_case_sensitivity() {
let test_cases: Vec<(&str, Option<&str>)> = vec![
("test.PY", None), ("test.Py", None), ("test.py", Some("Python")), ("test.RS", None),
("test.rs", Some("Rust")),
];
for (file, expected) in test_cases {
let result = llmgrep::query::infer_language(file);
assert_eq!(
result, expected,
"Language mismatch for {}: got {:?}, expected {:?}",
file, result, expected
);
}
}
#[test]
fn test_language_detection_with_multiple_dots() {
let test_cases: Vec<(&str, Option<&str>)> = vec![
("test.min.js", Some("JavaScript")),
("component.dev.tsx", Some("TypeScript")),
("lib.so.1.0.0", None), ("archive.tar.gz", None), ];
for (file, expected) in test_cases {
let result = llmgrep::query::infer_language(file);
assert_eq!(
result, expected,
"Language mismatch for {}: got {:?}, expected {:?}",
file, result, expected
);
}
}
#[test]
fn test_language_detection_edge_cases() {
assert_eq!(llmgrep::query::infer_language(""), None);
assert_eq!(llmgrep::query::infer_language("."), None);
assert_eq!(llmgrep::query::infer_language(".."), None);
assert_eq!(llmgrep::query::infer_language("file."), None); assert_eq!(llmgrep::query::infer_language(".hidden"), None); }
#[test]
fn test_no_debug_strings_in_code() {
use std::fs;
use std::path::Path;
let sqlite_path = Path::new("src/backend/sqlite.rs");
if sqlite_path.exists() {
let content = fs::read_to_string(sqlite_path).expect("failed to read test file");
assert!(
!content.contains("eprintln!(\"DEBUG:"),
"sqlite.rs should not contain eprintln DEBUG statements"
);
}
}