Modernize StaticLibraryValuesChangeTest
with this, we can run the test on legacy VM that doesn't support
multi-dex. In an old-fashioned way, AndroidApp with two input dex'es
can't be given to dalvikvm.
Bug: 66944616
Change-Id: I8b28640b6641ec781971f49fc44272be9fcf5600
diff --git a/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java b/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java
index a6c0d57..16691d8 100644
--- a/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/staticvalues/inlibraries/StaticLibraryValuesChangeTest.java
@@ -4,21 +4,35 @@
package com.android.tools.r8.rewrite.staticvalues.inlibraries;
-import static org.junit.Assert.assertEquals;
-
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.jasmin.JasminBuilder;
-import com.android.tools.r8.origin.EmbeddedOrigin;
import com.android.tools.r8.smali.SmaliBuilder;
-import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.PreloadedClassFileProvider;
import com.google.common.collect.ImmutableList;
-import org.junit.Assume;
+import java.nio.file.Path;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+@RunWith(Parameterized.class)
public class StaticLibraryValuesChangeTest extends TestBase {
+
+ private final TestParameters parameters;
+
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withDexRuntimes().build();
+ }
+
+ public StaticLibraryValuesChangeTest(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
@Test
public void testStatic() throws Exception {
/*
@@ -38,10 +52,6 @@
* The third version is used for running the R8 compiled TestMain on Art.
*/
- // TODO(66944616): Can we make this work on Dalvik as well?
- Assume.assumeTrue("Skipping on VM versions < 4.4.4",
- ToolHelper.getDexVm().getVersion().isNewerThan(Version.V4_4_4));
-
// Build the second version of LibraryClass
JasminBuilder compileTimeLibrary = new JasminBuilder();
JasminBuilder.ClassBuilder clazz = compileTimeLibrary.addClass(
@@ -53,15 +63,6 @@
" iconst_2",
" ireturn");
- // Compile TestMain with R8 using the second version of LibraryClass as library.
- AndroidApp.Builder builder = AndroidApp.builder();
- builder.addProgramFiles(ToolHelper.getClassFileForTestClass(TestMain.class));
- builder.addLibraryFiles(ToolHelper.getDefaultAndroidJar());
- builder.addLibraryResourceProvider(PreloadedClassFileProvider.fromClassData(
- "Lcom/android/tools/r8/rewrite/staticvalues/inlibraries/LibraryClass;",
- compileTimeLibrary.buildClasses().get(0)));
- AndroidApp app = compileWithR8(builder.build(), "-dontshrink\n-dontobfuscate\n");
-
// Build the third version of LibraryClass
SmaliBuilder runtimeLibrary = new SmaliBuilder(LibraryClass.class.getCanonicalName());
runtimeLibrary.addStaticField("x", "I", "3");
@@ -74,10 +75,23 @@
" return v0"
);
- // Merge the compiled TestMain with the runtime version of LibraryClass.
- builder = AndroidApp.builder(app);
- builder.addDexProgramData(runtimeLibrary.compile(), EmbeddedOrigin.INSTANCE);
- String result = runOnArt(builder.build(), TestMain.class);
- assertEquals("33", result);
+ Path lib = temp.newFile("lib.dex").toPath().toAbsolutePath();
+ FileUtils.writeToFile(lib, null, runtimeLibrary.compile());
+
+ testForR8(parameters.getBackend())
+ .setMinApi(parameters.getRuntime())
+ .addProgramClasses(TestMain.class)
+ .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
+ // Compile TestMain with R8 using the second version of LibraryClass as library.
+ .addLibraryProvider(PreloadedClassFileProvider.fromClassData(
+ DescriptorUtils.javaTypeToDescriptor(LibraryClass.class.getName()),
+ compileTimeLibrary.buildClasses().get(0)))
+ .noTreeShaking()
+ .noMinification()
+ .compile()
+ // Merge the compiled TestMain with the runtime version of LibraryClass.
+ .addRunClasspathFiles(lib)
+ .run(parameters.getRuntime(), TestMain.class)
+ .assertSuccessWithOutput("33");
}
}