Support CoroutineUtil.kt helpers within AbstractCompileKotlinAgainstKotlinTest

This commit is contained in:
Denis Zharkov
2018-06-28 18:48:51 +03:00
parent f23a0c8fea
commit aee0afbff1
2 changed files with 25 additions and 8 deletions
@@ -28,8 +28,10 @@ import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTestCase {
private File tmpdir;
@@ -55,7 +57,7 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest
@NotNull
protected Pair<ClassFileFactory, ClassFileFactory> doTwoFileTest(@NotNull List<TestFile> files) throws Exception {
// Note that it may be beneficial to improve this test to handle many files, compiling them successively against all previous
assert files.size() == 2 : "There should be exactly two files in this test";
assert files.size() == 2 || (files.size() == 3 && files.get(2).name.equals("CoroutineUtil.kt")) : "There should be exactly two files in this test";
TestFile fileA = files.get(0);
TestFile fileB = files.get(1);
ClassFileFactory factoryA = compileA(fileA, files);
@@ -98,7 +100,13 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest
KotlinCoreEnvironment environment = KotlinCoreEnvironment.createForTests(
compileDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
return compileKotlin(testFile.name, testFile.content, aDir, environment, compileDisposable);
List<TestFile> filesToCompile =
files.size() == 2
? Collections.singletonList(testFile)
// A-file and CoroutineUtil.kt
: Arrays.asList(testFile, files.get(2));
return compileKotlin(filesToCompile, aDir, environment, compileDisposable);
}
@NotNull
@@ -114,7 +122,7 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest
compileDisposable, configurationWithADirInClasspath, EnvironmentConfigFiles.JVM_CONFIG_FILES
);
return compileKotlin(testFile.name, testFile.content, bDir, environment, compileDisposable);
return compileKotlin(Collections.singletonList(testFile), bDir, environment, compileDisposable);
}
private Disposable createDisposable(String debugName) {
@@ -125,16 +133,21 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest
@NotNull
private ClassFileFactory compileKotlin(
@NotNull String fileName, @NotNull String content, @NotNull File outputDir, @NotNull KotlinCoreEnvironment environment,
@NotNull List<TestFile> files,
@NotNull File outputDir,
@NotNull KotlinCoreEnvironment environment,
@NotNull Disposable disposable
) throws IOException {
KtFile psiFile = KotlinTestUtils.createFile(fileName, content, environment.getProject());
) {
List<KtFile> ktFiles =
files.stream().map(file -> KotlinTestUtils.createFile(file.name, file.content, environment.getProject()))
.collect(Collectors.toList());
ModuleVisibilityManager.SERVICE.getInstance(environment.getProject()).addModule(
new ModuleBuilder("module for test", tmpdir.getAbsolutePath(), "test")
);
ClassFileFactory outputFiles = GenerationUtils.compileFileTo(psiFile, environment, outputDir);
ClassFileFactory outputFiles = GenerationUtils.compileFilesTo(ktFiles, environment, outputDir);
Disposer.dispose(disposable);
return outputFiles;
@@ -34,7 +34,11 @@ import java.io.File
object GenerationUtils {
@JvmStatic
fun compileFileTo(ktFile: KtFile, environment: KotlinCoreEnvironment, output: File): ClassFileFactory =
compileFile(ktFile, environment).apply {
compileFilesTo(listOf(ktFile), environment, output)
@JvmStatic
fun compileFilesTo(files: List<KtFile>, environment: KotlinCoreEnvironment, output: File): ClassFileFactory =
compileFiles(files, environment).factory.apply {
writeAllTo(output)
}