blob: ca86a53d4c0e44399f239b55c7e474eec943f60f [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.naming;
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.OutputMode;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.debug.DebugTestBase;
import com.android.tools.r8.debug.DebugTestConfig;
import com.android.tools.r8.debug.DexDebugTestConfig;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Tests -renamesourcefileattribute.
*/
public class RenameSourceFileDebugTest extends DebugTestBase {
private static final String TEST_FILE = "TestFile.java";
private static DebugTestConfig config;
@BeforeClass
public static void initDebuggeePath() throws Exception {
AndroidApiLevel minSdk = ToolHelper.getMinApiLevelForDexVm();
Path outdir = temp.newFolder().toPath();
Path outjar = outdir.resolve("r8_compiled.jar");
Path proguardMapPath = outdir.resolve("proguard.map");
ToolHelper.runR8(
ToolHelper.addProguardConfigurationConsumer(
R8Command.builder(),
pgConfig -> {
pgConfig.setRenameSourceFileAttribute(TEST_FILE);
pgConfig.addKeepAttributePatterns(
ImmutableList.of("SourceFile", "LineNumberTable"));
})
.addProgramFiles(DEBUGGEE_JAR)
.setMinApiLevel(minSdk.getLevel())
.addLibraryFiles(ToolHelper.getAndroidJar(minSdk))
.setMode(CompilationMode.DEBUG)
.setOutput(outjar, OutputMode.DexIndexed)
.setProguardMapOutputPath(proguardMapPath)
.build());
config = new DexDebugTestConfig(outjar);
config.setProguardMap(proguardMapPath);
}
/**
* replica of {@link com.android.tools.r8.debug.ClassInitializationTest#testBreakpointInEmptyClassInitializer}
*/
@Test
public void testBreakpointInEmptyClassInitializer() throws Throwable {
final String CLASS = "ClassInitializerEmpty";
runDebugTest(
config, CLASS, breakpoint(CLASS, "<clinit>"), run(), checkLine(TEST_FILE, 8), run());
}
/**
* replica of {@link com.android.tools.r8.debug.LocalsTest#testNoLocal},
* except for checking overwritten class file.
*/
@Test
public void testNoLocal() throws Throwable {
final String className = "Locals";
final String methodName = "noLocals";
runDebugTest(
config,
className,
breakpoint(className, methodName),
run(),
checkMethod(className, methodName),
checkLine(TEST_FILE, 8),
checkNoLocal(),
stepOver(),
checkMethod(className, methodName),
checkLine(TEST_FILE, 9),
checkNoLocal(),
run());
}
/**
* replica of {@link com.android.tools.r8.debug.MultipleReturnsTest#testMultipleReturns}
*/
@Test
public void testMultipleReturns() throws Throwable {
runDebugTest(
config,
"MultipleReturns",
breakpoint("MultipleReturns", "multipleReturns"),
run(),
stepOver(),
checkLine(TEST_FILE, 16), // this should be the 1st return statement
run(),
stepOver(),
checkLine(TEST_FILE, 18), // this should be the 2nd return statement
run());
}
}