diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2014-04-02 00:58:57 +0200 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2014-04-02 00:59:08 +0200 |
commit | e0c5f3001276b94fd14e7e81e38f72070bda0c4d (patch) | |
tree | ab86e7722a6826ed8a5d60f5af133dc22404efca /test/bytecode | |
parent | 735ac6e8c256f667b2d742c76029868f086a99d4 (diff) | |
download | lombok-e0c5f3001276b94fd14e7e81e38f72070bda0c4d.tar.gz lombok-e0c5f3001276b94fd14e7e81e38f72070bda0c4d.tar.bz2 lombok-e0c5f3001276b94fd14e7e81e38f72070bda0c4d.zip |
[#655] Added a test for the post compiler. It indeed fails in JDK8 now due to an ASM version that doesn't understand java 8 class files.
Diffstat (limited to 'test/bytecode')
4 files changed, 76 insertions, 5 deletions
diff --git a/test/bytecode/resource/PostCompileSneaky.java b/test/bytecode/resource/PostCompileSneaky.java new file mode 100644 index 00000000..fded565c --- /dev/null +++ b/test/bytecode/resource/PostCompileSneaky.java @@ -0,0 +1,5 @@ +public class PostCompileSneaky { + public void test() { + throw lombok.Lombok.sneakyThrow(new Exception()); + } +}
\ No newline at end of file diff --git a/test/bytecode/src/lombok/bytecode/RunBytecodeTests.java b/test/bytecode/src/lombok/bytecode/RunBytecodeTests.java index bd3579c5..5bfd97e8 100644 --- a/test/bytecode/src/lombok/bytecode/RunBytecodeTests.java +++ b/test/bytecode/src/lombok/bytecode/RunBytecodeTests.java @@ -26,6 +26,6 @@ import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) -@SuiteClasses({TestClassFileMetaData.class}) +@SuiteClasses({TestClassFileMetaData.class, TestPostCompiler.class}) public class RunBytecodeTests { } diff --git a/test/bytecode/src/lombok/bytecode/TestClassFileMetaData.java b/test/bytecode/src/lombok/bytecode/TestClassFileMetaData.java index 2b506c1b..335455fd 100644 --- a/test/bytecode/src/lombok/bytecode/TestClassFileMetaData.java +++ b/test/bytecode/src/lombok/bytecode/TestClassFileMetaData.java @@ -33,10 +33,13 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import javax.tools.Diagnostic; +import javax.tools.DiagnosticListener; import javax.tools.JavaCompiler; +import javax.tools.JavaCompiler.CompilationTask; +import javax.tools.JavaFileObject; import javax.tools.SimpleJavaFileObject; import javax.tools.ToolProvider; -import javax.tools.JavaCompiler.CompilationTask; import lombok.Lombok; @@ -179,15 +182,24 @@ public class TestClassFileMetaData { return new ClassFileMetaData(compile(file)); } - private static byte[] compile(File file) { + static byte[] compile(File file) { try { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); File tempDir = getTempDir(); tempDir.mkdirs(); List<String> options = Arrays.asList("-proc:none", "-d", tempDir.getAbsolutePath()); + StringWriter captureWarnings = new StringWriter(); - CompilationTask task = compiler.getTask(captureWarnings, null, null, options, null, Collections.singleton(new ContentBasedJavaFileObject(file.getPath(), readFileAsString(file)))); - assertTrue(task.call()); + final StringBuilder compilerErrors = new StringBuilder(); + DiagnosticListener<JavaFileObject> diagnostics = new DiagnosticListener<JavaFileObject>() { + @Override public void report(Diagnostic<? extends JavaFileObject> diagnostic) { + compilerErrors.append(diagnostic.toString()).append("\n"); + } + }; + + CompilationTask task = compiler.getTask(captureWarnings, null, diagnostics, options, null, Collections.singleton(new ContentBasedJavaFileObject(file.getPath(), readFileAsString(file)))); + Boolean taskResult = task.call(); + assertTrue("Compilation task didn't succeed: \n<Warnings and Errors>\n" + compilerErrors.toString() + "\n</Warnings and Errors>", taskResult); return PostCompilerApp.readFile(new File(tempDir, file.getName().replaceAll("\\.java$", ".class"))); } catch (Exception e) { throw Lombok.sneakyThrow(e); diff --git a/test/bytecode/src/lombok/bytecode/TestPostCompiler.java b/test/bytecode/src/lombok/bytecode/TestPostCompiler.java new file mode 100644 index 00000000..2704ecec --- /dev/null +++ b/test/bytecode/src/lombok/bytecode/TestPostCompiler.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2014 The Project Lombok Authors. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package lombok.bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import lombok.core.DiagnosticsReceiver; +import lombok.core.PostCompiler; + +import org.junit.Test; + +public class TestPostCompiler { + @Test + public void testPostCompiler() throws IOException { + byte[] compiled = TestClassFileMetaData.compile(new File("test/bytecode/resource/PostCompileSneaky.java")); + DiagnosticsReceiver receiver = new DiagnosticsReceiver() { + @Override public void addWarning(String message) { + fail("Warning during post compilation processing of a sneakyThrow call: " + message); + } + + @Override public void addError(String message) { + fail("Error during post compilation processing of a sneakyThrow call: " + message); + } + }; + assertTrue("Before post compilation, expected lombok.Lombok.sneakyThrow() call in compiled code, but it's not there", + new ClassFileMetaData(compiled).usesMethod("lombok/Lombok", "sneakyThrow")); + byte[] transformed = PostCompiler.applyTransformations(compiled, "PostCompileSneaky.java", receiver); + + assertNotSame("Post-compiler did not do anything; we expected it to remove a Lombok.sneakyThrow() call.", compiled, transformed); + assertTrue("After removing a sneakyThrow the classfile got... bigger (or stayed equal in size). Huh?", transformed.length < compiled.length); + } +} |