Refactor/simplify KotlinMultiFileTestWithJava and subclasses

This commit is contained in:
Alexander Udalov
2016-02-20 18:56:32 +03:00
committed by Alexander Udalov
parent 06af22b2c1
commit 5f7bc601a8
9 changed files with 82 additions and 147 deletions
@@ -16,27 +16,20 @@
package org.jetbrains.kotlin.checkers;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind;
import java.io.File;
import java.util.Arrays;
public abstract class AbstractDiagnosticsWithFullJdkTest extends AbstractDiagnosticsTest {
@NotNull
@Override
protected KotlinCoreEnvironment createEnvironment() {
File javaFilesDir = createJavaFilesDir();
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(),
KotlinTestUtils.compilerConfigurationForTests(
ConfigurationKind.ALL,
TestJdkKind.FULL_JDK,
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
Arrays.asList(javaFilesDir)
),
EnvironmentConfigFiles.JVM_CONFIG_FILES);
protected ConfigurationKind getConfigurationKind() {
return ConfigurationKind.ALL;
}
@NotNull
@Override
protected TestJdkKind getTestJdkKind() {
return TestJdkKind.FULL_JDK;
}
}
@@ -22,34 +22,25 @@ import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind;
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public abstract class AbstractCompilerLightClassTest extends KotlinMultiFileTestWithJava<Void, Void> {
@Override
@NotNull
protected CompilerConfiguration createCompilerConfiguration(File javaFilesDir) {
return KotlinTestUtils.compilerConfigurationForTests(
ConfigurationKind.ALL,
TestJdkKind.MOCK_JDK,
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
Arrays.asList(javaFilesDir)
);
@Override
protected ConfigurationKind getConfigurationKind() {
return ConfigurationKind.ALL;
}
@NotNull
@Override
protected File getKotlinSourceRoot() {
return createTmpDir("kotlin-src");
protected boolean isKotlinSourceRootNeeded() {
return true;
}
@NotNull
@@ -16,11 +16,8 @@
package org.jetbrains.kotlin.checkers;
import com.intellij.openapi.Disposable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.context.ModuleContext;
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
@@ -55,8 +52,8 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
@Override
@NotNull
protected KotlinCoreEnvironment createEnvironment(@NotNull Disposable disposable, @NotNull CompilerConfiguration configuration) {
return KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES);
protected List<String> getEnvironmentConfigFiles() {
return EnvironmentConfigFiles.JS_CONFIG_FILES;
}
@Override
@@ -84,7 +81,7 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
protected ModuleDescriptorImpl createSealedModule(@NotNull StorageManager storageManager) {
ModuleDescriptorImpl module = createModule("<kotlin-js-test-module>", storageManager);
List<ModuleDescriptorImpl> dependencies = new ArrayList<ModuleDescriptorImpl>();;
List<ModuleDescriptorImpl> dependencies = new ArrayList<ModuleDescriptorImpl>();
dependencies.add(module);
for (ModuleDescriptorImpl moduleDescriptor : config.getModuleDescriptors()) {
@@ -16,26 +16,13 @@
package org.jetbrains.kotlin.checkers;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind;
import java.io.File;
import java.util.Arrays;
public abstract class AbstractDiagnosticsTestWithStdLib extends AbstractDiagnosticsTest {
@NotNull
@Override
protected KotlinCoreEnvironment createEnvironment() {
File javaFilesDir = createJavaFilesDir();
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(),
KotlinTestUtils.compilerConfigurationForTests(
ConfigurationKind.ALL,
TestJdkKind.MOCK_JDK,
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
Arrays.asList(javaFilesDir)
),
EnvironmentConfigFiles.JVM_CONFIG_FILES);
protected ConfigurationKind getConfigurationKind() {
return ConfigurationKind.ALL;
}
}
@@ -16,27 +16,20 @@
package org.jetbrains.kotlin.checkers;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind;
import java.io.File;
import java.util.Arrays;
public abstract class AbstractDiagnosticsWithFullJdkTest extends AbstractDiagnosticsTest {
@NotNull
@Override
protected KotlinCoreEnvironment createEnvironment() {
File javaFilesDir = createJavaFilesDir();
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(),
KotlinTestUtils.compilerConfigurationForTests(
ConfigurationKind.ALL,
TestJdkKind.FULL_JDK,
Arrays.asList(KotlinTestUtils.getAnnotationsJar()),
Arrays.asList(javaFilesDir)
),
EnvironmentConfigFiles.JVM_CONFIG_FILES);
protected ConfigurationKind getConfigurationKind() {
return ConfigurationKind.ALL;
}
@NotNull
@Override
protected TestJdkKind getTestJdkKind() {
return TestJdkKind.FULL_JDK;
}
}
@@ -16,26 +16,14 @@
package org.jetbrains.kotlin.checkers
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.MockLibraryUtil
import org.jetbrains.kotlin.test.TestJdkKind
import java.io.File
abstract class AbstractForeignAnnotationsTest : AbstractDiagnosticsTest() {
lateinit var annotationsFile: File
override fun createCompilerConfiguration(javaFilesDir: File?): CompilerConfiguration {
val annotationsFile = MockLibraryUtil.compileLibraryToJar(
override fun getExtraClasspath(): List<File> {
return listOf(MockLibraryUtil.compileLibraryToJar(
"compiler/testData/foreignAnnotations/annotations",
"foreign-annotations", /* addSources = */false, /* allowKotlinPackage =*/ false)
return KotlinTestUtils.compilerConfigurationForTests(
ConfigurationKind.JDK_ONLY,
TestJdkKind.MOCK_JDK,
listOf(KotlinTestUtils.getAnnotationsJar(), annotationsFile),
listOf(javaFilesDir))
"foreign-annotations", /* addSources = */false, /* allowKotlinPackage = */ false
))
}
}
}
@@ -16,9 +16,9 @@
package org.jetbrains.kotlin.checkers;
import com.google.common.io.Files;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.io.FileUtil;
import kotlin.collections.CollectionsKt;
import kotlin.io.FilesKt;
import kotlin.text.Charsets;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
@@ -31,17 +31,17 @@ import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.KotlinLiteFixture;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind;
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixture {
private File javaFilesDir;
private File kotlinSourceRoot;
protected class ModuleAndDependencies {
final M module;
final List<String> dependencies;
@@ -52,69 +52,49 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixtur
}
}
protected static boolean writeSourceFile(@NotNull String fileName, @NotNull String content, @NotNull File targetDir) {
try {
File sourceFile = new File(targetDir, fileName);
KotlinTestUtils.mkdirs(sourceFile.getParentFile());
Files.write(content, sourceFile, Charset.forName("utf-8"));
return true;
}
catch (Exception e) {
throw ExceptionUtilsKt.rethrow(e);
}
}
@Override
protected KotlinCoreEnvironment createEnvironment() {
File javaFilesDir = createJavaFilesDir();
CompilerConfiguration configuration = createCompilerConfiguration(javaFilesDir);
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, StandardScriptDefinition.INSTANCE);
File kotlinSourceRoot = getKotlinSourceRoot();
if (kotlinSourceRoot != null) {
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
}
return createEnvironment(getTestRootDisposable(), configuration);
}
@NotNull
protected CompilerConfiguration createCompilerConfiguration(File javaFilesDir) {
return KotlinTestUtils.compilerConfigurationForTests(
ConfigurationKind.MOCK_RUNTIME,
TestJdkKind.MOCK_JDK,
Collections.singletonList(KotlinTestUtils.getAnnotationsJar()),
protected KotlinCoreEnvironment createEnvironment() throws Exception {
javaFilesDir = KotlinTestUtils.tmpDir("java-files");
CompilerConfiguration configuration = KotlinTestUtils.compilerConfigurationForTests(
getConfigurationKind(),
getTestJdkKind(),
CollectionsKt.plus(Collections.singletonList(KotlinTestUtils.getAnnotationsJar()), getExtraClasspath()),
Collections.singletonList(javaFilesDir)
);
configuration.add(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY, StandardScriptDefinition.INSTANCE);
if (isKotlinSourceRootNeeded()) {
kotlinSourceRoot = KotlinTestUtils.tmpDir("kotlin-src");
ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath());
}
return KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, getEnvironmentConfigFiles());
}
@NotNull
protected KotlinCoreEnvironment createEnvironment(@NotNull Disposable disposable, @NotNull CompilerConfiguration configuration) {
return KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES);
protected ConfigurationKind getConfigurationKind() {
return ConfigurationKind.MOCK_RUNTIME;
}
@Nullable
protected File getKotlinSourceRoot() {
return null;
@NotNull
protected TestJdkKind getTestJdkKind() {
return TestJdkKind.MOCK_JDK;
}
protected File createJavaFilesDir() {
return createTmpDir("java-files");
@NotNull
protected List<File> getExtraClasspath() {
return Collections.emptyList();
}
protected static File createTmpDir(String dirName) {
File dir = new File(FileUtil.getTempDirectory(), dirName);
try {
KotlinTestUtils.mkdirs(dir);
}
catch (IOException e) {
throw ExceptionUtilsKt.rethrow(e);
}
return dir;
@NotNull
protected List<String> getEnvironmentConfigFiles() {
return EnvironmentConfigFiles.JVM_CONFIG_FILES;
}
protected boolean isKotlinSourceRootNeeded() {
return false;
}
protected void doTest(String filePath) throws Exception {
File file = new File(filePath);
final File javaFilesDir = createJavaFilesDir();
final File kotlinFilesDir = getKotlinSourceRoot();
String expectedText = KotlinTestUtils.doLoadFile(file);
@@ -133,8 +113,8 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixtur
writeSourceFile(fileName, text, javaFilesDir);
}
if (fileName.endsWith(".kt") && kotlinFilesDir != null) {
writeSourceFile(fileName, text, kotlinFilesDir);
if (fileName.endsWith(".kt") && kotlinSourceRoot != null) {
writeSourceFile(fileName, text, kotlinSourceRoot);
}
return createTestFile(module, fileName, text, directives);
@@ -148,6 +128,12 @@ public abstract class KotlinMultiFileTestWithJava<M, F> extends KotlinLiteFixtur
return module;
}
private void writeSourceFile(@NotNull String fileName, @NotNull String content, @NotNull File targetDir) {
File file = new File(targetDir, fileName);
KotlinTestUtils.mkdirs(file.getParentFile());
FilesKt.writeText(file, content, Charsets.UTF_8);
}
});
doMultiFileTest(file, modules, testFiles);
@@ -36,7 +36,7 @@ public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmen
super.tearDown();
}
protected abstract KotlinCoreEnvironment createEnvironment();
protected abstract KotlinCoreEnvironment createEnvironment() throws Exception;
@NotNull
public KotlinCoreEnvironment getEnvironment() {
@@ -337,15 +337,15 @@ public class KotlinTestUtils {
return new File(getHomeDirectory(), "compiler/testData/mockJDK/jre/lib/annotations.jar");
}
public static void mkdirs(File file) throws IOException {
public static void mkdirs(@NotNull File file) {
if (file.isDirectory()) {
return;
}
if (!file.mkdirs()) {
if (file.exists()) {
throw new IOException("failed to create " + file + " file exists and not a directory");
throw new IllegalStateException("Failed to create " + file + ": file exists and not a directory");
}
throw new IOException();
throw new IllegalStateException("Failed to create " + file);
}
}