diff -r b935bc56f1e4 -r 823512a72660 langtools/test/tools/javac/classfiles/attributes/lib/TestBase.java --- a/langtools/test/tools/javac/classfiles/attributes/lib/TestBase.java Thu Jul 03 15:48:23 2014 -0700 +++ b/langtools/test/tools/javac/classfiles/attributes/lib/TestBase.java Fri Jul 04 10:52:22 2014 +0100 @@ -23,47 +23,85 @@ import java.io.File; import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.io.PrintStream; +import java.util.*; +import java.util.function.Function; import java.util.stream.Stream; -import javax.tools.JavaCompiler; -import javax.tools.JavaFileObject; -import javax.tools.ToolProvider; +import javax.tools.*; import static java.lang.String.format; +import static java.lang.System.lineSeparator; +import static java.util.Arrays.asList; import static java.util.Collections.emptyList; +import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; public class TestBase { - public Map compile(String... sources) throws IOException, + public static final String LINE_SEPARATOR = lineSeparator(); + + private InMemoryFileManager compile( + List options, + Function src2JavaFileObject, + List sources) + throws IOException, CompilationException { + + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + List src = sources.stream() + .map(src2JavaFileObject) + .collect(toList()); + + DiagnosticCollector dc = new DiagnosticCollector<>(); + try (InMemoryFileManager fileManager + = new InMemoryFileManager(compiler.getStandardFileManager(null, null, null))) { + JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, dc, options, null, src); + boolean success = task.call(); + if (!success) { + String errorMessage = dc.getDiagnostics().stream() + .map(Object::toString) + .collect(joining("\n")); + throw new CompilationException("Compilation Error\n\n" + errorMessage); + } + return fileManager; + } + } + + public InMemoryFileManager compile(String... sources) + throws IOException, CompilationException { + return compile(emptyList(), sources); + } + + /** + * @param options - compiler options + * @param sources + * @return map where key is className, value is corresponding ClassFile. + * @throws IOException + */ + public InMemoryFileManager compile(List options, String...sources) + throws IOException, CompilationException { + return compile(options, ToolBox.JavaSource::new, asList(sources)); + } + + public InMemoryFileManager compile(String[]... sources) throws IOException, CompilationException { return compile(emptyList(), sources); } /** * @param options - compiler options - * @param sources + * @param sources - sources[i][0] - name of file, sources[i][1] - sources * @return map where key is className, value is corresponding ClassFile. * @throws IOException + * @throws CompilationException */ - public Map compile(List options, String... sources) throws IOException, - CompilationException { - - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - List src = Stream.of(sources).map(ToolBox.JavaSource::new).collect(toList()); - - try (InMemoryFileManager fileManager = new InMemoryFileManager(compiler.getStandardFileManager(null, null, null))) { - boolean success = compiler.getTask(null, fileManager, null, options, null, src).call(); - if (!success) throw new CompilationException("Compilation Error"); - return fileManager.getClasses(); - } + public InMemoryFileManager compile(List options, String[]...sources) + throws IOException, CompilationException { + return compile(options, src -> new ToolBox.JavaSource(src[0], src[1]), asList(sources)); } public void assertEquals(Object actual, Object expected, String message) { if (!Objects.equals(actual, expected)) - throw new AssertionFailedException(format("%s%nGot: %s, Expected: ", message, actual, expected)); + throw new AssertionFailedException(format("%s%nGot: %s, Expected: %s", message, actual, expected)); } public void assertNull(Object actual, String message) { @@ -80,18 +118,43 @@ assertEquals(actual, true, message); } + public void assertFalse(boolean actual, String message) { + assertEquals(actual, false, message); + } + + public File getSourceDir() { + return new File(System.getProperty("test.src", ".")); + } + + public File getClassDir() { + return new File(System.getProperty("test.classes", TestBase.class.getResource(".").getPath())); + } + public File getSourceFile(String fileName) { - return new File(System.getProperty("test.src", "."), fileName); + return new File(getSourceDir(), fileName); } public File getClassFile(String fileName) { - return new File(System.getProperty("test.classes", TestBase.class.getResource(".").getPath()), fileName); + return new File(getClassDir(), fileName); } public File getClassFile(Class clazz) { return getClassFile(clazz.getName().replace(".", "/") + ".class"); } + public void echo(String message) { + System.err.println(message.replace("\n", LINE_SEPARATOR)); + } + + public void printf(String template, Object...args) { + System.err.printf(template, Stream.of(args) + .map(Objects::toString) + .map(m -> m.replace("\n", LINE_SEPARATOR)) + .collect(toList()) + .toArray()); + + } + public static class CompilationException extends Exception { public CompilationException(String message) {