From e67e9e14dcc0f3754c3a42e6b4d039a7aa04db1a Mon Sep 17 00:00:00 2001 From: Roel Spilker Date: Sat, 28 Nov 2009 00:15:58 +0100 Subject: Added support for running unit tests using the method name to determine the file to test --- test/core/src/lombok/ReflectionFileTester.java | 60 ++++++++++++++++++++++++++ test/core/src/lombok/TestViaDelombok.java | 28 ++++++------ 2 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 test/core/src/lombok/ReflectionFileTester.java (limited to 'test/core/src/lombok') 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 -- cgit