blob: 91c01c43347cef96a6b1b979e5f5dfdfbf4814d8 [file] [log] [blame]
// Copyright (c) 2018, 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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.io.PrintStream;
import java.util.concurrent.ExecutionException;
public class TestRunResult {
private final AndroidApp app;
private final ProcessResult result;
public TestRunResult(AndroidApp app, ProcessResult result) {
this.app = app;
this.result = result;
}
public TestRunResult assertSuccess() {
assertEquals(errorMessage("Expected run to succeed."), 0, result.exitCode);
return this;
}
public TestRunResult assertFailure() {
assertNotEquals(errorMessage("Expected run to fail."), 0, result.exitCode);
return this;
}
public void assertSuccessWithOutput(String expected) {
assertSuccess();
assertEquals(errorMessage("Run std output incorrect."), expected, result.stdout);
}
public CodeInspector inspector() throws IOException, ExecutionException {
// Inspection post run implies success. If inspection of an invalid program is needed it should
// be done on the compilation result or on the input.
assertSuccess();
assertNotNull(app);
return new CodeInspector(app);
}
private String errorMessage(String message) {
StringBuilder builder = new StringBuilder(message).append('\n');
appendInfo(builder);
return builder.toString();
}
private void appendInfo(StringBuilder builder) {
builder.append("APPLICATION: ");
appendApplication(builder);
builder.append('\n');
appendProcessResult(builder);
}
private void appendApplication(StringBuilder builder) {
builder.append(app == null ? "<default>" : app.toString());
}
private void appendProcessResult(StringBuilder builder) {
builder.append("COMMAND: ").append(result.command).append('\n').append(result);
}
public TestRunResult writeInfo(PrintStream ps) {
StringBuilder sb = new StringBuilder();
appendInfo(sb);
ps.println(sb.toString());
return this;
}
public TestRunResult writeApplicaion(PrintStream ps) {
StringBuilder sb = new StringBuilder();
appendApplication(sb);
ps.println(sb.toString());
return this;
}
public TestRunResult writeProcessResult(PrintStream ps) {
StringBuilder sb = new StringBuilder();
appendProcessResult(sb);
ps.println(sb.toString());
return this;
}
}