blob: 4791db98ca105a9876039bf67f52d80a5dab91dd [file] [log] [blame]
/*
* @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;
}
}
}