blob: da83ed9f769609bb5186c77804aaa84020372d77 [file] [log] [blame]
// 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.debuginfo;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.D8;
import com.android.tools.r8.D8Command;
import com.android.tools.r8.OutputMode;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
import com.android.tools.r8.utils.TestDescriptionWatcher;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.ExecutionException;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
public class DebugInfoTestBase {
public static final Path DX_PREBUILT =
Paths.get(ToolHelper.BUILD_DIR, "test", "debuginfo_examples_dex.jar");
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
@Rule
public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
static AndroidApp compileWithD8(Class... classes) throws CompilationFailedException {
D8Command.Builder builder = D8Command.builder();
for (Class clazz : classes) {
builder.addProgramFiles(ToolHelper.getClassFileForTestClass(clazz));
}
AndroidAppConsumers appSink = new AndroidAppConsumers(builder);
D8.run(builder.setMode(CompilationMode.DEBUG).build());
return appSink.build();
}
static AndroidApp getDxCompiledSources() throws IOException {
return AndroidApp.builder().addProgramFiles(DX_PREBUILT).build();
}
public static DebugInfoInspector inspectMethod(
AndroidApp app, Class type, String returnType, String methodName, String... parameterTypes)
throws IOException, ExecutionException {
return new DebugInfoInspector(
app, type.getCanonicalName(), new MethodSignature(methodName, returnType, parameterTypes));
}
protected String runOnArt(AndroidApp app, String main) throws IOException {
Path out = temp.getRoot().toPath().resolve("out.zip");
app.writeToZip(out, OutputMode.DexIndexed);
return ToolHelper.runArtNoVerificationErrors(ImmutableList.of(out.toString()), main, null);
}
protected String runOnJava(Class clazz) throws Exception {
ProcessResult result = ToolHelper.runJava(clazz);
if (result.exitCode != 0) {
System.out.println("Std out:");
System.out.println(result.stdout);
System.out.println("Std err:");
System.out.println(result.stderr);
assertEquals(0, result.exitCode);
}
return result.stdout;
}
}