Merge 'getTestJdkKind' and 'getJdkKind' and move to base class

This commit is contained in:
Mikhael Bogdanov
2020-02-25 11:32:41 +01:00
parent 6e855f3bbd
commit 999b762288
15 changed files with 31 additions and 39 deletions
@@ -219,7 +219,7 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager
if (hasBoxMethod(fullFileText)) { if (hasBoxMethod(fullFileText)) {
val testFiles = createTestFiles(file, fullFileText) val testFiles = createTestFiles(file, fullFileText)
val kind = extractConfigurationKind(testFiles) val kind = extractConfigurationKind(testFiles)
val jdkKind = getJdkKind(testFiles) val jdkKind = getTestJdkKind(testFiles)
val keyConfiguration = CompilerConfiguration() val keyConfiguration = CompilerConfiguration()
updateConfigurationByDirectivesInTestFiles(testFiles, keyConfiguration) updateConfigurationByDirectivesInTestFiles(testFiles, keyConfiguration)
@@ -7,14 +7,13 @@ package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
import java.io.File
abstract class AbstractFirDiagnosticsWithStdlibTest : AbstractFirDiagnosticsTest() { abstract class AbstractFirDiagnosticsWithStdlibTest : AbstractFirDiagnosticsTest() {
override fun getConfigurationKind(): ConfigurationKind { override fun getConfigurationKind(): ConfigurationKind {
return ConfigurationKind.ALL return ConfigurationKind.ALL
} }
override fun getTestJdkKind(file: File): TestJdkKind { override fun getTestJdkKind(testFiles: MutableList<TestFile>): TestJdkKind {
return TestJdkKind.FULL_JDK return TestJdkKind.FULL_JDK
} }
} }
@@ -16,11 +16,9 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.utils.rethrow
import java.io.File import java.io.File
import java.nio.file.Paths import java.nio.file.Paths
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit
abstract class AbstractCompileKotlinAgainstKlibTest : AbstractBlackBoxCodegenTest() { abstract class AbstractCompileKotlinAgainstKlibTest : AbstractBlackBoxCodegenTest() {
lateinit var klibName: String lateinit var klibName: String
@@ -35,7 +33,7 @@ abstract class AbstractCompileKotlinAgainstKlibTest : AbstractBlackBoxCodegenTes
val classpath: MutableList<File> = ArrayList() val classpath: MutableList<File> = ArrayList()
classpath.add(KotlinTestUtils.getAnnotationsJar()) classpath.add(KotlinTestUtils.getAnnotationsJar())
val configuration = createConfiguration( val configuration = createConfiguration(
configurationKind, CodegenTestCase.getJdkKind(files), configurationKind, getTestJdkKind(files),
classpath, classpath,
listOf(outputDir), listOf(outputDir),
files files
@@ -36,7 +36,7 @@ abstract class AbstractCompilerLightClassTest : KotlinMultiFileTestWithJava<Kotl
override fun isKotlinSourceRootNeeded(): Boolean = true override fun isKotlinSourceRootNeeded(): Boolean = true
override fun doMultiFileTest(file: File, files: List<TestFile>) { override fun doMultiFileTest(file: File, files: List<TestFile>) {
val environment = createEnvironment(file) val environment = createEnvironment(file, files)
val expectedFile = KotlinTestUtils.replaceExtension(file, "java") val expectedFile = KotlinTestUtils.replaceExtension(file, "java")
val allowFrontendExceptions = InTextDirectivesUtils.isDirectiveDefined(file.readText(), "// ALLOW_FRONTEND_EXCEPTION") val allowFrontendExceptions = InTextDirectivesUtils.isDirectiveDefined(file.readText(), "// ALLOW_FRONTEND_EXCEPTION")
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest;
import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.TestJdkKind; import org.jetbrains.kotlin.test.TestJdkKind;
import java.io.File; import java.util.List;
public abstract class AbstractDiagnosticsWithModifiedMockJdkTest extends AbstractDiagnosticsTest { public abstract class AbstractDiagnosticsWithModifiedMockJdkTest extends AbstractDiagnosticsTest {
@NotNull @NotNull
@@ -32,7 +32,7 @@ public abstract class AbstractDiagnosticsWithModifiedMockJdkTest extends Abstrac
@NotNull @NotNull
@Override @Override
protected TestJdkKind getTestJdkKind(@NotNull File file) { protected TestJdkKind getTestJdkKind(@NotNull List<TestFile> testFiles) {
return TestJdkKind.MODIFIED_MOCK_JDK; return TestJdkKind.MODIFIED_MOCK_JDK;
} }
} }
@@ -20,7 +20,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.TestJdkKind; import org.jetbrains.kotlin.test.TestJdkKind;
import java.io.File; import java.util.List;
public abstract class AbstractDiagnosticsWithJdk9Test extends AbstractDiagnosticsTest { public abstract class AbstractDiagnosticsWithJdk9Test extends AbstractDiagnosticsTest {
@NotNull @NotNull
@@ -31,7 +31,7 @@ public abstract class AbstractDiagnosticsWithJdk9Test extends AbstractDiagnostic
@NotNull @NotNull
@Override @Override
protected TestJdkKind getTestJdkKind(@NotNull File file) { protected TestJdkKind getTestJdkKind(@NotNull List<TestFile> testFiles) {
return TestJdkKind.FULL_JDK_9; return TestJdkKind.FULL_JDK_9;
} }
} }
@@ -54,7 +54,7 @@ abstract class AbstractForeignAnnotationsTest : AbstractDiagnosticsTest() {
override fun getConfigurationKind(): ConfigurationKind = ConfigurationKind.ALL override fun getConfigurationKind(): ConfigurationKind = ConfigurationKind.ALL
override fun getTestJdkKind(file: File): TestJdkKind = TestJdkKind.FULL_JDK override fun getTestJdkKind(testFiles: MutableList<TestFile>): TestJdkKind = TestJdkKind.FULL_JDK
open protected val annotationsPath: String open protected val annotationsPath: String
get() = FOREIGN_ANNOTATIONS_SOURCES_PATH get() = FOREIGN_ANNOTATIONS_SOURCES_PATH
@@ -91,7 +91,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava<TestModule, Tes
wholeFile: File, wholeFile: File,
files: List<TestFile> files: List<TestFile>
) { ) {
environment = createEnvironment(wholeFile) environment = createEnvironment(wholeFile, files)
//after environment initialization cause of `tearDown` logic, maybe it's obsolete //after environment initialization cause of `tearDown` logic, maybe it's obsolete
if (shouldSkipTest(wholeFile, files)) { if (shouldSkipTest(wholeFile, files)) {
println("${wholeFile.name} test is skipped") println("${wholeFile.name} test is skipped")
@@ -63,10 +63,13 @@ public abstract class KotlinMultiFileTestWithJava<M extends KotlinBaseTest.TestM
} }
@NotNull @NotNull
protected KotlinCoreEnvironment createEnvironment(@NotNull File file) { protected KotlinCoreEnvironment createEnvironment(
@NotNull File file,
@NotNull List<TestFile> files
) {
CompilerConfiguration configuration = KotlinTestUtils.newConfiguration( CompilerConfiguration configuration = KotlinTestUtils.newConfiguration(
getConfigurationKind(), getConfigurationKind(),
getTestJdkKind(file), getTestJdkKind(files),
getClasspath(file), getClasspath(file),
isJavaSourceRootNeeded() ? Collections.singletonList(javaFilesDir) : Collections.emptyList() isJavaSourceRootNeeded() ? Collections.singletonList(javaFilesDir) : Collections.emptyList()
); );
@@ -106,13 +109,6 @@ public abstract class KotlinMultiFileTestWithJava<M extends KotlinBaseTest.TestM
return ConfigurationKind.JDK_ONLY; return ConfigurationKind.JDK_ONLY;
} }
@NotNull
protected TestJdkKind getTestJdkKind(@NotNull File file) {
return InTextDirectivesUtils.isDirectiveDefined(FilesKt.readText(file, Charsets.UTF_8), "FULL_JDK")
? TestJdkKind.FULL_JDK
: TestJdkKind.MOCK_JDK;
}
private List<File> getClasspath(File file) { private List<File> getClasspath(File file) {
List<File> result = new ArrayList<>(); List<File> result = new ArrayList<>();
result.add(KotlinTestUtils.getAnnotationsJar()); result.add(KotlinTestUtils.getAnnotationsJar());
@@ -98,7 +98,7 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest
private ClassFileFactory compileA(@NotNull TestFile testFile, List<TestFile> files) { private ClassFileFactory compileA(@NotNull TestFile testFile, List<TestFile> files) {
Disposable compileDisposable = createDisposable("compileA"); Disposable compileDisposable = createDisposable("compileA");
CompilerConfiguration configuration = createConfiguration( CompilerConfiguration configuration = createConfiguration(
ConfigurationKind.ALL, getJdkKind(files), Collections.singletonList(KotlinTestUtils.getAnnotationsJar()), ConfigurationKind.ALL, getTestJdkKind(files), Collections.singletonList(KotlinTestUtils.getAnnotationsJar()),
Collections.emptyList(), Collections.singletonList(testFile) Collections.emptyList(), Collections.singletonList(testFile)
); );
@@ -120,7 +120,7 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends CodegenTest
private ClassFileFactory compileB(@NotNull TestFile testFile, List<TestFile> files) { private ClassFileFactory compileB(@NotNull TestFile testFile, List<TestFile> files) {
String commonHeader = StringsKt.substringBefore(files.get(0).content, "FILE:", ""); String commonHeader = StringsKt.substringBefore(files.get(0).content, "FILE:", "");
CompilerConfiguration configuration = createConfiguration( CompilerConfiguration configuration = createConfiguration(
ConfigurationKind.ALL, getJdkKind(files), Lists.newArrayList(KotlinTestUtils.getAnnotationsJar(), aDir), ConfigurationKind.ALL, getTestJdkKind(files), Lists.newArrayList(KotlinTestUtils.getAnnotationsJar(), aDir),
Collections.emptyList(), Lists.newArrayList(testFile, new TestFile("header", commonHeader)) Collections.emptyList(), Lists.newArrayList(testFile, new TestFile("header", commonHeader))
); );
@@ -53,7 +53,7 @@ abstract class AbstractLightAnalysisModeTest : CodegenTestCase() {
assert(!relativePath.startsWith("..")) assert(!relativePath.startsWith(".."))
val configuration = createConfiguration( val configuration = createConfiguration(
configurationKind, getJdkKind(files), listOf(getAnnotationsJar()), listOfNotNull(writeJavaFiles(files)), files configurationKind, getTestJdkKind(files), listOf(getAnnotationsJar()), listOfNotNull(writeJavaFiles(files)), files
) )
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
AnalysisHandlerExtension.registerExtension(environment.project, PartialAnalysisHandlerExtension()) AnalysisHandlerExtension.registerExtension(environment.project, PartialAnalysisHandlerExtension())
@@ -97,16 +97,6 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
createEnvironmentWithMockJdkAndIdeaAnnotations(configurationKind, Collections.emptyList(), TestJdkKind.MOCK_JDK, javaSourceRoots); createEnvironmentWithMockJdkAndIdeaAnnotations(configurationKind, Collections.emptyList(), TestJdkKind.MOCK_JDK, javaSourceRoots);
} }
@NotNull
protected static TestJdkKind getJdkKind(@NotNull List<TestFile> files) {
for (TestFile file : files) {
if (InTextDirectivesUtils.isDirectiveDefined(file.content, "FULL_JDK")) {
return TestJdkKind.FULL_JDK;
}
}
return TestJdkKind.MOCK_JDK;
}
protected final void createEnvironmentWithMockJdkAndIdeaAnnotations( protected final void createEnvironmentWithMockJdkAndIdeaAnnotations(
@NotNull ConfigurationKind configurationKind, @NotNull ConfigurationKind configurationKind,
@NotNull List<TestFile> testFilesWithConfigurationDirectives, @NotNull List<TestFile> testFilesWithConfigurationDirectives,
@@ -699,7 +689,7 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
} }
CompilerConfiguration configuration = createConfiguration( CompilerConfiguration configuration = createConfiguration(
configurationKind, getJdkKind(files), configurationKind, getTestJdkKind(files),
classpath, classpath,
ArraysKt.filterNotNull(new File[] {javaSourceDir}), ArraysKt.filterNotNull(new File[] {javaSourceDir}),
files files
@@ -48,7 +48,7 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
} }
private fun setupEnvironment(files: List<TestFile>) { private fun setupEnvironment(files: List<TestFile>) {
val jdkKind = getJdkKind(files) val jdkKind = getTestJdkKind(files)
val javacOptions = ArrayList<String>(0) val javacOptions = ArrayList<String>(0)
var addRuntime = false var addRuntime = false
@@ -46,6 +46,15 @@ abstract class KotlinBaseTest<F : KotlinBaseTest.TestFile> : KtUsefulTestCase()
throw UnsupportedOperationException("Multi-file test cases are not supported in this test") throw UnsupportedOperationException("Multi-file test cases are not supported in this test")
} }
protected open fun getTestJdkKind(files: List<F>): TestJdkKind {
for (file in files) {
if (InTextDirectivesUtils.isDirectiveDefined(file.content, "FULL_JDK")) {
return TestJdkKind.FULL_JDK
}
}
return TestJdkKind.MOCK_JDK
}
open class TestFile(@JvmField val name: String, @JvmField val content: String) : Comparable<TestFile> { open class TestFile(@JvmField val name: String, @JvmField val content: String) : Comparable<TestFile> {
override operator fun compareTo(other: TestFile): Int { override operator fun compareTo(other: TestFile): Int {
return name.compareTo(other.name) return name.compareTo(other.name)
@@ -27,7 +27,7 @@ abstract class AbstractVisualizer : KotlinMultiFileTestWithJava<KotlinBaseTest.T
override fun doMultiFileTest(file: File, files: List<TestFile>) { override fun doMultiFileTest(file: File, files: List<TestFile>) {
val environment = createEnvironment(file) val environment = createEnvironment(file, files)
doVisualizerTest(file, environment) doVisualizerTest(file, environment)
} }
@@ -37,7 +37,7 @@ abstract class AbstractVisualizer : KotlinMultiFileTestWithJava<KotlinBaseTest.T
return true return true
} }
override fun getTestJdkKind(file: File): TestJdkKind { override fun getTestJdkKind(testFiles: MutableList<TestFile>): TestJdkKind {
return TestJdkKind.FULL_JDK return TestJdkKind.FULL_JDK
} }