mirror of
https://github.com/tiennm99/lombok.git
synced 2026-09-02 16:20:19 +00:00
Added support for running unit tests using the method name to determine the file to test
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,4 @@
|
||||
|
||||
public class ForLoop {
|
||||
|
||||
public static void main(String[] args) {
|
||||
// before loop
|
||||
for (int i = 0; i < 10; i++) {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
// Cool Comments
|
||||
|
||||
public class WithComments {
|
||||
// Also inside the body
|
||||
}
|
||||
@@ -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 testSources() throws Exception {
|
||||
TestViaDelombok.runComparison(BEFORE_DIR, AFTER_DIR);
|
||||
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 testWithComments() throws Exception {
|
||||
tester.test();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user