3789983e89
Reviewed-by: darcy, ihse
94 lines
3.1 KiB
Java
94 lines
3.1 KiB
Java
|
|
/*
|
|
* @test /nodynamiccopyright/
|
|
* @bug 7144981
|
|
* @summary javac should ignore ignorable characters in input
|
|
* @modules jdk.compiler
|
|
* @run main IgnoreIgnorableCharactersInInput
|
|
*/
|
|
|
|
import com.sun.source.util.JavacTask;
|
|
import java.io.File;
|
|
import java.net.URI;
|
|
import java.util.Arrays;
|
|
import java.util.Set;
|
|
import java.util.TreeSet;
|
|
import javax.tools.JavaCompiler;
|
|
import javax.tools.JavaFileObject;
|
|
import javax.tools.SimpleJavaFileObject;
|
|
import javax.tools.ToolProvider;
|
|
|
|
public class IgnoreIgnorableCharactersInInput {
|
|
|
|
public static void main(String... args) throws Exception {
|
|
new IgnoreIgnorableCharactersInInput().run();
|
|
}
|
|
|
|
void run() throws Exception {
|
|
JavaCompiler comp = ToolProvider.getSystemJavaCompiler();
|
|
File classesDir = new File(System.getProperty("user.dir"), "classes");
|
|
classesDir.mkdirs();
|
|
JavaSource[] sources = new JavaSource[]{
|
|
new JavaSource("TestOneIgnorableChar", "AA\\u0000BB"),
|
|
new JavaSource("TestMultipleIgnorableChar", "AA\\u0000\\u0000\\u0000BB")};
|
|
JavacTask ct = (JavacTask)comp.getTask(null, null, null,
|
|
Arrays.asList("-d", classesDir.getPath()),
|
|
null, Arrays.asList(sources));
|
|
try {
|
|
if (!ct.call()) {
|
|
throw new AssertionError("Error thrown when compiling test cases");
|
|
}
|
|
} catch (Throwable ex) {
|
|
throw new AssertionError("Error thrown when compiling test cases");
|
|
}
|
|
check(classesDir,
|
|
"TestOneIgnorableChar.class",
|
|
"TestOneIgnorableChar$AABB.class",
|
|
"TestMultipleIgnorableChar.class",
|
|
"TestMultipleIgnorableChar$AABB.class");
|
|
if (errors > 0)
|
|
throw new AssertionError("There are some errors in the test check the error output");
|
|
}
|
|
|
|
/**
|
|
* Check that a directory contains the expected files.
|
|
*/
|
|
void check(File dir, String... paths) {
|
|
Set<String> found = new TreeSet<String>(Arrays.asList(dir.list()));
|
|
Set<String> expect = new TreeSet<String>(Arrays.asList(paths));
|
|
if (found.equals(expect))
|
|
return;
|
|
for (String f: found) {
|
|
if (!expect.contains(f))
|
|
error("Unexpected file found: " + f);
|
|
}
|
|
for (String e: expect) {
|
|
if (!found.contains(e))
|
|
error("Expected file not found: " + e);
|
|
}
|
|
}
|
|
|
|
int errors;
|
|
|
|
void error(String msg) {
|
|
System.err.println(msg);
|
|
errors++;
|
|
}
|
|
|
|
class JavaSource extends SimpleJavaFileObject {
|
|
|
|
String internalSource =
|
|
"public class #O {public class #I {} }";
|
|
public JavaSource(String outerClassName, String innerClassName) {
|
|
super(URI.create(outerClassName + ".java"), JavaFileObject.Kind.SOURCE);
|
|
internalSource =
|
|
internalSource.replace("#O", outerClassName).replace("#I", innerClassName);
|
|
}
|
|
|
|
@Override
|
|
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
|
|
return internalSource;
|
|
}
|
|
}
|
|
}
|