blob: 046a14bddf87644771112c0d3071150d005bc955 [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.CompilationException;
import com.android.tools.r8.debug.DebugTestBase;
import com.android.tools.r8.shaking.ProguardKeepRule;
import com.android.tools.r8.shaking.ProguardRuleParserException;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.util.Collections;
import java.util.concurrent.ExecutionException;
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 DebuggeePath debuggeePath;
@BeforeClass
public static void initDebuggeePath()
throws IOException, CompilationException, ExecutionException, ProguardRuleParserException {
debuggeePath =
DebuggeePath.makeDex(
compileToDexViaR8(
null,
pg -> {
pg.setRenameSourceFileAttribute(TEST_FILE);
pg.addKeepAttributePatterns(ImmutableList.of("SourceFile", "LineNumberTable"));
},
DEBUGGEE_JAR,
Collections.<String>emptyList(),
false));
}
/**
* replica of {@link com.android.tools.r8.debug.ClassInitializationTest#testBreakpointInEmptyClassInitializer}
*/
@Test
public void testBreakpointInEmptyClassInitializer() throws Throwable {
final String CLASS = "ClassInitializerEmpty";
runDebugTest(
debuggeePath, 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(
debuggeePath,
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(
debuggeePath,
"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());
}
}