mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 22:16:11 +00:00
Added support for checking compiler messages (errors & warnings)
This commit is contained in:
1 parent
58f5f68f05
commit
ced6843970
2 files changed
+59
-12
No files matched your search
@@ -2,6 +2,7 @@ package lombok;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
@@ -16,6 +17,12 @@ import org.junit.runner.notification.RunNotifier;
|
||||
|
||||
public class DirectoryRunner extends Runner {
|
||||
|
||||
private static final FileFilter JAVA_FILE_FILTER = new FileFilter() {
|
||||
@Override public boolean accept(File file) {
|
||||
return file.isFile() && file.getName().endsWith(".java");
|
||||
}
|
||||
};
|
||||
|
||||
private final Description description;
|
||||
private final Map<String, Description> tests = new TreeMap<String, Description>();
|
||||
private final Throwable failure;
|
||||
@@ -41,7 +48,7 @@ public class DirectoryRunner extends Runner {
|
||||
Method afterMethod = testClass.getDeclaredMethod("getAfterDirectory");
|
||||
afterDirectory = (File) afterMethod.invoke(null);
|
||||
|
||||
for (File file : beforeDirectory.listFiles()) {
|
||||
for (File file : beforeDirectory.listFiles(JAVA_FILE_FILTER)) {
|
||||
Description testDescription = Description.createTestDescription(testClass, file.getName());
|
||||
description.addChild(testDescription);
|
||||
tests.put(file.getName(), testDescription);
|
||||
@@ -82,7 +89,7 @@ public class DirectoryRunner extends Runner {
|
||||
if (mustIgnore(file)) {
|
||||
return false;
|
||||
}
|
||||
RunTestsViaDelombok.compareFile(afterDirectory, file);
|
||||
RunTestsViaDelombok.compareFile(beforeDirectory, afterDirectory, file);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,42 +25,63 @@ import static org.junit.Assert.*;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.tools.Diagnostic;
|
||||
import javax.tools.DiagnosticListener;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import lombok.delombok.Delombok;
|
||||
|
||||
public class RunTestsViaDelombok {
|
||||
private static final FileFilter JAVA_FILE_FILTER = new FileFilter() {
|
||||
@Override public boolean accept(File file) {
|
||||
return file.isFile() && file.getName().endsWith(".java");
|
||||
}
|
||||
};
|
||||
|
||||
private static Delombok delombok = new Delombok();
|
||||
private static volatile boolean printErrors = false;
|
||||
|
||||
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
|
||||
|
||||
public static void runComparison(File beforeDir, File afterDir) throws Throwable {
|
||||
File[] listFiles = beforeDir.listFiles();
|
||||
File[] listFiles = beforeDir.listFiles(JAVA_FILE_FILTER);
|
||||
|
||||
for (File file : listFiles) {
|
||||
compareFile(afterDir, file);
|
||||
compareFile(beforeDir, afterDir, file);
|
||||
}
|
||||
}
|
||||
|
||||
public static void compareFile(File afterDir, File file) throws Throwable {
|
||||
public static void compareFile(File beforeDir, File afterDir, File file) throws Throwable {
|
||||
delombok.setVerbose(false);
|
||||
delombok.setForceProcess(true);
|
||||
delombok.setCharset("UTF-8");
|
||||
|
||||
final StringBuilder messages = new StringBuilder();
|
||||
delombok.setDiagnosticsListener(new DiagnosticListener<JavaFileObject>() {
|
||||
@Override public void report(Diagnostic<? extends JavaFileObject> d) {
|
||||
messages.append(String.format("%d:%d %s %s\n", d.getLineNumber(), d.getColumnNumber(), d.getKind(), d.getMessage(Locale.ENGLISH)));
|
||||
}
|
||||
});
|
||||
|
||||
StringWriter writer = new StringWriter();
|
||||
delombok.delombok(file.getAbsolutePath(), writer);
|
||||
compare(file.getName(), readAfter(afterDir, file), writer.toString());
|
||||
compare(file.getName(), readFile(afterDir, file, false), writer.toString(), readFile(beforeDir, file, true), messages.toString());
|
||||
}
|
||||
|
||||
public static void printErrors(boolean print) {
|
||||
printErrors = print;
|
||||
}
|
||||
|
||||
private static void compare(String name, String expectedFile, String actualFile) throws Throwable {
|
||||
private static void compare(String name, String expectedFile, String actualFile, String expectedMessages, String actualMessages) throws Throwable {
|
||||
try {
|
||||
compareContent(name, expectedFile, actualFile);
|
||||
}
|
||||
@@ -76,10 +97,24 @@ public class RunTestsViaDelombok {
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
try {
|
||||
compareContent(name, expectedMessages, actualMessages);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
if (printErrors) {
|
||||
System.out.println("***** " + name + " *****");
|
||||
System.out.println(e.getMessage());
|
||||
System.out.println("**** Expected ******");
|
||||
System.out.println(expectedMessages);
|
||||
System.out.println("**** Actual ******");
|
||||
System.out.println(actualMessages);
|
||||
System.out.println("*******************");
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
private static void compareContent(String name, String expectedFile,
|
||||
String actualFile) {
|
||||
|
||||
private static void compareContent(String name, String expectedFile, String actualFile) {
|
||||
String[] expectedLines = expectedFile.split("(\\r?\\n)");
|
||||
String[] actualLines = actualFile.split("(\\r?\\n)");
|
||||
if (actualLines[0].startsWith("// Generated by delombok at ")) {
|
||||
@@ -101,8 +136,13 @@ public class RunTestsViaDelombok {
|
||||
}
|
||||
}
|
||||
|
||||
private static String readAfter(File afterDir, File file) throws IOException {
|
||||
BufferedReader reader = new BufferedReader(new FileReader(new File(afterDir, file.getName())));
|
||||
private static String readFile(File afterDir, File file, boolean messages) throws IOException {
|
||||
BufferedReader reader;
|
||||
try {
|
||||
reader = new BufferedReader(new FileReader(new File(afterDir, file.getName() + (messages ? ".messages" : ""))));
|
||||
} catch (FileNotFoundException e) {
|
||||
return "";
|
||||
}
|
||||
StringBuilder result = new StringBuilder();
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
|
||||
Reference in new issue
Block a user