Internalize remaining kotlin tests and remove the build targets
Bug: 174292935
Change-Id: I6da556ec5f54944ec91d48bae8017d10c30ad560
diff --git a/build.gradle b/build.gradle
index 1077080..433b39a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -43,6 +43,8 @@
gsonVersion = '2.7'
junitVersion = '4.13-beta-2'
mockitoVersion = '2.10.0'
+ // The kotlin version is only here to specify the kotlin language level,
+ // all kotlin compilations are done in tests.
kotlinVersion = '1.3.72'
kotlinExtMetadataJVMVersion = '0.1.0'
smaliVersion = '2.2b4'
@@ -148,12 +150,6 @@
srcDirs = ['src/test/testngrunner']
}
}
- examplesKotlin {
- java {
- srcDirs = ['src/test/examplesKotlin']
- }
- output.resourcesDir = 'build/classes/examplesKotlin'
- }
examplesAndroidN {
java {
srcDirs = ['src/test/examplesAndroidN']
@@ -274,7 +270,6 @@
supportLibs "com.android.support.test.espresso:espresso-core:$espressoVersion"
apiUsageSampleCompile sourceSets.main.output
apiUsageSampleCompile "com.google.guava:guava:$guavaVersion"
- examplesKotlinCompileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
kotlinR8TestResourcesCompileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
errorprone("com.google.errorprone:error_prone_core:$errorproneVersion")
testImplementation "org.jetbrains.kotlin:kotlin-reflect:1.3.31"
@@ -1229,18 +1224,6 @@
targetCompatibility = JavaVersion.VERSION_1_8
}
-task buildExampleKotlinJars {
- def kotlinSrcDir = file("src/test/examplesKotlin")
- kotlinSrcDir.eachDir { dir ->
- def name = dir.getName();
- dependsOn "compile_example_kotlin_${name}"
- task "compile_example_kotlin_${name}"(type: kotlin.Kotlinc) {
- source = fileTree(dir: file("src/test/examplesKotlin/${name}"), include: '**/*.kt')
- destination = file("build/test/examplesKotlin/${name}.jar")
- }
- }
-}
-
task buildProtoGeneratedSources {
def examplesProtoDir = file("src/test/examplesProto")
examplesProtoDir.eachDir { dir ->
@@ -1622,52 +1605,15 @@
}
}
-task buildExamplesKotlin {
- if (OperatingSystem.current().isMacOsX() || OperatingSystem.current().isWindows()) {
- logger.lifecycle("WARNING: Testing (including building kotlin examples) is only partially" +
- " supported on your platform (" + OperatingSystem.current().getName() + ").")
- } else if (!OperatingSystem.current().isLinux()) {
- logger.lifecycle("WARNING: Testing (including building kotlin examples) is not supported " +
- "on your platform. It is fully supported on Linux and partially supported on " +
- "Mac OS and Windows")
- return;
- }
- def examplesDir = file("src/test/examplesKotlin")
- examplesDir.eachDir { dir ->
- def name = dir.getName();
- dependsOn "dex_example_kotlin_${name}"
- def exampleOutputDir = file("build/test/examplesKotlin/" + name);
- def dexPath = file("${exampleOutputDir}")
- task "dex_example_kotlin_${name}"(type: DxTask,
- dependsOn: "compile_example_kotlin_${name}") {
- doFirst {
- if (!dexPath.exists()) {
- dexPath.mkdirs()
- }
- }
- source = files(tasks.getByPath("compile_example_kotlin_${name}")).asFileTree
- destination = dexPath
- debug = false
- }
- }
-}
-
task buildKotlinR8TestResources {
def examplesDir = file("src/test/kotlinR8TestResources")
examplesDir.eachDir { dir ->
kotlin.Kotlinc.KotlinTargetVersion.values().each { kotlinTargetVersion ->
def name = dir.getName()
def taskName = "jar_kotlinR8TestResources_${name}_${kotlinTargetVersion}"
- def outputFile = "build/test/kotlinR8TestResources/${kotlinTargetVersion}/${name}.jar"
def javaOutput = "build/test/kotlinR8TestResources/${kotlinTargetVersion}/${name}/java"
def javaOutputJarName = "${name}.java.jar"
def javaOutputJarDir = "build/test/kotlinR8TestResources/${kotlinTargetVersion}"
- task "${taskName}Kotlin"(type: kotlin.Kotlinc) {
- source = fileTree(dir: file("${examplesDir}/${name}"),
- include: ['**/*.kt', '**/*.java'])
- destination = file(outputFile)
- targetVersion = kotlinTargetVersion
- }
task "${taskName}Java"(type: JavaCompile) {
source = fileTree(dir: file("${examplesDir}/${name}"), include: '**/*.java')
destinationDir = file(javaOutput)
@@ -1682,7 +1628,7 @@
from javaOutput
include "**/*.class"
}
- dependsOn "${taskName}Kotlin", "${taskName}JavaJar"
+ dependsOn "${taskName}JavaJar"
}
}
}
@@ -2101,7 +2047,6 @@
}
dependsOn downloadDeps
dependsOn buildExamples
- dependsOn buildExamplesKotlin
dependsOn buildKotlinR8TestResources
dependsOn buildSmali
dependsOn jctfCommonJar
diff --git a/src/test/java/com/android/tools/r8/KotlinTestBase.java b/src/test/java/com/android/tools/r8/KotlinTestBase.java
index 37f4222..1696327 100644
--- a/src/test/java/com/android/tools/r8/KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/KotlinTestBase.java
@@ -24,6 +24,7 @@
import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.hamcrest.Matcher;
+import org.junit.rules.TemporaryFolder;
public abstract class KotlinTestBase extends TestBase {
@@ -107,6 +108,11 @@
}
public static KotlinCompileMemoizer getCompileMemoizer(
+ Collection<Path> sources, CfRuntime runtime, TemporaryFolder temporaryFolder) {
+ return new KotlinCompileMemoizer(sources, runtime, temporaryFolder);
+ }
+
+ public static KotlinCompileMemoizer getCompileMemoizer(
Collection<Path> sources, String sharedFolder) {
return compileMemoizers.computeIfAbsent(
sharedFolder, ignore -> new KotlinCompileMemoizer(sources));
@@ -131,12 +137,22 @@
public static class KotlinCompileMemoizer {
private final Collection<Path> sources;
+ private final CfRuntime runtime;
+ private final TemporaryFolder temporaryFolder;
+
private Consumer<KotlinCompilerTool> kotlinCompilerToolConsumer = x -> {};
private final Map<KotlinCompiler, Map<KotlinTargetVersion, Path>> compiledPaths =
new IdentityHashMap<>();
public KotlinCompileMemoizer(Collection<Path> sources) {
+ this(sources, CfRuntime.getCheckedInJdk9(), null);
+ }
+
+ public KotlinCompileMemoizer(
+ Collection<Path> sources, CfRuntime runtime, TemporaryFolder temporaryFolder) {
this.sources = sources;
+ this.runtime = runtime;
+ this.temporaryFolder = temporaryFolder;
}
public KotlinCompileMemoizer configure(Consumer<KotlinCompilerTool> consumer) {
@@ -159,10 +175,11 @@
targetVersion,
ignored -> {
try {
- return kotlinc(compiler, targetVersion)
- .addSourceFiles(sources)
- .apply(kotlinCompilerToolConsumer)
- .compile();
+ KotlinCompilerTool kotlinc =
+ temporaryFolder == null
+ ? kotlinc(compiler, targetVersion)
+ : kotlinc(runtime, temporaryFolder, compiler, targetVersion);
+ return kotlinc.addSourceFiles(sources).apply(kotlinCompilerToolConsumer).compile();
} catch (IOException e) {
throw new RuntimeException(e);
}
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesKotlinTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesKotlinTest.java
deleted file mode 100644
index 74dfeb4..0000000
--- a/src/test/java/com/android/tools/r8/R8RunExamplesKotlinTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// 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;
-
-import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
-import com.android.tools.r8.R8Command.Builder;
-import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
-import com.android.tools.r8.utils.InternalOptions;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-@RunWith(Parameterized.class)
-public class R8RunExamplesKotlinTest extends R8RunExamplesCommon {
-
- @Override
- protected void configure(InternalOptions options) {
- super.configure(options);
- }
-
- @Parameters(name = "{0}_{1}_{2}_{3}_{5}_{6}")
- public static Collection<String[]> data() {
- String[] tests = {
- "loops.LoopKt"
- };
-
- List<String[]> fullTestList = new ArrayList<>(tests.length * 2);
- for (String test : tests) {
- fullTestList.add(
- makeTest(Input.JAVAC, CompilerUnderTest.D8, CompilationMode.DEBUG, test, Output.DEX));
- fullTestList.add(
- makeTest(Input.JAVAC, CompilerUnderTest.D8, CompilationMode.RELEASE, test, Output.DEX));
- fullTestList.add(makeTest(Input.DX, CompilerUnderTest.R8, CompilationMode.DEBUG, test));
- fullTestList.add(makeTest(Input.DX, CompilerUnderTest.R8, CompilationMode.RELEASE, test));
- fullTestList.add(
- makeTest(Input.JAVAC, CompilerUnderTest.R8, CompilationMode.DEBUG, test, Output.CF));
- fullTestList.add(
- makeTest(Input.JAVAC, CompilerUnderTest.R8, CompilationMode.RELEASE, test, Output.CF));
- }
- return fullTestList;
- }
-
- @Override
- public Builder addInputFile(Builder builder) {
- return super.addInputFile(builder)
- .addProgramFiles(ToolHelper.getKotlinAnnotationJar(KotlinCompiler.latest()));
- }
-
- @Override
- protected String getExampleDir() {
- return ToolHelper.EXAMPLES_KOTLIN_BUILD_DIR;
- }
-
- @Override
- protected Map<String, TestCondition> getFailingRun() {
- return Collections.emptyMap();
- }
-
- @Override
- protected Map<String, TestCondition> getFailingRunCf() {
- return Collections.emptyMap();
- }
-
- @Override
- protected Set<String> getFailingCompileCfToDex() {
- return Collections.emptySet();
- }
-
- @Override
- protected Set<String> getFailingRunCfToDex() {
- return Collections.emptySet();
- }
-
- @Override
- protected Set<String> getFailingCompileCf() {
- return Collections.emptySet();
- }
-
- @Override
- protected Set<String> getFailingOutputCf() {
- return Collections.emptySet();
- }
-
- @Override
- protected Map<String, TestCondition> getOutputNotIdenticalToJVMOutput() {
- return Collections.emptyMap();
- }
-
- @Override
- protected Map<String, TestCondition> getSkip() {
- return Collections.emptyMap();
- }
-
- public R8RunExamplesKotlinTest(
- String pkg,
- String input,
- String compiler,
- String mode,
- String mainClass,
- String output) {
- super(pkg, input, compiler, mode, mainClass, output);
- }
-}
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 883a2b4..16d7ddf 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -103,14 +103,10 @@
public static final String EXAMPLES_ANDROID_N_DIR = TESTS_DIR + "examplesAndroidN/";
public static final String EXAMPLES_ANDROID_O_DIR = TESTS_DIR + "examplesAndroidO/";
public static final String EXAMPLES_ANDROID_P_DIR = TESTS_DIR + "examplesAndroidP/";
- public static final String EXAMPLES_KOTLIN_DIR = TESTS_DIR + "examplesKotlin/";
public static final String TESTS_BUILD_DIR = BUILD_DIR + "test/";
public static final String JDK_TESTS_BUILD_DIR = TESTS_BUILD_DIR + "jdk11Tests/";
public static final String EXAMPLES_BUILD_DIR = TESTS_BUILD_DIR + "examples/";
public static final String EXAMPLES_CF_DIR = EXAMPLES_BUILD_DIR + "classes/";
- public static final String EXAMPLES_KOTLIN_BUILD_DIR = TESTS_BUILD_DIR + "examplesKotlin/";
- public static final String EXAMPLES_KOTLIN_RESOURCE_DIR =
- TESTS_BUILD_DIR + "kotlinR8TestResources/";
public static final String EXAMPLES_ANDROID_N_BUILD_DIR = TESTS_BUILD_DIR + "examplesAndroidN/";
public static final String EXAMPLES_ANDROID_O_BUILD_DIR = TESTS_BUILD_DIR + "examplesAndroidO/";
public static final String EXAMPLES_ANDROID_P_BUILD_DIR = TESTS_BUILD_DIR + "examplesAndroidP/";
diff --git a/src/test/java/com/android/tools/r8/debug/ContinuousSteppingTest.java b/src/test/java/com/android/tools/r8/debug/ContinuousSteppingTest.java
index 4552be6..b6448f5 100644
--- a/src/test/java/com/android/tools/r8/debug/ContinuousSteppingTest.java
+++ b/src/test/java/com/android/tools/r8/debug/ContinuousSteppingTest.java
@@ -4,8 +4,12 @@
package com.android.tools.r8.debug;
+import com.android.tools.r8.KotlinCompilerTool;
+import com.android.tools.r8.KotlinTestBase;
+import com.android.tools.r8.KotlinTestBase.KotlinCompileMemoizer;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestRuntime.CfRuntime;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.DescriptorUtils;
@@ -87,9 +91,15 @@
public ConfigListBuilder addAllKotlinDebugJars(
TemporaryFolder temp, Predicate<Version> predicate) {
+ KotlinCompileMemoizer compiledJars =
+ KotlinTestBase.getCompileMemoizer(
+ KotlinTestBase.getKotlinFilesInResource("debug"),
+ CfRuntime.getCheckedInJdk9(),
+ temp)
+ .configure(KotlinCompilerTool::includeRuntime);
for (KotlinTestParameters kotlinParameter :
TestBase.getKotlinTestParameters().withAllCompilersAndTargetVersions().build()) {
- add(KotlinD8Config.compileKotlinMemoized.apply(temp, kotlinParameter), predicate);
+ add(compiledJars.getForConfiguration(kotlinParameter), predicate);
}
return this;
}
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinD8Config.java b/src/test/java/com/android/tools/r8/debug/KotlinD8Config.java
deleted file mode 100644
index a7e31a4..0000000
--- a/src/test/java/com/android/tools/r8/debug/KotlinD8Config.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2018, 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.debug;
-
-import static com.android.tools.r8.TestBase.kotlinc;
-import static com.android.tools.r8.TestBase.memoizeBiFunction;
-
-import com.android.tools.r8.KotlinTestBase;
-import com.android.tools.r8.KotlinTestParameters;
-import com.android.tools.r8.OutputMode;
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestRuntime;
-import com.android.tools.r8.utils.AndroidApiLevel;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.Collections;
-import java.util.function.BiFunction;
-import org.junit.rules.TemporaryFolder;
-
-/** Shared test configuration for D8 compiled resources from the "kotlinR8TestResources/debug". */
-class KotlinD8Config extends D8DebugTestConfig {
-
- public static BiFunction<TemporaryFolder, KotlinTestParameters, Path> compileKotlinMemoized =
- memoizeBiFunction(KotlinD8Config::compileWithKotlinC);
-
- private static Path compileWithKotlinC(TemporaryFolder temp, KotlinTestParameters parameters)
- throws IOException {
- return kotlinc(
- TestRuntime.getCheckedInJdk9(),
- temp,
- parameters.getCompiler(),
- parameters.getTargetVersion())
- .addSourceFiles(KotlinTestBase.getKotlinFilesInResource("debug"))
- .includeRuntime()
- .compile();
- }
-
- private static BiFunction<KotlinTestParameters, AndroidApiLevel, Path> compiledResourcesMemoized =
- memoizeBiFunction(KotlinD8Config::getCompiledResources);
-
- private static Path getCompiledResources(
- KotlinTestParameters kotlinTestParameters, AndroidApiLevel apiLevel) throws IOException {
- Path outputPath =
- TestBase.getStaticTemp().newFolder().toPath().resolve("d8_debug_test_resources_kotlin.jar");
- Path kotlinJar = compileKotlinMemoized.apply(TestBase.getStaticTemp(), kotlinTestParameters);
- D8DebugTestConfig.d8Compile(Collections.singletonList(kotlinJar), apiLevel, null)
- .write(outputPath, OutputMode.DexIndexed);
- return outputPath;
- }
-
- public static KotlinD8Config build(
- KotlinTestParameters kotlinTestParameters, AndroidApiLevel apiLevel) {
- try {
- KotlinD8Config kotlinD8Config = new KotlinD8Config();
- kotlinD8Config.addPaths(compiledResourcesMemoized.apply(kotlinTestParameters, apiLevel));
- return kotlinD8Config;
- } catch (Throwable e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinDebugD8Config.java b/src/test/java/com/android/tools/r8/debug/KotlinDebugD8Config.java
new file mode 100644
index 0000000..348d43a
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debug/KotlinDebugD8Config.java
@@ -0,0 +1,52 @@
+// Copyright (c) 2018, 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.debug;
+
+import static com.android.tools.r8.KotlinTestBase.getCompileMemoizer;
+import static com.android.tools.r8.TestBase.memoizeBiFunction;
+
+import com.android.tools.r8.KotlinCompilerTool;
+import com.android.tools.r8.KotlinTestBase;
+import com.android.tools.r8.KotlinTestBase.KotlinCompileMemoizer;
+import com.android.tools.r8.KotlinTestParameters;
+import com.android.tools.r8.OutputMode;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Collections;
+import java.util.function.BiFunction;
+
+/** Shared test configuration for D8 compiled resources from the "kotlinR8TestResources/debug". */
+class KotlinDebugD8Config extends D8DebugTestConfig {
+
+ static final KotlinCompileMemoizer compiledKotlinJars =
+ getCompileMemoizer(KotlinTestBase.getKotlinFilesInResource("debug"))
+ .configure(KotlinCompilerTool::includeRuntime);
+
+ private static final BiFunction<KotlinTestParameters, AndroidApiLevel, Path>
+ compiledResourcesMemoized = memoizeBiFunction(KotlinDebugD8Config::getCompiledResources);
+
+ private static Path getCompiledResources(
+ KotlinTestParameters kotlinTestParameters, AndroidApiLevel apiLevel) throws IOException {
+ Path outputPath =
+ TestBase.getStaticTemp().newFolder().toPath().resolve("d8_debug_test_resources_kotlin.jar");
+ Path kotlinJar = compiledKotlinJars.getForConfiguration(kotlinTestParameters);
+ D8DebugTestConfig.d8Compile(Collections.singletonList(kotlinJar), apiLevel, null)
+ .write(outputPath, OutputMode.DexIndexed);
+ return outputPath;
+ }
+
+ public static KotlinDebugD8Config build(
+ KotlinTestParameters kotlinTestParameters, AndroidApiLevel apiLevel) {
+ try {
+ KotlinDebugD8Config kotlinDebugD8Config = new KotlinDebugD8Config();
+ kotlinDebugD8Config.addPaths(compiledResourcesMemoized.apply(kotlinTestParameters, apiLevel));
+ return kotlinDebugD8Config;
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java b/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java
index 00333e0..d205f26 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java
@@ -39,8 +39,8 @@
this.kotlinParameters = kotlinParameters;
}
- protected KotlinD8Config getD8Config() {
- return KotlinD8Config.build(kotlinParameters, parameters.getApiLevel());
+ protected KotlinDebugD8Config getD8Config() {
+ return KotlinDebugD8Config.build(kotlinParameters, parameters.getApiLevel());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinLoopD8Config.java b/src/test/java/com/android/tools/r8/debug/KotlinLoopD8Config.java
new file mode 100644
index 0000000..c1f20d3
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debug/KotlinLoopD8Config.java
@@ -0,0 +1,52 @@
+// Copyright (c) 2018, 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.debug;
+
+import static com.android.tools.r8.KotlinTestBase.getCompileMemoizer;
+import static com.android.tools.r8.TestBase.memoizeBiFunction;
+
+import com.android.tools.r8.KotlinCompilerTool;
+import com.android.tools.r8.KotlinTestBase;
+import com.android.tools.r8.KotlinTestBase.KotlinCompileMemoizer;
+import com.android.tools.r8.KotlinTestParameters;
+import com.android.tools.r8.OutputMode;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Collections;
+import java.util.function.BiFunction;
+
+/** Shared test configuration for D8 compiled resources from the "kotlinR8TestResources/loops". */
+class KotlinLoopD8Config extends D8DebugTestConfig {
+
+ static final KotlinCompileMemoizer compiledKotlinJars =
+ getCompileMemoizer(KotlinTestBase.getKotlinFilesInResource("loops"))
+ .configure(KotlinCompilerTool::includeRuntime);
+
+ private static final BiFunction<KotlinTestParameters, AndroidApiLevel, Path>
+ compiledResourcesMemoized = memoizeBiFunction(KotlinLoopD8Config::getCompiledResources);
+
+ private static Path getCompiledResources(
+ KotlinTestParameters kotlinTestParameters, AndroidApiLevel apiLevel) throws IOException {
+ Path outputPath =
+ TestBase.getStaticTemp().newFolder().toPath().resolve("d8_debug_test_resources_kotlin.jar");
+ Path kotlinJar = compiledKotlinJars.getForConfiguration(kotlinTestParameters);
+ D8DebugTestConfig.d8Compile(Collections.singletonList(kotlinJar), apiLevel, null)
+ .write(outputPath, OutputMode.DexIndexed);
+ return outputPath;
+ }
+
+ public static KotlinLoopD8Config build(
+ KotlinTestParameters kotlinTestParameters, AndroidApiLevel apiLevel) {
+ try {
+ KotlinLoopD8Config kotlinDebugD8Config = new KotlinLoopD8Config();
+ kotlinDebugD8Config.addPaths(compiledResourcesMemoized.apply(kotlinTestParameters, apiLevel));
+ return kotlinDebugD8Config;
+ } catch (Throwable e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinLoopTest.java b/src/test/java/com/android/tools/r8/debug/KotlinLoopTest.java
index 85c3ec5..ef55a6d 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinLoopTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinLoopTest.java
@@ -3,15 +3,34 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.debug;
-import com.android.tools.r8.ToolHelper;
-import java.nio.file.Paths;
+import com.android.tools.r8.KotlinTestParameters;
+import com.android.tools.r8.TestParameters;
+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 KotlinLoopTest extends KotlinDebugTestBase {
+ private final TestParameters parameters;
+ private final KotlinTestParameters kotlinParameters;
+
+ @Parameters(name = "{0}, {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getKotlinTestParameters().withAllCompilersAndTargetVersions().build());
+ }
+
+ public KotlinLoopTest(TestParameters parameters, KotlinTestParameters kotlinParameters) {
+ this.parameters = parameters;
+ this.kotlinParameters = kotlinParameters;
+ }
+
DebugTestConfig config() {
- return new D8DebugTestConfig()
- .compileAndAdd(temp, Paths.get(ToolHelper.EXAMPLES_KOTLIN_BUILD_DIR, "loops.jar"));
+ return KotlinLoopD8Config.build(kotlinParameters, parameters.getApiLevel());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinTest.java b/src/test/java/com/android/tools/r8/debug/KotlinTest.java
index 07e9e05..4c9f8c0 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinTest.java
@@ -32,8 +32,8 @@
this.kotlinParameters = kotlinParameters;
}
- protected KotlinD8Config getD8Config() {
- return KotlinD8Config.build(kotlinParameters, parameters.getApiLevel());
+ protected KotlinDebugD8Config getD8Config() {
+ return KotlinDebugD8Config.build(kotlinParameters, parameters.getApiLevel());
}
// TODO(shertz) simplify test
diff --git a/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java b/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
index 265aa24..9c01d63 100644
--- a/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
@@ -10,12 +10,12 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNotEquals;
-import com.android.tools.r8.TestBase;
+import com.android.tools.r8.KotlinCompilerTool;
+import com.android.tools.r8.KotlinTestBase;
+import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import java.nio.file.Paths;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -23,18 +23,28 @@
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
-public class KotlinEnumSwitchTest extends TestBase {
+public class KotlinEnumSwitchTest extends KotlinTestBase {
private final boolean enableSwitchMapRemoval;
private final TestParameters parameters;
- @Parameters(name = "{1}, enable switch map removal: {0}")
+ @Parameters(name = "{1}, enable switch map removal: {0}, {2}")
public static List<Object[]> data() {
return buildParameters(
- BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+ BooleanUtils.values(),
+ getTestParameters().withAllRuntimesAndApiLevels().build(),
+ getKotlinTestParameters().withAllCompilersAndTargetVersions().build());
}
- public KotlinEnumSwitchTest(boolean enableSwitchMapRemoval, TestParameters parameters) {
+ private static final KotlinCompileMemoizer kotlinJars =
+ getCompileMemoizer(getKotlinFilesInResource("enumswitch"))
+ .configure(KotlinCompilerTool::includeRuntime);
+
+ public KotlinEnumSwitchTest(
+ boolean enableSwitchMapRemoval,
+ TestParameters parameters,
+ KotlinTestParameters kotlinParameters) {
+ super(kotlinParameters);
this.enableSwitchMapRemoval = enableSwitchMapRemoval;
this.parameters = parameters;
}
@@ -43,8 +53,7 @@
public void test() throws Exception {
testForR8(parameters.getBackend())
.addProgramFiles(
- Paths.get(ToolHelper.EXAMPLES_KOTLIN_BUILD_DIR, "enumswitch.jar"),
- getMostRecentKotlinAnnotationJar())
+ kotlinJars.getForConfiguration(kotlinParameters), getMostRecentKotlinAnnotationJar())
.addKeepMainRule("enumswitch.EnumSwitchKt")
.addOptionsModification(
options -> {
diff --git a/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java b/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
index 10ce37d..d9b9a3c 100644
--- a/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
+++ b/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
@@ -10,15 +10,15 @@
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.TestBase;
+import com.android.tools.r8.KotlinCompilerTool;
+import com.android.tools.r8.KotlinTestBase;
+import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
import com.android.tools.r8.ir.optimize.Inliner.Reason;
-import com.android.tools.r8.utils.FileUtils;
import com.google.common.collect.ImmutableSet;
import java.io.IOException;
-import java.nio.file.Paths;
+import java.util.List;
import java.util.concurrent.ExecutionException;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -33,16 +33,26 @@
* which is why the ASMified code is generated from kotlin.
*/
@RunWith(Parameterized.class)
-public class TestRunner extends TestBase {
+public class TestRunner extends KotlinTestBase {
private final TestParameters parameters;
+ private static final KotlinCompileMemoizer kotlinJars =
+ getCompileMemoizer(getKotlinFilesInResource("lambdas_kstyle_generics"))
+ .configure(KotlinCompilerTool::includeRuntime);
+
@Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters().withDexRuntimes().withAllApiLevels().build();
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getKotlinTestParameters()
+ .withAllCompilers()
+ .withTargetVersion(KotlinTargetVersion.JAVA_8)
+ .build());
}
- public TestRunner(TestParameters parameters) {
+ public TestRunner(TestParameters parameters, KotlinTestParameters kotlinParameters) {
+ super(kotlinParameters);
this.parameters = parameters;
}
@@ -52,12 +62,7 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(Lambda1.dump(), Lambda2.dump(), Main.dump(), Alpha.dump())
.addProgramFiles(
- Paths.get(
- ToolHelper.TESTS_BUILD_DIR,
- "kotlinR8TestResources",
- "JAVA_8",
- "lambdas_kstyle_generics" + FileUtils.JAR_EXTENSION),
- getMostRecentKotlinAnnotationJar())
+ kotlinJars.getForConfiguration(kotlinParameters), getMostRecentKotlinAnnotationJar())
.addKeepMainRule(Main.class)
.addKeepAllAttributes()
.addOptionsModification(
diff --git a/src/test/examplesKotlin/enumswitch/EnumSwitch.kt b/src/test/kotlinR8TestResources/enumswitch/EnumSwitch.kt
similarity index 100%
rename from src/test/examplesKotlin/enumswitch/EnumSwitch.kt
rename to src/test/kotlinR8TestResources/enumswitch/EnumSwitch.kt
diff --git a/src/test/examplesKotlin/loops/Loop.kt b/src/test/kotlinR8TestResources/loops/Loop.kt
similarity index 100%
rename from src/test/examplesKotlin/loops/Loop.kt
rename to src/test/kotlinR8TestResources/loops/Loop.kt