mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 06:17:44 +00:00
All tests now succeed on all platforms again;
'optional' expected messages added. expanded some tests. Added a check if the bootclasspath supports a certain version, i.e. don't try to run a JDK7-only test if AutoClosable isn't available.
This commit is contained in:
1 parent
7f85149f39
commit
844995fc60
7 files changed
+53
-8
No files matched your search
@@ -56,12 +56,15 @@ public abstract class AbstractRunTests {
|
||||
public boolean compareFile(DirectoryRunner.TestParams params, File file) throws Throwable {
|
||||
ConfigurationKeysLoader.LoaderLoader.loadAllConfigurationKeys();
|
||||
final LombokTestSource sourceDirectives = LombokTestSource.readDirectives(file);
|
||||
if (sourceDirectives.isIgnore() || !sourceDirectives.versionWithinLimit(params.getVersion())) return false;
|
||||
if (sourceDirectives.isIgnore()) return false;
|
||||
if (!sourceDirectives.versionWithinLimit(params.getVersion())) return false;
|
||||
if (!sourceDirectives.versionWithinLimit(getClasspathVersion())) return false;
|
||||
|
||||
String fileName = file.getName();
|
||||
LombokTestSource expected = LombokTestSource.read(params.getAfterDirectory(), params.getMessagesDirectory(), fileName);
|
||||
|
||||
if (expected.isIgnore() || !expected.versionWithinLimit(params.getVersion())) return false;
|
||||
if (expected.isIgnore()) return false;
|
||||
if (!expected.versionWithinLimit(params.getVersion())) return false;
|
||||
|
||||
LinkedHashSet<CompilerMessage> messages = new LinkedHashSet<CompilerMessage>();
|
||||
StringWriter writer = new StringWriter();
|
||||
@@ -78,6 +81,22 @@ public abstract class AbstractRunTests {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static int getClasspathVersion() {
|
||||
try {
|
||||
Class.forName("java.lang.AutoCloseable");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return 6;
|
||||
}
|
||||
|
||||
try {
|
||||
Class.forName("java.util.stream.Stream");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return 7;
|
||||
}
|
||||
|
||||
return 8;
|
||||
}
|
||||
|
||||
protected abstract void transformCode(Collection<CompilerMessage> messages, StringWriter result, File file) throws Throwable;
|
||||
|
||||
protected String readFile(File file) throws IOException {
|
||||
@@ -176,24 +195,31 @@ public abstract class AbstractRunTests {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("null") /* eclipse bug; it falsely thinks stuffAc will always be null or some such hogwash. */
|
||||
private static void compareMessages(String name, LombokImmutableList<CompilerMessageMatcher> expected, LinkedHashSet<CompilerMessage> actual) {
|
||||
Iterator<CompilerMessageMatcher> expectedIterator = expected.iterator();
|
||||
Iterator<CompilerMessage> actualIterator = actual.iterator();
|
||||
|
||||
CompilerMessage stuffAc = null;
|
||||
while (true) {
|
||||
boolean exHasNext = expectedIterator.hasNext();
|
||||
boolean acHasNext = actualIterator.hasNext();
|
||||
boolean acHasNext = stuffAc != null || actualIterator.hasNext();
|
||||
if (!exHasNext && !acHasNext) break;
|
||||
if (exHasNext && acHasNext) {
|
||||
CompilerMessageMatcher cmm = expectedIterator.next();
|
||||
CompilerMessage cm = actualIterator.next();
|
||||
CompilerMessage cm = stuffAc == null ? actualIterator.next() : stuffAc;
|
||||
if (cmm.matches(cm)) continue;
|
||||
if (cmm.isOptional()) stuffAc = cm;
|
||||
fail(String.format("[%s] Expected message '%s' but got message '%s'", name, cmm, cm));
|
||||
throw new AssertionError("fail should have aborted already.");
|
||||
}
|
||||
if (exHasNext) fail(String.format("[%s] Expected message '%s' but ran out of actual messages", name, expectedIterator.next()));
|
||||
|
||||
while (expectedIterator.hasNext()) {
|
||||
if (expectedIterator.next().isOptional()) continue;
|
||||
fail(String.format("[%s] Expected message '%s' but ran out of actual messages", name, expectedIterator.next()));
|
||||
}
|
||||
if (acHasNext) fail(String.format("[%s] Unexpected message: %s", name, actualIterator.next()));
|
||||
throw new AssertionError("fail should have aborted already.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,9 +37,14 @@ public class CompilerMessageMatcher {
|
||||
/** Line Number (starting at 1) */
|
||||
private final List<Integer> lineNumbers = new ArrayList<Integer>();
|
||||
private final List<List<String>> messages = new ArrayList<List<String>>();
|
||||
private boolean optional;
|
||||
|
||||
private CompilerMessageMatcher() {}
|
||||
|
||||
public boolean isOptional() {
|
||||
return optional;
|
||||
}
|
||||
|
||||
public static CompilerMessageMatcher asCompilerMessageMatcher(CompilerMessage message) {
|
||||
CompilerMessageMatcher cmm = new CompilerMessageMatcher();
|
||||
cmm.lineNumbers.add((int) message.getLine());
|
||||
@@ -50,7 +55,7 @@ public class CompilerMessageMatcher {
|
||||
@Override public String toString() {
|
||||
StringBuilder out = new StringBuilder();
|
||||
for (int i = 0; i < lineNumbers.size(); i++) {
|
||||
out.append(lineNumbers.get(i));
|
||||
out.append(lineNumbers.get(i)).append(" ");
|
||||
for (String part : messages.get(i)) out.append(part).append(" ");
|
||||
if (out.length() > 0) out.setLength(out.length() - 1);
|
||||
out.append(" |||| ");
|
||||
@@ -87,10 +92,17 @@ public class CompilerMessageMatcher {
|
||||
private static CompilerMessageMatcher read(String line) {
|
||||
line = line.trim();
|
||||
if (line.isEmpty()) return null;
|
||||
boolean optional = false;
|
||||
|
||||
if (line.startsWith("OPTIONAL ")) {
|
||||
line = line.substring(9);
|
||||
optional = true;
|
||||
}
|
||||
|
||||
String[] parts = line.split("\\s*\\|\\|\\|\\|\\s*");
|
||||
|
||||
CompilerMessageMatcher cmm = new CompilerMessageMatcher();
|
||||
cmm.optional = optional;
|
||||
for (String part : parts) {
|
||||
Matcher m = PATTERN.matcher(part);
|
||||
if (!m.matches()) throw new IllegalArgumentException("Typo in test file: " + line);
|
||||
|
||||
@@ -5,6 +5,8 @@ class MixGetterVal {
|
||||
public void test() {
|
||||
final int y = x;
|
||||
m(y);
|
||||
final int a = getX();
|
||||
m(a);
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int getX() {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//version 7:
|
||||
import java.io.IOException;
|
||||
public class ValInTryWithResources {
|
||||
public void whyTryInsteadOfCleanup() throws IOException {
|
||||
|
||||
@@ -10,6 +10,8 @@ class MixGetterVal {
|
||||
public void test() {
|
||||
final @val int y = x;
|
||||
m(y);
|
||||
final @val int a = getX();
|
||||
m(a);
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") int getX() {
|
||||
return this.x;
|
||||
|
||||
@@ -8,5 +8,7 @@ class MixGetterVal {
|
||||
public void test() {
|
||||
val y = x;
|
||||
m(y);
|
||||
val a = getX();
|
||||
m(a);
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
3 cannot find symbol
|
||||
6 cannot find symbol
|
||||
6 illegal initializer for <none>
|
||||
OPTIONAL 6 illegal initializer for <none>
|
||||
Reference in new issue
Block a user