Refactor test framework to process directives in one place

Perform directive processing in base test class
This commit is contained in:
Mikhael Bogdanov
2017-04-13 13:31:25 +02:00
parent c2f275faec
commit df65b3f6b3
10 changed files with 112 additions and 208 deletions
@@ -16,33 +16,26 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
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 java.io.File
abstract class AbstractBlackBoxAgainstJavaCodegenTest : AbstractBlackBoxCodegenTest() {
override fun compileAndRun(
files: List<CodegenTestCase.TestFile>,
javaSourceDir: File?,
jdkKind: TestJdkKind,
javacOptions: List<String>
) {
val javaOutputDir = javaSourceDir?.let { directory ->
CodegenTestUtil.compileJava(findJavaSourcesInDirectory(directory), emptyList(), javacOptions)
private lateinit var javaOutputDir: File
override fun doMultiFileTest(wholeFile: File, files: MutableList<TestFile>, javaFilesDir: File?) {
javaOutputDir = javaFilesDir!!.let { directory ->
CodegenTestUtil.compileJava(findJavaSourcesInDirectory(directory), emptyList(), extractJavacOptions(files))
}
val configuration = createConfiguration(
ConfigurationKind.ALL, jdkKind,
/* classpath = */ listOf(KotlinTestUtils.getAnnotationsJar(), javaOutputDir),
/* javaSource = */ emptyList(),
files)
super.doMultiFileTest(wholeFile, files, null)
}
myEnvironment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
override fun updateConfiguration(configuration: CompilerConfiguration) {
configuration.addJvmClasspathRoots(listOf(javaOutputDir!!))
}
loadMultiFiles(files)
blackBox()
override fun extractConfigurationKind(files: MutableList<TestFile>): ConfigurationKind {
return ConfigurationKind.ALL
}
}
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
import org.jetbrains.kotlin.resolve.jvm.extensions.PartialAnalysisHandlerExtension
import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -30,17 +31,15 @@ abstract class AbstractKapt3BuilderModeBytecodeShapeTest : CodegenTestCase() {
override fun doMultiFileTest(wholeFile: File, files: MutableList<TestFile>, javaFilesDir: File?) {
val txtFile = File(wholeFile.parentFile, wholeFile.nameWithoutExtension + ".txt")
KotlinTestUtils.assertEqualsToFile(txtFile, compile(files, javaFilesDir))
compile(files, javaFilesDir)
KotlinTestUtils.assertEqualsToFile(txtFile, BytecodeListingTextCollectingVisitor.getText(classFileFactory))
}
private fun compile(files: List<TestFile>, javaFilesDir: File?): String {
val classFileFactory = AbstractBytecodeListingTest.compileClasses(
testRootDisposable, files, javaFilesDir,
TEST_LIGHT_ANALYSIS,
setupEnvironment = { env -> AnalysisHandlerExtension.registerExtension(env.project, PartialAnalysisHandlerExtension()) }
)
return BytecodeListingTextCollectingVisitor.getText(classFileFactory)
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
AnalysisHandlerExtension.registerExtension(environment.project, PartialAnalysisHandlerExtension())
}
override fun getClassBuilderFactory(): ClassBuilderFactory {
return TEST_LIGHT_ANALYSIS
}
}