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