Update failing test to new test builders and fix status.
Change-Id: Ib997a29f22c3cc4bedeeb2b79ab4539277d61480
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
index 375d4fa..6d2cd5a 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/sourcelibrary/MemberResolutionAsmTest.java
@@ -9,43 +9,40 @@
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import com.android.tools.r8.AsmTestBase;
-import com.android.tools.r8.R8Command;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.R8TestCompileResult;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.naming.applymapping.shared.NoMappingDumps.HasMappingDump;
import com.android.tools.r8.naming.applymapping.shared.NoMappingDumps.NoMappingDump;
import com.android.tools.r8.naming.applymapping.shared.NoMappingDumps.NoMappingMainDump;
import com.android.tools.r8.naming.applymapping.shared.SwappingDump.ADump;
import com.android.tools.r8.naming.applymapping.shared.SwappingDump.BDump;
import com.android.tools.r8.naming.applymapping.shared.SwappingDump.MainDump;
-import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
-import java.nio.file.Path;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
-public class MemberResolutionAsmTest extends AsmTestBase {
- private final Backend backend;
+public class MemberResolutionAsmTest extends TestBase {
+ private final TestParameters parameters;
- @Parameterized.Parameters(name = "backend: {0}")
- public static Backend[] data() {
- return ToolHelper.getBackends();
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
- public MemberResolutionAsmTest(Backend backend) {
- this.backend = backend;
+ public MemberResolutionAsmTest(TestParameters parameters) {
+ this.parameters = parameters;
}
// class HasMapping { // : X
@@ -77,44 +74,39 @@
@Test
public void test_noMapping() throws Exception {
String main = "NoMappingMain";
- AndroidApp input =
- buildAndroidApp(HasMappingDump.dump(), NoMappingDump.dump(), NoMappingMainDump.dump());
+ String expected = StringUtils.lines("HasMapping#foo", "NoMapping#foo");
- Path mapPath = temp.newFile("test-mapping.txt").toPath();
- List<String> pgMap =
- ImmutableList.of(
- "HasMapping -> X:",
- " void foo() -> a",
- "NoMapping -> Y:"
+ List<byte[]> inputs =
+ ImmutableList.of(HasMappingDump.dump(), NoMappingDump.dump(), NoMappingMainDump.dump());
+
+ if (parameters.isCfRuntime()) {
+ testForJvm()
+ .addProgramClassFileData(inputs)
+ .run(parameters.getRuntime(), main)
+ .assertSuccessWithOutput(expected);
+ }
+
+ String pgMap =
+ StringUtils.joinLines(
+ "HasMapping -> X:", " void foo() -> a", "NoMapping -> Y:"
// Intentionally missing a mapping for `private` foo().
);
- FileUtils.writeTextFile(mapPath, pgMap);
- R8Command.Builder builder = ToolHelper.prepareR8CommandBuilder(input, emptyConsumer(backend));
- builder
- .addProguardConfiguration(
- ImmutableList.of(
- keepMainProguardConfiguration(main),
- // Do not turn on -allowaccessmodification
- "-applymapping " + mapPath),
- Origin.unknown())
- .addLibraryFiles(runtimeJar(backend));
- AndroidApp processedApp =
- ToolHelper.runR8(
- builder.build(),
- options -> {
- options.enableInlining = false;
- options.enableVerticalClassMerging = false;
- });
+ CodeInspector codeInspector =
+ testForR8(parameters.getBackend())
+ .addProgramClassFileData(inputs)
+ .setMinApi(parameters.getApiLevel())
+ .addKeepMainRule(main)
+ .addApplyMapping(pgMap)
+ .addOptionsModification(
+ options -> {
+ options.enableInlining = false;
+ options.enableVerticalClassMerging = false;
+ })
+ .run(parameters.getRuntime(), main)
+ .assertSuccessWithOutput(expected)
+ .inspector();
- List<byte[]> classBytes =
- ImmutableList.of(HasMappingDump.dump(), NoMappingDump.dump(), NoMappingMainDump.dump());
- ProcessResult outputBefore = runOnJavaRaw(main, classBytes, ImmutableList.of());
- assertEquals(0, outputBefore.exitCode);
- String outputAfter = runOnVM(processedApp, main, backend);
- assertEquals(outputBefore.stdout.trim(), outputAfter.trim());
-
- CodeInspector codeInspector = new CodeInspector(processedApp, mapPath);
ClassSubject base = codeInspector.clazz("HasMapping");
assertThat(base, isPresent());
assertThat(base, isRenamed());
@@ -159,60 +151,52 @@
@Test
public void test_swapping() throws Exception {
String main = "Main";
- AndroidApp input = buildAndroidApp(ADump.dump(), BDump.dump(), MainDump.dump());
-
- Path mapPath = temp.newFile("test-mapping.txt").toPath();
- List<String> pgMap =
- ImmutableList.of(
- "A -> X:",
- " void x() -> y",
- " void y() -> x",
- "B -> Y:"
- // Intentionally missing mappings for non-overridden members
- );
- FileUtils.writeTextFile(mapPath, pgMap);
-
- R8Command.Builder builder = ToolHelper.prepareR8CommandBuilder(input, emptyConsumer(backend));
- builder
- .addProguardConfiguration(
- ImmutableList.of(
- keepMainProguardConfiguration(main),
- // Do not turn on -allowaccessmodification
- "-applymapping " + mapPath),
- Origin.unknown())
- .addLibraryFiles(runtimeJar(backend));
- AndroidApp processedApp =
- ToolHelper.runR8(
- builder.build(),
- options -> {
- options.enableInlining = false;
- options.enableVerticalClassMerging = false;
- });
-
- List<byte[]> classBytes = ImmutableList.of(ADump.dump(), BDump.dump(), MainDump.dump());
- ProcessResult outputBefore = runOnJavaRaw(main, classBytes, ImmutableList.of());
- assertNotEquals(0, outputBefore.exitCode);
String expectedErrorMessage = "IllegalAccessError";
String expectedErrorSignature = "A.x()V";
- assertThat(outputBefore.stderr, containsString(expectedErrorMessage));
- assertThat(outputBefore.stderr, containsString(expectedErrorSignature));
- ProcessResult outputAfter = runOnVMRaw(processedApp, main, backend);
- assertNotEquals(0, outputAfter.exitCode);
+
+ List<byte[]> input = ImmutableList.of(ADump.dump(), BDump.dump(), MainDump.dump());
+ if (parameters.isCfRuntime()) {
+ testForJvm()
+ .addProgramClassFileData(input)
+ .run(parameters.getRuntime(), main)
+ .assertFailureWithErrorThatThrows(IllegalAccessError.class)
+ .assertFailureWithErrorThatMatches(containsString(expectedErrorSignature));
+ }
+
+ String pgMap =
+ StringUtils.joinLines(
+ "A -> X:", " void x() -> y", " void y() -> x", "B -> Y:"
+ // Intentionally missing mappings for non-overridden members
+ );
+
expectedErrorSignature = "X.y()V";
- if (backend == Backend.DEX) {
+ if (parameters.isDexRuntime()) {
+ Version version = parameters.getRuntime().asDex().getVm().getVersion();
expectedErrorSignature = "void X.y()";
- if (ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(Version.V6_0_1)) {
- expectedErrorMessage = "IncompatibleClassChangeError";
- }
- if (ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(Version.V4_4_4)) {
+ if (version.isOlderThanOrEqual(Version.V4_4_4)) {
expectedErrorMessage = "illegal method access";
expectedErrorSignature = "LX;.y ()V";
}
}
- assertThat(outputAfter.stderr, containsString(expectedErrorMessage));
- assertThat(outputAfter.stderr, containsString(expectedErrorSignature));
+ R8TestCompileResult compileResult =
+ testForR8(parameters.getBackend())
+ .setMinApi(parameters.getApiLevel())
+ .addProgramClassFileData(input)
+ .addKeepMainRule(main)
+ .addApplyMapping(pgMap)
+ .addOptionsModification(
+ options -> {
+ options.enableInlining = false;
+ options.enableVerticalClassMerging = false;
+ })
+ .compile();
- CodeInspector codeInspector = new CodeInspector(processedApp, mapPath);
+ compileResult
+ .run(parameters.getRuntime(), main)
+ .assertFailureWithErrorThatMatches(containsString(expectedErrorMessage))
+ .assertFailureWithErrorThatMatches(containsString(expectedErrorSignature));
+
+ CodeInspector codeInspector = compileResult.inspector();
ClassSubject base = codeInspector.clazz("A");
assertThat(base, isPresent());
assertThat(base, isRenamed());