Extend test infrastructure to test JDK 17
Change-Id: I6c15a21ef2ac8ccff65ff82738c02adc38479672
diff --git a/build.gradle b/build.gradle
index 5b9c8df..a138d84 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,9 +2,10 @@
// 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.
+
+import desugaredlibrary.CustomConversionAsmRewriterTask
import dx.DexMergerTask
import dx.DxTask
-import desugaredlibrary.CustomConversionAsmRewriterTask
import net.ltgt.gradle.errorprone.CheckSeverity
import org.gradle.internal.os.OperatingSystem
import smali.SmaliTask
@@ -79,6 +80,14 @@
srcDirs "third_party/api_database/api_database"
}
}
+ main17 {
+ java {
+ srcDirs = ['src/main/java']
+ }
+ resources {
+ srcDirs "third_party/api_database/api_database"
+ }
+ }
test {
java {
srcDirs = [
@@ -252,6 +261,25 @@
main11Implementation group: 'org.ow2.asm', name: 'asm-analysis', version: asmVersion
main11Implementation group: 'org.ow2.asm', name: 'asm-util', version: asmVersion
+ main17Implementation "net.sf.jopt-simple:jopt-simple:$joptSimpleVersion"
+ main17Implementation "com.google.code.gson:gson:$gsonVersion"
+ // Include all of guava when compiling the code, but exclude annotations that we don't
+ // need from the packaging.
+ main17CompileOnly("com.google.guava:guava:$guavaVersion")
+ main17Implementation("com.google.guava:guava:$guavaVersion", {
+ exclude group: 'com.google.errorprone'
+ exclude group: 'com.google.code.findbugs'
+ exclude group: 'com.google.j2objc'
+ exclude group: 'org.codehaus.mojo'
+ })
+ main17Implementation group: 'it.unimi.dsi', name: 'fastutil', version: fastutilVersion
+ main17Implementation "org.jetbrains.kotlinx:kotlinx-metadata-jvm:$kotlinExtMetadataJVMVersion"
+ main17Implementation group: 'org.ow2.asm', name: 'asm', version: asmVersion
+ main17Implementation group: 'org.ow2.asm', name: 'asm-commons', version: asmVersion
+ main17Implementation group: 'org.ow2.asm', name: 'asm-tree', version: asmVersion
+ main17Implementation group: 'org.ow2.asm', name: 'asm-analysis', version: asmVersion
+ main17Implementation group: 'org.ow2.asm', name: 'asm-util', version: asmVersion
+
examplesTestNGRunnerCompile group: 'org.testng', name: 'testng', version: testngVersion
testCompile sourceSets.examples.output
@@ -630,6 +658,11 @@
JavaVersion.VERSION_11,
false)
setJdkCompilationWithCompatibility(
+ sourceSets.main17.compileJavaTaskName,
+ 'jdk-17',
+ JavaVersion.VERSION_17,
+ false)
+setJdkCompilationWithCompatibility(
sourceSets.examplesJava11.compileJavaTaskName,
'jdk-11',
JavaVersion.VERSION_11,
@@ -782,6 +815,11 @@
archiveFileName = 'sources_main_11.jar'
}
+task repackageSources17(type: Jar) {
+ from sourceSets.main17.output
+ archiveFileName = 'sources_main_17.jar'
+}
+
def r8CreateTask(name, baseName, sources, includeLibraryLicenses, includeSwissArmyKnife) {
return tasks.create("r8Create${name}", Jar) {
entryCompression ZipEntryCompression.STORED
@@ -872,6 +910,20 @@
outputs.files r8Task.outputs.files
}
+task r8WithDeps17 {
+ dependsOn repackageSources17
+ dependsOn repackageDeps
+ inputs.files ([repackageSources17.outputs, repackageDeps.outputs])
+ def r8Task = r8CreateTask(
+ 'WithDeps17',
+ 'r8_with_deps_17.jar',
+ repackageSources17.outputs.files + repackageDeps.outputs.files,
+ true,
+ true)
+ dependsOn r8Task
+ outputs.files r8Task.outputs.files
+}
+
task r8WithRelocatedDeps {
def output = "${buildDir}/libs/r8_with_relocated_deps.jar"
dependsOn r8RelocateTask(r8WithDeps, output)
@@ -886,6 +938,13 @@
outputs.file output
}
+task r8WithRelocatedDeps17 {
+ def output = "${buildDir}/libs/r8_with_relocated_deps_17.jar"
+ dependsOn r8RelocateTask(r8WithDeps17, output)
+ inputs.files r8WithDeps17.outputs.files
+ outputs.file output
+}
+
task r8WithoutDeps {
dependsOn repackageSources
inputs.files repackageSources.outputs
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 69f2167..4413de7 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -171,6 +171,8 @@
public static final Path R8_WITH_DEPS_11_JAR = Paths.get(LIBS_DIR, "r8_with_deps_11.jar");
public static final Path R8_WITH_RELOCATED_DEPS_11_JAR =
Paths.get(LIBS_DIR, "r8_with_relocated_deps_11.jar");
+ public static final Path R8_WITH_RELOCATED_DEPS_17_JAR =
+ Paths.get(LIBS_DIR, "r8_with_relocated_deps_17.jar");
public static final Path R8LIB_JAR = Paths.get(LIBS_DIR, "r8lib.jar");
public static final Path R8LIB_MAP = Paths.get(LIBS_DIR, "r8lib.jar.map");
public static final Path R8LIB_EXCLUDE_DEPS_JAR = Paths.get(LIBS_DIR, "r8lib-exclude-deps.jar");
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
deleted file mode 100644
index cb549f5..0000000
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2019, 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.desugar.nestaccesscontrol;
-
-import static junit.framework.TestCase.assertTrue;
-
-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.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-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 Java11R8CompilationTest extends TestBase {
-
- public Java11R8CompilationTest(TestParameters parameters) {
- this.parameters = parameters;
- }
-
- private final TestParameters parameters;
-
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters()
- // Use of APIs, such as java.nio.file.* are only available from 26+.
- .withApiLevelsStartingAtIncluding(AndroidApiLevel.O)
- .withDexRuntimes()
- .build();
- }
-
- private static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
-
- private static void assertNoNests(CodeInspector inspector) {
- assertTrue(
- inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
- }
-
- @Test
- public void testR8CompiledWithR8() throws Exception {
- testForR8(parameters.getBackend())
- .setMinApi(parameters.getApiLevel())
- .addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
- .addKeepRuleFiles(MAIN_KEEP)
- .compile()
- .inspect(this::assertNotEmpty)
- .inspect(Java11R8CompilationTest::assertNoNests);
- }
-
- private void assertNotEmpty(CodeInspector inspector) {
- assertTrue(inspector.allClasses().size() > 0);
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/Java11R8BootstrapTest.java
similarity index 75%
rename from src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
rename to src/test/java/com/android/tools/r8/desugar/r8bootstrap/Java11R8BootstrapTest.java
index 04e2842..b3a9adf 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/Java11R8BootstrapTest.java
@@ -1,12 +1,12 @@
-// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// Copyright (c) 2022, 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.desugar.nestaccesscontrol;
+package com.android.tools.r8.desugar.r8bootstrap;
+import static com.android.tools.r8.desugar.r8bootstrap.JavaBootstrapUtils.MAIN_KEEP;
import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertTrue;
import com.android.tools.r8.Jdk11TestUtils;
import com.android.tools.r8.TestBase;
@@ -15,8 +15,6 @@
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.cf.bootstrap.BootstrapCurrentEqualityTest;
-import com.android.tools.r8.utils.InternalOptions.DesugarState;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -37,7 +35,6 @@
@RunWith(Parameterized.class)
public class Java11R8BootstrapTest extends TestBase {
- private static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
private static final String[] HELLO_KEEP = {
"-keep class hello.Hello { public static void main(...);}"
};
@@ -63,31 +60,10 @@
}
private static Path compileR8(boolean desugar) throws Exception {
- // Shrink R8 11 with R8
- return testForR8(TestBase.getStaticTemp(), Backend.CF)
- .addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
- .addLibraryFiles(Jdk11TestUtils.getJdk11LibraryFiles(getStaticTemp()))
- .addKeepRuleFiles(MAIN_KEEP)
- .applyIf(
- desugar,
- builder ->
- builder.addOptionsModification(
- options -> {
- options.desugarState = DesugarState.ON;
- }))
- .compile()
- .inspect(inspector -> assertNests(inspector, desugar))
- .writeToZip();
- }
-
- private static void assertNests(CodeInspector inspector, boolean desugar) {
- if (desugar) {
- assertTrue(
- inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
- } else {
- assertTrue(
- inspector.allClasses().stream().anyMatch(subj -> subj.getDexProgramClass().isInANest()));
- }
+ return JavaBootstrapUtils.compileR8(
+ ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR,
+ Jdk11TestUtils.getJdk11LibraryFiles(getStaticTemp()),
+ desugar);
}
private Path[] jarsToCompare() {
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/Java17R8BootstrapTest.java
similarity index 65%
copy from src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
copy to src/test/java/com/android/tools/r8/desugar/r8bootstrap/Java17R8BootstrapTest.java
index 04e2842..2ed69e1 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/Java17R8BootstrapTest.java
@@ -1,12 +1,12 @@
-// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// Copyright (c) 2022, 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.desugar.nestaccesscontrol;
+package com.android.tools.r8.desugar.r8bootstrap;
+import static com.android.tools.r8.desugar.r8bootstrap.JavaBootstrapUtils.MAIN_KEEP;
import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertTrue;
import com.android.tools.r8.Jdk11TestUtils;
import com.android.tools.r8.TestBase;
@@ -15,8 +15,6 @@
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.cf.bootstrap.BootstrapCurrentEqualityTest;
-import com.android.tools.r8.utils.InternalOptions.DesugarState;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -28,24 +26,23 @@
import org.junit.runners.Parameterized.Parameters;
/**
- * This test relies on a freshly built build/libs/r8_with_relocated_deps_11.jar.
+ * This test relies on a freshly built build/libs/r8_with_relocated_deps_17.jar.
*
- * <p>The test compiles Hello/R8 with the same settings using R8 compiled with Java 11 (non shrunk),
+ * <p>The test compiles Hello/R8 with the same settings using R8 compiled with Java 17 (non shrunk),
* and the same but shrunk with/without nest desugaring. All generated jars should be run correctly
* and identical.
*/
@RunWith(Parameterized.class)
-public class Java11R8BootstrapTest extends TestBase {
+public class Java17R8BootstrapTest extends TestBase {
- private static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
private static final String[] HELLO_KEEP = {
"-keep class hello.Hello { public static void main(...);}"
};
- private static Path r8Lib11NoDesugar;
- private static Path r8Lib11Desugar;
+ private static Path r8Lib17NoDesugar;
+ private static Path r8Lib17Desugar;
- public Java11R8BootstrapTest(TestParameters parameters) {
+ public Java17R8BootstrapTest(TestParameters parameters) {
this.parameters = parameters;
}
@@ -53,54 +50,39 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK11).build();
+ return getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK17).build();
+ }
+
+ private static boolean supportsSealedClassesWhenGeneratingCf() {
+ // TODO(b/227160052): When this is true enable this test.
+ return false;
}
@BeforeClass
public static void beforeAll() throws Exception {
- r8Lib11NoDesugar = compileR8(false);
- r8Lib11Desugar = compileR8(true);
+ if (!supportsSealedClassesWhenGeneratingCf()) {
+ return;
+ }
+ r8Lib17NoDesugar = compileR8(false);
+ r8Lib17Desugar = compileR8(true);
}
private static Path compileR8(boolean desugar) throws Exception {
- // Shrink R8 11 with R8
- return testForR8(TestBase.getStaticTemp(), Backend.CF)
- .addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
- .addLibraryFiles(Jdk11TestUtils.getJdk11LibraryFiles(getStaticTemp()))
- .addKeepRuleFiles(MAIN_KEEP)
- .applyIf(
- desugar,
- builder ->
- builder.addOptionsModification(
- options -> {
- options.desugarState = DesugarState.ON;
- }))
- .compile()
- .inspect(inspector -> assertNests(inspector, desugar))
- .writeToZip();
- }
-
- private static void assertNests(CodeInspector inspector, boolean desugar) {
- if (desugar) {
- assertTrue(
- inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
- } else {
- assertTrue(
- inspector.allClasses().stream().anyMatch(subj -> subj.getDexProgramClass().isInANest()));
- }
+ return JavaBootstrapUtils.compileR8(
+ ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR,
+ Jdk11TestUtils.getJdk11LibraryFiles(getStaticTemp()),
+ desugar);
}
private Path[] jarsToCompare() {
- return new Path[] {
- ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR,
- r8Lib11NoDesugar,
- r8Lib11Desugar
- };
+ return new Path[] {ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR, r8Lib17NoDesugar, r8Lib17Desugar};
}
@Test
public void testHello() throws Exception {
Assume.assumeTrue(!ToolHelper.isWindows());
+ Assume.assumeTrue(JavaBootstrapUtils.exists(ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR));
+ Assume.assumeTrue(supportsSealedClassesWhenGeneratingCf());
Path prevGeneratedJar = null;
String prevRunResult = null;
for (Path jar : jarsToCompare()) {
@@ -131,7 +113,9 @@
public void testR8() throws Exception {
Assume.assumeTrue(!ToolHelper.isWindows());
Assume.assumeTrue(parameters.isCfRuntime());
- Assume.assumeTrue(CfVm.JDK11.lessThanOrEqual(parameters.getRuntime().asCf().getVm()));
+ Assume.assumeTrue(CfVm.JDK17.lessThanOrEqual(parameters.getRuntime().asCf().getVm()));
+ Assume.assumeTrue(JavaBootstrapUtils.exists(ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR));
+ Assume.assumeTrue(supportsSealedClassesWhenGeneratingCf());
Path prevGeneratedJar = null;
for (Path jar : jarsToCompare()) {
Path generatedJar =
diff --git a/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaBootstrapUtils.java b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaBootstrapUtils.java
new file mode 100644
index 0000000..63d7dde
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaBootstrapUtils.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, 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.desugar.r8bootstrap;
+
+import static junit.framework.TestCase.assertTrue;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.utils.InternalOptions.DesugarState;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class JavaBootstrapUtils extends TestBase {
+
+ static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
+
+ static boolean exists(Path r8WithRelocatedDeps) {
+ // This test runs only if the dependencies have been generated using:
+ // <code> tools/gradle.py r8WithRelocatedDeps17 r8WithRelocatedDeps11 </code>
+ return Files.exists(r8WithRelocatedDeps);
+ }
+
+ static Path compileR8(Path r8WithRelocatedDeps, Path[] libraryFiles, boolean desugar)
+ throws Exception {
+ if (!exists(r8WithRelocatedDeps)) {
+ return null;
+ }
+ // Shrink R8 11 with R8
+ return testForR8(getStaticTemp(), Backend.CF)
+ .addProgramFiles(r8WithRelocatedDeps)
+ .addLibraryFiles(libraryFiles)
+ .addKeepRuleFiles(MAIN_KEEP)
+ .applyIf(
+ desugar,
+ builder ->
+ builder.addOptionsModification(
+ options -> {
+ options.desugarState = DesugarState.ON;
+ }))
+ .compile()
+ .inspect(inspector -> assertNests(inspector, desugar))
+ .writeToZip();
+ }
+
+ private static void assertNests(CodeInspector inspector, boolean desugar) {
+ if (desugar) {
+ assertTrue(
+ inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
+ } else {
+ assertTrue(
+ inspector.allClasses().stream().anyMatch(subj -> subj.getDexProgramClass().isInANest()));
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaD8CompilationTest.java
similarity index 78%
rename from src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
rename to src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaD8CompilationTest.java
index a4c0ca7..1970880 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaD8CompilationTest.java
@@ -1,8 +1,8 @@
-// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// Copyright (c) 2022, 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.desugar.nestaccesscontrol;
+package com.android.tools.r8.desugar.r8bootstrap;
import static com.android.tools.r8.utils.FileUtils.CLASS_EXTENSION;
import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
@@ -12,7 +12,6 @@
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.cf.CfVersion;
import com.android.tools.r8.references.Reference;
@@ -20,9 +19,12 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.ZipUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
+import java.util.List;
+import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -32,15 +34,21 @@
import org.objectweb.asm.ClassVisitor;
@RunWith(Parameterized.class)
-public class Java11D8CompilationTest extends TestBase {
+public class JavaD8CompilationTest extends TestBase {
- public Java11D8CompilationTest(TestParameters parameters) {
+ private final Path r8WithRelocatedDeps;
+
+ public JavaD8CompilationTest(TestParameters parameters, Path r8WithRelocatedDeps) {
parameters.assertNoneRuntime();
+ this.r8WithRelocatedDeps = r8WithRelocatedDeps;
}
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withNoneRuntime().build();
+ @Parameters(name = "{0}, java: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withNoneRuntime().build(),
+ ImmutableList.of(
+ ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR, ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR));
}
private static void assertNoNests(CodeInspector inspector) {
@@ -50,22 +58,24 @@
@Test
public void testR8CompiledWithD8() throws Exception {
+ Assume.assumeTrue(JavaBootstrapUtils.exists(r8WithRelocatedDeps));
testForD8()
- .addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
+ .addProgramFiles(r8WithRelocatedDeps)
.addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.compile()
- .inspect(Java11D8CompilationTest::assertNoNests);
+ .inspect(JavaD8CompilationTest::assertNoNests);
}
@Test
public void testR8CompiledWithD8ToCf() throws Exception {
+ Assume.assumeTrue(JavaBootstrapUtils.exists(r8WithRelocatedDeps));
Path r8Desugared =
testForD8(Backend.CF)
- .addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
+ .addProgramFiles(r8WithRelocatedDeps)
.addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setMinApi(AndroidApiLevel.B)
.compile()
- .inspect(Java11D8CompilationTest::assertNoNests)
+ .inspect(JavaD8CompilationTest::assertNoNests)
.writeToZip();
// Check that the desugared classes has the expected class file versions and that no nest
diff --git a/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaR8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaR8CompilationTest.java
new file mode 100644
index 0000000..09cb049
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/r8bootstrap/JavaR8CompilationTest.java
@@ -0,0 +1,69 @@
+// Copyright (c) 2022, 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.desugar.r8bootstrap;
+
+import static junit.framework.TestCase.assertTrue;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import org.junit.Assume;
+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 JavaR8CompilationTest extends TestBase {
+
+ private final TestParameters parameters;
+ private final Path r8WithRelocatedDeps;
+
+ public JavaR8CompilationTest(TestParameters parameters, Path r8WithRelocatedDeps) {
+ this.parameters = parameters;
+ this.r8WithRelocatedDeps = r8WithRelocatedDeps;
+ }
+
+ @Parameters(name = "{0}, java: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters()
+ // Use of APIs, such as java.nio.file.* are only available from 26+.
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.O)
+ .withDexRuntimes()
+ .build(),
+ ImmutableList.of(
+ ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR, ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR));
+ }
+
+ private static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
+
+ private static void assertNoNests(CodeInspector inspector) {
+ assertTrue(
+ inspector.allClasses().stream().noneMatch(subj -> subj.getDexProgramClass().isInANest()));
+ }
+
+ @Test
+ public void testR8CompiledWithR8() throws Exception {
+ Assume.assumeTrue(JavaBootstrapUtils.exists(r8WithRelocatedDeps));
+ testForR8(parameters.getBackend())
+ .setMinApi(parameters.getApiLevel())
+ .addProgramFiles(r8WithRelocatedDeps)
+ .addKeepRuleFiles(MAIN_KEEP)
+ .compile()
+ .inspect(this::assertNotEmpty)
+ .inspect(JavaR8CompilationTest::assertNoNests);
+ }
+
+ private void assertNotEmpty(CodeInspector inspector) {
+ assertTrue(inspector.allClasses().size() > 0);
+ }
+}
diff --git a/tools/test.py b/tools/test.py
index 570da44..a2a1ba7 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -359,10 +359,8 @@
gradle_args.append('-Ptesting-state-name=' + options.testing_state_name)
# Build an R8 with dependencies for bootstrapping tests before adding test sources.
- gradle_args.append('r8WithDeps')
- gradle_args.append('r8WithDeps11')
gradle_args.append('r8WithRelocatedDeps')
- gradle_args.append('r8WithRelocatedDeps11')
+ gradle_args.append('r8WithRelocatedDeps17')
# Add Gradle tasks
gradle_args.append('cleanTest')