aboutsummaryrefslogtreecommitdiff
path: root/test/core/src/lombok/CompilerMessageMatcher.java
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2012-10-25 00:07:44 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2012-10-25 00:07:44 +0200
commitd2808d407a65da9fe1e290a83df0f0da107f0cf8 (patch)
tree80e577330ebef88dbd91c1de59951cbff94af9e8 /test/core/src/lombok/CompilerMessageMatcher.java
parent2d216118986115bf309c050cd841bbe8b62b80b3 (diff)
downloadlombok-d2808d407a65da9fe1e290a83df0f0da107f0cf8.tar.gz
lombok-d2808d407a65da9fe1e290a83df0f0da107f0cf8.tar.bz2
lombok-d2808d407a65da9fe1e290a83df0f0da107f0cf8.zip
The testrunner now uses a different mechanism to verify correctness of produced errors and warnings (i.e. we intentionally compile code with errors in them to verify that the appropriate error or warning message is emitted when lombok is active during a compilation run of either javac or ecj) - instead of string comparisons, it's a little more complex. This to enable testing of both javac6 and javac7, even if they produce (slightly) different error output.
Updated all message files in the 'expected output' directories to represent this change.
Diffstat (limited to 'test/core/src/lombok/CompilerMessageMatcher.java')
-rw-r--r--test/core/src/lombok/CompilerMessageMatcher.java62
1 files changed, 62 insertions, 0 deletions
diff --git a/test/core/src/lombok/CompilerMessageMatcher.java b/test/core/src/lombok/CompilerMessageMatcher.java
new file mode 100644
index 00000000..b7902395
--- /dev/null
+++ b/test/core/src/lombok/CompilerMessageMatcher.java
@@ -0,0 +1,62 @@
+package lombok;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class CompilerMessageMatcher {
+ /** Line Number (starting at 1) */
+ private final long line;
+
+ /** Position is either column number, OR position in file starting from the first byte. */
+ private final long position;
+ private final Collection<String> messageParts;
+
+ public CompilerMessageMatcher(long line, long position, String message) {
+ this.line = line;
+ this.position = position;
+ this.messageParts = Arrays.asList(message.split("\\s+"));
+ }
+
+ @Override public String toString() {
+ StringBuilder parts = new StringBuilder();
+ for (String part : messageParts) parts.append(part).append(" ");
+ if (parts.length() > 0) parts.setLength(parts.length() - 1);
+ return String.format("%d:%d %s", line, position, parts);
+ }
+
+ public boolean matches(CompilerMessage message) {
+ if (message.line != this.line) return false;
+ if (message.position != this.position) return false;
+ for (String token : messageParts) {
+ if (!message.message.contains(token)) return false;
+ }
+ return true;
+ }
+
+ public static List<CompilerMessageMatcher> readAll(InputStream rawIn) throws IOException {
+ BufferedReader in = new BufferedReader(new InputStreamReader(rawIn, "UTF-8"));
+ List<CompilerMessageMatcher> out = new ArrayList<CompilerMessageMatcher>();
+ for (String line = in.readLine(); line != null; line = in.readLine()) {
+ CompilerMessageMatcher cmm = read(line);
+ if (cmm != null) out.add(cmm);
+ }
+ return out;
+ }
+
+ private static final Pattern PATTERN = Pattern.compile("^(\\d+):(\\d+) (.*)$");
+ private static CompilerMessageMatcher read(String line) {
+ line = line.trim();
+ if (line.isEmpty()) return null;
+ Matcher m = PATTERN.matcher(line);
+ if (!m.matches()) throw new IllegalArgumentException("Typo in test file: " + line);
+ return new CompilerMessageMatcher(Integer.parseInt(m.group(1)), Integer.parseInt(m.group(2)), m.group(3));
+ }
+}