10
10
11
11
package org .junit .platform .launcher .core ;
12
12
13
+ import static org .junit .platform .commons .util .UnrecoverableExceptions .rethrowIfUnrecoverable ;
13
14
import static org .junit .platform .engine .SelectorResolutionResult .Status .FAILED ;
14
15
import static org .junit .platform .engine .SelectorResolutionResult .Status .UNRESOLVED ;
15
16
@@ -77,7 +78,7 @@ else if (result.getStatus() == UNRESOLVED && selector instanceof UniqueIdSelecto
77
78
}
78
79
}
79
80
80
- static TestSource toSource (DiscoverySelector selector ) {
81
+ private static TestSource toSource (DiscoverySelector selector ) {
81
82
if (selector instanceof ClassSelector ) {
82
83
return ClassSource .from (((ClassSelector ) selector ).getClassName ());
83
84
}
@@ -97,18 +98,27 @@ static TestSource toSource(DiscoverySelector selector) {
97
98
if (selector instanceof PackageSelector ) {
98
99
return PackageSource .from (((PackageSelector ) selector ).getPackageName ());
99
100
}
100
- if (selector instanceof FileSelector ) {
101
- FileSelector fileSelector = (FileSelector ) selector ;
102
- return fileSelector .getPosition () //
103
- .map (DiscoveryIssueCollector ::convert ) //
104
- .map (position -> FileSource .from (fileSelector .getFile (), position )) //
105
- .orElseGet (() -> FileSource .from (fileSelector .getFile ()));
106
- }
107
- if (selector instanceof DirectorySelector ) {
108
- return DirectorySource .from (((DirectorySelector ) selector ).getDirectory ());
101
+ try {
102
+ // Both FileSource and DirectorySource call File.getCanonicalFile() to normalize the reported file which
103
+ // can throw an exception for certain file names on certain file systems. UriSource.from(...) is affected
104
+ // as well because it may return a FileSource or DirectorySource
105
+ if (selector instanceof FileSelector ) {
106
+ FileSelector fileSelector = (FileSelector ) selector ;
107
+ return fileSelector .getPosition () //
108
+ .map (DiscoveryIssueCollector ::convert ) //
109
+ .map (position -> FileSource .from (fileSelector .getFile (), position )) //
110
+ .orElseGet (() -> FileSource .from (fileSelector .getFile ()));
111
+ }
112
+ if (selector instanceof DirectorySelector ) {
113
+ return DirectorySource .from (((DirectorySelector ) selector ).getDirectory ());
114
+ }
115
+ if (selector instanceof UriSelector ) {
116
+ return UriSource .from (((UriSelector ) selector ).getUri ());
117
+ }
109
118
}
110
- if (selector instanceof UriSelector ) {
111
- return UriSource .from (((UriSelector ) selector ).getUri ());
119
+ catch (Exception ex ) {
120
+ rethrowIfUnrecoverable (ex );
121
+ logger .warn (ex , () -> String .format ("Failed to convert DiscoverySelector [%s] into TestSource" , selector ));
112
122
}
113
123
return null ;
114
124
}
0 commit comments