@@ -166,28 +166,48 @@ private boolean isTestMethod(MethodDeclaration md) {
166166 private List <Path > findAllTestDirectories (Path projectRoot ) {
167167 List <Path > testDirectories = new ArrayList <>();
168168
169+ System .out .println ("DEBUG: Starting directory search from: " + projectRoot );
170+ System .out .println ("DEBUG: Project root exists: " + Files .exists (projectRoot ));
171+ System .out .println ("DEBUG: Project root is directory: " + Files .isDirectory (projectRoot ));
172+ System .out .println ("DEBUG: Project root is readable: " + Files .isReadable (projectRoot ));
173+
174+ // Check if basic src/test/java structure exists
175+ Path srcTestJava = projectRoot .resolve ("src" ).resolve ("test" ).resolve ("java" );
176+ System .out .println ("DEBUG: Standard test path: " + srcTestJava );
177+ System .out .println ("DEBUG: Standard test path exists: " + Files .exists (srcTestJava ));
178+ System .out .println ("DEBUG: Standard test path is directory: " + Files .isDirectory (srcTestJava ));
179+
169180 try (Stream <Path > paths = Files .walk (projectRoot )) {
170181 List <Path > candidateDirectories = paths .filter (Files ::isDirectory )
171182 .filter (this ::isTestDirectory )
172183 .collect (java .util .stream .Collectors .toList ());
173184
185+ System .out .println ("DEBUG: Found " + candidateDirectories .size () + " candidate test directories" );
186+ for (Path candidate : candidateDirectories ) {
187+ System .out .println ("DEBUG: Candidate: " + candidate );
188+ }
189+
174190 // Remove nested directories - only keep the most specific src/test/java directories
175191 for (Path candidate : candidateDirectories ) {
176192 boolean isNested = false ;
177193 for (Path other : candidateDirectories ) {
178194 if (!candidate .equals (other ) && candidate .startsWith (other )) {
179195 isNested = true ;
196+ System .out .println ("DEBUG: " + candidate + " is nested under " + other + ", skipping" );
180197 break ;
181198 }
182199 }
183200 if (!isNested ) {
184201 testDirectories .add (candidate );
202+ System .out .println ("DEBUG: Adding final test directory: " + candidate );
185203 }
186204 }
187205 } catch (IOException e ) {
188206 System .err .println ("Error walking project directory: " + e .getMessage ());
207+ e .printStackTrace ();
189208 }
190209
210+ System .out .println ("DEBUG: Final test directories count: " + testDirectories .size ());
191211 return testDirectories ;
192212 }
193213
@@ -198,30 +218,44 @@ private boolean isTestDirectory(Path dir) {
198218 String dirName = dir .getFileName ().toString ();
199219 String pathString = dir .toString ();
200220
221+ // Normalize path separators for cross-platform compatibility
222+ String normalizedPath = pathString .replace ('\\' , '/' );
223+
224+ // Debug output for troubleshooting
225+ if (pathString .contains ("test" ) && pathString .contains ("java" )) {
226+ System .out .println ("DEBUG: Checking potential test directory: " + pathString );
227+ System .out .println ("DEBUG: Normalized path: " + normalizedPath );
228+ System .out .println ("DEBUG: Dir name: " + dirName );
229+ }
230+
201231 // Skip hidden directories and common non-source directories
202232 if (dirName .startsWith ("." ) ||
203- pathString .contains ("/." ) ||
204- pathString .contains ("/target/" ) ||
205- pathString .contains ("/build/" ) ||
206- pathString .contains ("/bin/" ) ||
207- pathString .contains ("/out/" ) ||
208- pathString .contains ("/node_modules/" ) ||
209- pathString .contains ("/.git/" ) ||
210- pathString .contains ("/.gradle/" ) ||
211- pathString .contains ("/.m2/" )) {
233+ normalizedPath .contains ("/." ) ||
234+ normalizedPath .contains ("/target/" ) ||
235+ normalizedPath .contains ("/build/" ) ||
236+ normalizedPath .contains ("/bin/" ) ||
237+ normalizedPath .contains ("/out/" ) ||
238+ normalizedPath .contains ("/node_modules/" ) ||
239+ normalizedPath .contains ("/.git/" ) ||
240+ normalizedPath .contains ("/.gradle/" ) ||
241+ normalizedPath .contains ("/.m2/" )) {
242+ if (pathString .contains ("test" ) && pathString .contains ("java" )) {
243+ System .out .println ("DEBUG: Skipped due to filter: " + normalizedPath );
244+ }
212245 return false ;
213246 }
214247
215- // Standard Maven/Gradle test directory patterns
216- if (pathString .endsWith ("/src/test/java" ) ||
217- pathString . endsWith ( " \\ src \\ test\\ java" )) {
248+ // Standard Maven/Gradle test directory patterns (cross-platform)
249+ if (normalizedPath .endsWith ("/src/test/java" )) {
250+ System . out . println ( "DEBUG: Found test directory (standard pattern): " + normalizedPath );
218251 return true ;
219252 }
220253
221254 // Additional test directory patterns for different project structures
222255 // Be more specific to avoid false positives
223- if (pathString .contains ("/src/test/" ) && pathString .endsWith ("/java" ) &&
224- !pathString .contains ("/build/" ) && !pathString .contains ("/target/" )) {
256+ if (normalizedPath .contains ("/src/test/" ) && normalizedPath .endsWith ("/java" ) &&
257+ !normalizedPath .contains ("/build/" ) && !normalizedPath .contains ("/target/" )) {
258+ System .out .println ("DEBUG: Found test directory (extended pattern): " + normalizedPath );
225259 return true ;
226260 }
227261
@@ -231,8 +265,9 @@ private boolean isTestDirectory(Path dir) {
231265 if (parent != null && parent .getFileName ().toString ().equals ("test" )) {
232266 Path srcParent = parent .getParent ();
233267 if (srcParent != null && srcParent .getFileName ().toString ().equals ("src" )) {
234- // Ensure it's not in a build directory
235- if (!pathString .contains ("/build/" ) && !pathString .contains ("/target/" ) && !pathString .contains ("/bin/" )) {
268+ // Ensure it's not in a build directory (using normalized path)
269+ if (!normalizedPath .contains ("/build/" ) && !normalizedPath .contains ("/target/" ) && !normalizedPath .contains ("/bin/" )) {
270+ System .out .println ("DEBUG: Found test directory (multi-module pattern): " + normalizedPath );
236271 return true ;
237272 }
238273 }
0 commit comments