probe_code/language/
test_detection.rs1use std::path::Path;
2
3pub fn is_test_file(path: &Path) -> bool {
5 let _debug_mode = std::env::var("DEBUG").unwrap_or_default() == "1";
6
7 if let Some(file_name) = path.file_name().and_then(|f| f.to_str()) {
9 if file_name.ends_with("_test.rs")
11 || file_name.ends_with("_tests.rs")
12 || file_name.starts_with("test_")
13 || file_name == "tests.rs"
14 {
15 if _debug_mode {
16 println!("DEBUG: Test file detected (Rust pattern): {file_name}");
17 }
18 return true;
19 }
20
21 if file_name.ends_with(".test.js")
23 || file_name.ends_with(".spec.js")
24 || file_name.ends_with(".test.jsx")
25 || file_name.ends_with(".spec.jsx")
26 || file_name.ends_with(".test.ts")
27 || file_name.ends_with(".spec.ts")
28 || file_name.ends_with(".test.tsx")
29 || file_name.ends_with(".spec.tsx")
30 {
31 if _debug_mode {
32 println!("DEBUG: Test file detected (JS/TS pattern): {file_name}");
33 }
34 return true;
35 }
36
37 if file_name.starts_with("test_") && file_name.ends_with(".py")
39 || file_name.ends_with("_test.py")
40 {
41 if _debug_mode {
42 println!("DEBUG: Test file detected (Python pattern): {file_name}");
43 }
44 return true;
45 }
46
47 if file_name.ends_with("_test.go") {
49 if _debug_mode {
50 println!("DEBUG: Test file detected (Go pattern): {file_name}");
51 }
52 return true;
53 }
54
55 if (file_name.starts_with("test_")
57 || file_name.ends_with("_test.c")
58 || file_name.ends_with("_tests.c"))
59 && (file_name.ends_with(".c") || file_name.ends_with(".h"))
60 || (file_name.starts_with("test_")
61 || file_name.ends_with("_test.cpp")
62 || file_name.ends_with("_tests.cpp"))
63 && (file_name.ends_with(".cpp")
64 || file_name.ends_with(".hpp")
65 || file_name.ends_with(".cc")
66 || file_name.ends_with(".hxx")
67 || file_name.ends_with(".cxx"))
68 {
69 if _debug_mode {
70 println!("DEBUG: Test file detected (C/C++ pattern): {file_name}");
71 }
72 return true;
73 }
74
75 if file_name.ends_with("Test.java")
77 || file_name.starts_with("Test") && file_name.ends_with(".java")
78 {
79 if _debug_mode {
80 println!("DEBUG: Test file detected (Java pattern): {file_name}");
81 }
82 return true;
83 }
84
85 if file_name.starts_with("test_") && file_name.ends_with(".rb")
87 || file_name.ends_with("_test.rb")
88 || file_name.ends_with("_spec.rb")
89 {
90 if _debug_mode {
91 println!("DEBUG: Test file detected (Ruby pattern): {file_name}");
92 }
93 return true;
94 }
95
96 if file_name.ends_with("Test.php")
98 || file_name.starts_with("Test") && file_name.ends_with(".php")
99 {
100 if _debug_mode {
101 println!("DEBUG: Test file detected (PHP pattern): {file_name}");
102 }
103 return true;
104 }
105 }
106
107 let path_str = path.to_string_lossy();
109
110 if path_str.contains("/test/")
112 || path_str.contains("/tests/")
113 || path_str.contains("/spec/")
114 || path_str.contains("/specs/")
115 || path_str.contains("/__tests__/")
116 || path_str.contains("/__test__/")
117 {
118 if _debug_mode {
119 println!("DEBUG: Test file detected (in test directory): {path_str}");
120 }
121 return true;
122 }
123
124 false
125}