diff options
Diffstat (limited to 'test')
12 files changed, 151 insertions, 33 deletions
diff --git a/test/core/src/lombok/CompilerMessageMatcher.java b/test/core/src/lombok/CompilerMessageMatcher.java index db288749..cffad88a 100644 --- a/test/core/src/lombok/CompilerMessageMatcher.java +++ b/test/core/src/lombok/CompilerMessageMatcher.java @@ -27,7 +27,6 @@ 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; @@ -36,32 +35,41 @@ import lombok.javac.CapturingDiagnosticListener.CompilerMessage; public class CompilerMessageMatcher { /** Line Number (starting at 1) */ - private final long line; + private final List<Integer> lineNumbers = new ArrayList<Integer>(); + private final List<List<String>> messages = new ArrayList<List<String>>(); - private final Collection<String> messageParts; - - public CompilerMessageMatcher(long line, String message) { - this.line = line; - this.messageParts = Arrays.asList(message.split("\\s+")); - } + private CompilerMessageMatcher() {} public static CompilerMessageMatcher asCompilerMessageMatcher(CompilerMessage message) { - return new CompilerMessageMatcher(message.getLine(), message.getMessage()); + CompilerMessageMatcher cmm = new CompilerMessageMatcher(); + cmm.lineNumbers.add((int) message.getLine()); + cmm.messages.add(Arrays.asList(message.getMessage().split("\\s+"))); + return cmm; } @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 %s", line, parts); + StringBuilder out = new StringBuilder(); + for (int i = 0; i < lineNumbers.size(); i++) { + out.append(lineNumbers.get(i)); + for (String part : messages.get(i)) out.append(part).append(" "); + if (out.length() > 0) out.setLength(out.length() - 1); + out.append(" |||| "); + } + if (out.length() > 0) out.setLength(out.length() - 6); + return out.toString(); } public boolean matches(CompilerMessage message) { - if (message.getLine() != this.line) return false; - for (String token : messageParts) { - if (!message.getMessage().contains(token)) return false; + outer: + for (int i = 0; i < lineNumbers.size(); i++) { + if (message.getLine() != lineNumbers.get(i)) continue; + for (String token : messages.get(i)) { + if (!message.getMessage().contains(token)) continue outer; + } + return true; } - return true; + + return false; } public static List<CompilerMessageMatcher> readAll(InputStream rawIn) throws IOException { @@ -75,11 +83,21 @@ public class CompilerMessageMatcher { } private static final Pattern PATTERN = Pattern.compile("^(\\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)), m.group(2)); + + String[] parts = line.split("\\s*\\|\\|\\|\\|\\s*"); + + CompilerMessageMatcher cmm = new CompilerMessageMatcher(); + for (String part : parts) { + Matcher m = PATTERN.matcher(part); + if (!m.matches()) throw new IllegalArgumentException("Typo in test file: " + line); + cmm.lineNumbers.add(Integer.parseInt(m.group(1))); + cmm.messages.add(Arrays.asList(m.group(2).split("\\s+"))); + } + + return cmm; } } diff --git a/test/core/src/lombok/RunTestsViaEcj.java b/test/core/src/lombok/RunTestsViaEcj.java index 8d1a8278..e23ebc4c 100644 --- a/test/core/src/lombok/RunTestsViaEcj.java +++ b/test/core/src/lombok/RunTestsViaEcj.java @@ -70,22 +70,22 @@ public class RunTestsViaEcj extends AbstractRunTests { warnings.put(CompilerOptions.OPTION_ReportUnusedLabel, "ignore"); warnings.put(CompilerOptions.OPTION_ReportUnusedImport, "ignore"); warnings.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, "ignore"); - warnings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_7); + warnings.put(CompilerOptions.OPTION_Source, "1." + Eclipse.getEcjCompilerVersion()); options.set(warnings); return options; } protected IErrorHandlingPolicy ecjErrorHandlingPolicy() { return new IErrorHandlingPolicy() { - @Override public boolean stopOnFirstError() { + public boolean stopOnFirstError() { return true; } - @Override public boolean proceedOnErrors() { + public boolean proceedOnErrors() { return false; } - @Override public boolean ignoreAllErrors() { + public boolean ignoreAllErrors() { return false; } }; @@ -124,7 +124,8 @@ public class RunTestsViaEcj extends AbstractRunTests { CompilationUnitDeclaration cud = compilationUnit_.get(); - result.append(cud.toString()); + if (cud == null) result.append("---- NO CompilationUnit provided by ecj ----"); + else result.append(cud.toString()); } private FileSystem createFileSystem(File file) { diff --git a/test/pretty/resource/after/DefaultMethod.java b/test/pretty/resource/after/DefaultMethod.java new file mode 100644 index 00000000..864ba60f --- /dev/null +++ b/test/pretty/resource/after/DefaultMethod.java @@ -0,0 +1,8 @@ +interface DefaultMethod { + int size(); + default boolean isEmpty() { + return size() == 0; + } + default strictfp void run() { + } +}
\ No newline at end of file diff --git a/test/pretty/resource/after/MethodReference.java b/test/pretty/resource/after/MethodReference.java new file mode 100644 index 00000000..115b7014 --- /dev/null +++ b/test/pretty/resource/after/MethodReference.java @@ -0,0 +1,36 @@ +class MethodReference { + public MethodReference() { + } + public <T> MethodReference(T in) { + } + public void simpleInstanceReference() { + Runnable r = this::foo; + } + public void simpleConstructorReference() { + Runnable r = MethodReference::new; + } + public void simpleStaticReference() { + Runnable r = MethodReference::staticFoo; + } + public void generifiedStaticReference() { + StringConverter sc = MethodReference::<String>generifiedStaticFoo; + } + public void generifiedConstructorReference() { + FooConverter<MethodReference> fc = MethodReference::<String>new; + } + public void foo() { + } + private static void staticFoo() { + } + public static <T> T generifiedStaticFoo(T foo) { + return foo; + } + @FunctionalInterface + public interface StringConverter { + String hello(String x); + } + @FunctionalInterface + public interface FooConverter<K> { + K hello(String x); + } +}
\ No newline at end of file diff --git a/test/pretty/resource/before/DefaultMethod.java b/test/pretty/resource/before/DefaultMethod.java new file mode 100644 index 00000000..e0358c7a --- /dev/null +++ b/test/pretty/resource/before/DefaultMethod.java @@ -0,0 +1,11 @@ +// version 8: +interface DefaultMethod { + int size(); + + default boolean isEmpty() { + return size() == 0; + } + + default strictfp void run() { + } +}
\ No newline at end of file diff --git a/test/pretty/resource/before/MethodReference.java b/test/pretty/resource/before/MethodReference.java new file mode 100644 index 00000000..c7af9bf3 --- /dev/null +++ b/test/pretty/resource/before/MethodReference.java @@ -0,0 +1,48 @@ +// version 8: +class MethodReference { + public MethodReference() { + } + + public <T> MethodReference(T in) { + } + + public void simpleInstanceReference() { + Runnable r = this::foo; + } + + public void simpleConstructorReference() { + Runnable r = MethodReference::new; + } + + public void simpleStaticReference() { + Runnable r = MethodReference::staticFoo; + } + + public void generifiedStaticReference() { + StringConverter sc = MethodReference::<String>generifiedStaticFoo; + } + + public void generifiedConstructorReference() { + FooConverter<MethodReference> fc = MethodReference::<String>new; + } + + public void foo() { + } + + private static void staticFoo() { + } + + public static <T> T generifiedStaticFoo(T foo) { + return foo; + } + + @FunctionalInterface + public interface StringConverter { + public String hello(String x); + } + + @FunctionalInterface + public interface FooConverter<K> { + public K hello(String x); + } +} diff --git a/test/transform/resource/after-delombok/LoggerSlf4jOnNonType.java b/test/transform/resource/after-delombok/LoggerSlf4jOnNonType.java deleted file mode 100644 index 4c944172..00000000 --- a/test/transform/resource/after-delombok/LoggerSlf4jOnNonType.java +++ /dev/null @@ -1,4 +0,0 @@ -class LoggerSlf4jOnNonType { - void foo() { - } -}
\ No newline at end of file diff --git a/test/transform/resource/after-delombok/ValInTryWithResources.java b/test/transform/resource/after-delombok/ValInTryWithResources.java index 9aae99a2..42bd3193 100644 --- a/test/transform/resource/after-delombok/ValInTryWithResources.java +++ b/test/transform/resource/after-delombok/ValInTryWithResources.java @@ -1,4 +1,3 @@ -//version 7 import java.io.IOException; public class ValInTryWithResources { public void whyTryInsteadOfCleanup() throws IOException { diff --git a/test/transform/resource/before/LoggerSlf4jOnNonType.java b/test/transform/resource/before/LoggerSlf4jOnNonType.java index fd557b25..495c67fc 100644 --- a/test/transform/resource/before/LoggerSlf4jOnNonType.java +++ b/test/transform/resource/before/LoggerSlf4jOnNonType.java @@ -1,3 +1,4 @@ +// skip-compare-content class LoggerSlf4jOnNonType { @lombok.extern.slf4j.Slf4j void foo() { diff --git a/test/transform/resource/before/ValInTryWithResources.java b/test/transform/resource/before/ValInTryWithResources.java index 780e1c71..a7820062 100644 --- a/test/transform/resource/before/ValInTryWithResources.java +++ b/test/transform/resource/before/ValInTryWithResources.java @@ -1,4 +1,4 @@ -//version 7 +//version 7: import lombok.val; import java.io.IOException; diff --git a/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages b/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages index 262fbb27..ca4d607f 100644 --- a/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages +++ b/test/transform/resource/messages-delombok/LoggerSlf4jOnNonType.java.messages @@ -1 +1 @@ -2 @Log is legal only on types.
\ No newline at end of file +3 @Log is legal only on types. |||| 3 annotation type not applicable to this kind of declaration
\ No newline at end of file diff --git a/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages b/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages index 81e9b718..3ef2aeb9 100644 --- a/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages +++ b/test/transform/resource/messages-ecj/LoggerSlf4jOnNonType.java.messages @@ -1 +1 @@ -2 The annotation @Slf4j is disallowed for this location +3 The annotation @Slf4j is disallowed for this location |