diff options
-rw-r--r-- | test/core/src/lombok/ReflectionFileTester.java | 60 | ||||
-rw-r--r-- | test/core/src/lombok/TestViaDelombok.java | 28 | ||||
-rw-r--r-- | test/delombok/resource/after/ForLoop.java | 2 | ||||
-rw-r--r-- | test/delombok/resource/after/WithComments.java | 1 | ||||
-rw-r--r-- | test/delombok/src/lombok/delombok/TestSourceFiles.java | 35 |
5 files changed, 103 insertions, 23 deletions
diff --git a/test/core/src/lombok/ReflectionFileTester.java b/test/core/src/lombok/ReflectionFileTester.java new file mode 100644 index 00000000..32de9c54 --- /dev/null +++ b/test/core/src/lombok/ReflectionFileTester.java @@ -0,0 +1,60 @@ +package lombok; + +import java.io.File; +import java.lang.reflect.Method; + +import org.junit.Test; + +public class ReflectionFileTester { + + private final File before; + private final File after; + + public ReflectionFileTester(String beforePath, String afterPath) { + before = new File(beforePath); + after = new File(afterPath); + if (!before.isDirectory()) { + throw new IllegalArgumentException(beforePath + " is not a directory"); + } + if (!after.isDirectory()) { + throw new IllegalArgumentException(afterPath + " is not a directory"); + } + } + + public boolean verify(Class<?> clazz) { + boolean result = true; + for (File f : before.listFiles()) { + String fileName = f.getName(); + if (!fileName.endsWith(".java")) { + continue; + } + String methodName = "test" + fileName.substring(0, fileName.length() - 5); + try { + Method method = clazz.getDeclaredMethod(methodName); + if (method.getAnnotation(Test.class) == null) { + result = false; + System.err.printf("Class %s method %s is not a @Test method\n", clazz.getName(), methodName); + } + } + catch (NoSuchMethodException e) { + result = false; + System.err.printf("Class %s has no method %s\n", clazz.getName(), methodName); + } + } + return result; + } + + public void test() throws Exception { + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + if (stackTrace.length < 3) { + throw new Error("No stacktrace available"); + } + String methodName = stackTrace[2].getMethodName(); + if (!methodName.startsWith("test")) { + throw new IllegalStateException("test() should be called from a methos that starts with 'test'"); + } + String fileName = methodName.substring(4).concat(".java"); + File testFile = new File(before, fileName); + TestViaDelombok.compareFile(after, testFile); + } +} diff --git a/test/core/src/lombok/TestViaDelombok.java b/test/core/src/lombok/TestViaDelombok.java index f9ea95f2..a3e97098 100644 --- a/test/core/src/lombok/TestViaDelombok.java +++ b/test/core/src/lombok/TestViaDelombok.java @@ -21,7 +21,7 @@ */ package lombok; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; import java.io.BufferedReader; import java.io.File; @@ -42,14 +42,18 @@ public class TestViaDelombok { File[] listFiles = beforeDir.listFiles(); for (File file : listFiles) { - delombok.setVerbose(false); - delombok.setForceProcess(true); - delombok.setCharset("UTF-8"); - StringWriter writer = new StringWriter(); - delombok.delombok(file.getAbsolutePath(), writer); - compare(file.getName(), readAfter(afterDir, file), writer.toString()); + compareFile(afterDir, file); } } + + public static void compareFile(File afterDir, File file) throws IOException { + delombok.setVerbose(false); + delombok.setForceProcess(true); + delombok.setCharset("UTF-8"); + StringWriter writer = new StringWriter(); + delombok.delombok(file.getAbsolutePath(), writer); + compare(file.getName(), readAfter(afterDir, file), writer.toString()); + } private static void compare(String name, String expectedFile, String actualFile) { String[] expectedLines = expectedFile.split("(\\r?\\n)"); @@ -63,15 +67,13 @@ public class TestViaDelombok { for (int i = 0; i < size; i++) { String expected = expectedLines[i]; String actual = actualLines[i]; - if (!expected.equals(actual)) { - fail(String.format("Difference in line %s(%d):\nExpected `%s`\nGot `%s`\n", name, i, expected, actual)); - } + assertEquals(String.format("Difference in %s on line %d", name, i + 1), expected, actual); } if (expectedLines.length > actualLines.length) { - fail(String.format("Missing line %s(%d): %s\n", name, size, expectedLines[size])); + fail(String.format("Missing line %d in generated %s: %s", size + 1, name, expectedLines[size])); } if (expectedLines.length < actualLines.length) { - fail(String.format("Extra line %s(%d): %s\n", name, size, actualLines[size])); + fail(String.format("Extra line %d in generated %s: %s", size + 1, name, actualLines[size])); } } @@ -94,4 +96,4 @@ public class TestViaDelombok { } return out.toArray(new String[0]); } -} +}
\ No newline at end of file diff --git a/test/delombok/resource/after/ForLoop.java b/test/delombok/resource/after/ForLoop.java index 609549b7..615f6e8a 100644 --- a/test/delombok/resource/after/ForLoop.java +++ b/test/delombok/resource/after/ForLoop.java @@ -1,6 +1,4 @@ - public class ForLoop { - public static void main(String[] args) { // before loop for (int i = 0; i < 10; i++) { diff --git a/test/delombok/resource/after/WithComments.java b/test/delombok/resource/after/WithComments.java index 59cc97c4..684dcc8e 100644 --- a/test/delombok/resource/after/WithComments.java +++ b/test/delombok/resource/after/WithComments.java @@ -1,5 +1,4 @@ // Cool Comments - public class WithComments { // Also inside the body }
\ No newline at end of file diff --git a/test/delombok/src/lombok/delombok/TestSourceFiles.java b/test/delombok/src/lombok/delombok/TestSourceFiles.java index a5df5197..fc2a9cab 100644 --- a/test/delombok/src/lombok/delombok/TestSourceFiles.java +++ b/test/delombok/src/lombok/delombok/TestSourceFiles.java @@ -21,18 +21,39 @@ */ package lombok.delombok; -import java.io.File; - -import lombok.TestViaDelombok; +import lombok.ReflectionFileTester; +import org.junit.BeforeClass; import org.junit.Test; public class TestSourceFiles { - private static final File BEFORE_DIR = new File("test/delombok/resource/before"); - private static final File AFTER_DIR = new File("test/delombok/resource/after"); + private static final String AFTER = "test/delombok/resource/after"; + private static final String BEFORE = "test/delombok/resource/before"; + + private static final ReflectionFileTester tester = new ReflectionFileTester(BEFORE, AFTER); + + @BeforeClass + public static void verify() { + tester.verify(TestSourceFiles.class); + } + + @Test + public void testAnnotation() throws Exception { + tester.test(); + } + + @Test + public void testCast() throws Exception { + tester.test(); + } + + @Test + public void testForLoop() throws Exception { + tester.test(); + } @Test - public void testSources() throws Exception { - TestViaDelombok.runComparison(BEFORE_DIR, AFTER_DIR); + public void testWithComments() throws Exception { + tester.test(); } } |