8249095: tools/javac/launcher/SourceLauncherTest.java fails on Windows

Reviewed-by: jjg
This commit is contained in:
Jan Lahoda 2020-10-07 06:52:03 +00:00
parent bdd5782a67
commit cd4faff0ec
2 changed files with 29 additions and 8 deletions
test/langtools/tools
javac/launcher
lib/toolbox

@ -423,9 +423,9 @@ public class SourceLauncherTest extends TestRunner {
@Test
public void testNoSourceOnClassPath(Path base) throws IOException {
Path auxSrc = base.resolve("auxSrc");
tb.writeJavaFiles(auxSrc,
"public class Aux {\n" +
Path extraSrc = base.resolve("extraSrc");
tb.writeJavaFiles(extraSrc,
"public class Extra {\n" +
" static final String MESSAGE = \"Hello World\";\n" +
"}\n");
@ -434,18 +434,18 @@ public class SourceLauncherTest extends TestRunner {
"import java.util.Arrays;\n" +
"class HelloWorld {\n" +
" public static void main(String... args) {\n" +
" System.out.println(Aux.MESSAGE + Arrays.toString(args));\n" +
" System.out.println(Extra.MESSAGE + Arrays.toString(args));\n" +
" }\n" +
"}");
List<String> javacArgs = List.of("-classpath", auxSrc.toString());
List<String> javacArgs = List.of("-classpath", extraSrc.toString());
List<String> classArgs = List.of("1", "2", "3");
String FS = File.separator;
String expectStdErr =
"testNoSourceOnClassPath" + FS + "mainSrc" + FS + "HelloWorld.java:4: error: cannot find symbol\n" +
" System.out.println(Aux.MESSAGE + Arrays.toString(args));\n" +
" System.out.println(Extra.MESSAGE + Arrays.toString(args));\n" +
" ^\n" +
" symbol: variable Aux\n" +
" symbol: variable Extra\n" +
" location: class HelloWorld\n" +
"1 error\n";
Result r = run(mainSrc.resolve("HelloWorld.java"), javacArgs, classArgs);

@ -676,12 +676,15 @@ public class ToolBox {
return "module-info.java";
matcher = packagePattern.matcher(source);
if (matcher.find())
if (matcher.find()) {
packageName = matcher.group(1).replace(".", "/");
validateName(packageName);
}
matcher = classPattern.matcher(source);
if (matcher.find()) {
String className = matcher.group(1) + ".java";
validateName(className);
return (packageName == null) ? className : packageName + "/" + className;
} else if (packageName != null) {
return packageName + "/package-info.java";
@ -706,6 +709,24 @@ public class ToolBox {
return JavaSource.getJavaFileNameFromSource(source);
}
private static final Set<String> RESERVED_NAMES = Set.of(
"con", "prn", "aux", "nul",
"com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9",
"lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9"
);
/**Validate if a given name is a valid file name
* or path name on known platforms.
*/
public static void validateName(String name) {
for (String part : name.split("\\.|/|\\\\")) {
if (RESERVED_NAMES.contains(part.toLowerCase(Locale.US))) {
throw new IllegalArgumentException("Name: " + name + " is" +
"a reserved name on Windows, " +
"and will not work!");
}
}
}
/**
* A memory file manager, for saving generated files in memory.
* The file manager delegates to a separate file manager for listing and