Merge "Add support for inspection diagnostics messages in test framework"
diff --git a/src/test/java/com/android/tools/r8/D8TestBuilder.java b/src/test/java/com/android/tools/r8/D8TestBuilder.java
index 129176a..88d077b 100644
--- a/src/test/java/com/android/tools/r8/D8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/D8TestBuilder.java
@@ -22,7 +22,7 @@
}
public static D8TestBuilder create(TestState state) {
- return new D8TestBuilder(state, D8Command.builder());
+ return new D8TestBuilder(state, D8Command.builder(state.getDiagnosticsHandler()));
}
@Override
diff --git a/src/test/java/com/android/tools/r8/D8TestCompileResult.java b/src/test/java/com/android/tools/r8/D8TestCompileResult.java
index 178d351..79fb293 100644
--- a/src/test/java/com/android/tools/r8/D8TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/D8TestCompileResult.java
@@ -18,6 +18,11 @@
}
@Override
+ public TestDiagnosticMessages getDiagnosticMessages() {
+ return state.getDiagnosticsMessages();
+ }
+
+ @Override
public D8TestRunResult createRunResult(AndroidApp app, ProcessResult result) {
return new D8TestRunResult(app, result);
}
diff --git a/src/test/java/com/android/tools/r8/DXTestCompileResult.java b/src/test/java/com/android/tools/r8/DXTestCompileResult.java
index fa1f314..da6a17a 100644
--- a/src/test/java/com/android/tools/r8/DXTestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/DXTestCompileResult.java
@@ -19,6 +19,11 @@
}
@Override
+ public TestDiagnosticMessages getDiagnosticMessages() {
+ throw new UnsupportedOperationException("No diagnostics messages from dx");
+ }
+
+ @Override
public DXTestRunResult createRunResult(AndroidApp app, ProcessResult result) {
return new DXTestRunResult(app, result);
}
diff --git a/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java b/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
index bef1e02..4ea8953 100644
--- a/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
@@ -25,6 +25,11 @@
}
@Override
+ public TestDiagnosticMessages getDiagnosticMessages() {
+ throw new UnsupportedOperationException("No diagnostics messages from dx");
+ }
+
+ @Override
public CodeInspector inspector() throws IOException, ExecutionException {
return new CodeInspector(app, proguardMap);
}
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index 5550415..ee0e8af 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -25,7 +25,9 @@
public static R8TestBuilder create(TestState state, Backend backend, R8Mode mode) {
R8Command.Builder builder =
- mode == R8Mode.Full ? R8Command.builder() : new CompatProguardCommandBuilder();
+ mode == R8Mode.Full
+ ? R8Command.builder(state.getDiagnosticsHandler())
+ : new CompatProguardCommandBuilder(true, state.getDiagnosticsHandler());
return new R8TestBuilder(state, builder, backend);
}
diff --git a/src/test/java/com/android/tools/r8/R8TestCompileResult.java b/src/test/java/com/android/tools/r8/R8TestCompileResult.java
index 35cb176..d27a4a0 100644
--- a/src/test/java/com/android/tools/r8/R8TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/R8TestCompileResult.java
@@ -27,6 +27,11 @@
}
@Override
+ public TestDiagnosticMessages getDiagnosticMessages() {
+ return state.getDiagnosticsMessages();
+ }
+
+ @Override
public CodeInspector inspector() throws IOException, ExecutionException {
return new CodeInspector(app, proguardMap);
}
diff --git a/src/test/java/com/android/tools/r8/TestCompileResult.java b/src/test/java/com/android/tools/r8/TestCompileResult.java
index 61f9def..34ffcaa 100644
--- a/src/test/java/com/android/tools/r8/TestCompileResult.java
+++ b/src/test/java/com/android/tools/r8/TestCompileResult.java
@@ -4,6 +4,9 @@
package com.android.tools.r8;
import static com.android.tools.r8.TestBase.Backend.DEX;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.fail;
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.ToolHelper.DexVm;
@@ -18,6 +21,7 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.concurrent.ExecutionException;
+import org.hamcrest.Matcher;
public abstract class TestCompileResult<RR extends TestRunResult> {
final TestState state;
@@ -30,6 +34,8 @@
public abstract Backend getBackend();
+ public abstract TestDiagnosticMessages getDiagnosticMessages();
+
protected abstract RR createRunResult(AndroidApp add, ProcessResult result);
public RR run(Class<?> mainClass) throws IOException {
@@ -62,6 +68,38 @@
return this;
}
+ public TestCompileResult<RR> assertNoMessages() {
+ assertEquals(0, getDiagnosticMessages().getInfos().size());
+ assertEquals(0, getDiagnosticMessages().getWarnings().size());
+ assertEquals(0, getDiagnosticMessages().getErrors().size());
+ return this;
+ }
+
+ public TestCompileResult<RR> assertOnlyInfos() {
+ assertNotEquals(0, getDiagnosticMessages().getInfos().size());
+ assertEquals(0, getDiagnosticMessages().getWarnings().size());
+ assertEquals(0, getDiagnosticMessages().getErrors().size());
+ return this;
+ }
+
+ public TestCompileResult<RR> assertOnlyWarnings() {
+ assertEquals(0, getDiagnosticMessages().getInfos().size());
+ assertNotEquals(0, getDiagnosticMessages().getWarnings().size());
+ assertEquals(0, getDiagnosticMessages().getErrors().size());
+ return this;
+ }
+
+ public TestCompileResult<RR> assertWarningMessageThatMatches(Matcher<String> matcher) {
+ assertNotEquals(0, getDiagnosticMessages().getWarnings().size());
+ for (int i = 0; i < getDiagnosticMessages().getWarnings().size(); i++) {
+ if (matcher.matches(getDiagnosticMessages().getWarnings().get(i).getDiagnosticMessage())) {
+ return this;
+ }
+ }
+ fail("No warning matches " + matcher.toString());
+ return this;
+ }
+
public DebugTestConfig debugConfig() {
// Rethrow exceptions since debug config is usually used in a delayed wrapper which
// does not declare exceptions.
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java b/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
new file mode 100644
index 0000000..3e734cc
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
@@ -0,0 +1,16 @@
+// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8;
+
+import java.util.List;
+
+public interface TestDiagnosticMessages {
+
+ public List<Diagnostic> getInfos();
+
+ public List<Diagnostic> getWarnings();
+
+ public List<Diagnostic> getErrors();
+}
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java b/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
new file mode 100644
index 0000000..d0476b9
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
@@ -0,0 +1,41 @@
+// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestDiagnosticMessagesImpl implements DiagnosticsHandler, TestDiagnosticMessages {
+ private final List<Diagnostic> infos = new ArrayList<>();
+ private final List<Diagnostic> warnings = new ArrayList<>();
+ private final List<Diagnostic> errors = new ArrayList<>();
+
+ @Override
+ public void info(Diagnostic info) {
+ infos.add(info);
+ }
+
+ @Override
+ public void warning(Diagnostic warning) {
+ warnings.add(warning);
+ }
+
+ @Override
+ public void error(Diagnostic error) {
+ errors.add(error);
+ }
+
+ public List<Diagnostic> getInfos() {
+ return infos;
+ }
+
+ public List<Diagnostic> getWarnings() {
+ return warnings;
+ }
+
+ public List<Diagnostic> getErrors() {
+ return errors;
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/TestState.java b/src/test/java/com/android/tools/r8/TestState.java
index d516c7c..bdb4e2f 100644
--- a/src/test/java/com/android/tools/r8/TestState.java
+++ b/src/test/java/com/android/tools/r8/TestState.java
@@ -10,6 +10,7 @@
public class TestState {
private final TemporaryFolder temp;
+ private final TestDiagnosticMessagesImpl messages = new TestDiagnosticMessagesImpl();
public TestState(TemporaryFolder temp) {
this.temp = temp;
@@ -18,4 +19,12 @@
public Path getNewTempFolder() throws IOException {
return temp.newFolder().toPath();
}
+
+ DiagnosticsHandler getDiagnosticsHandler() {
+ return messages;
+ }
+
+ public TestDiagnosticMessages getDiagnosticsMessages() {
+ return messages;
+ }
}