Add more stub generator tests for external dependencies

This commit is contained in:
Dmitry Petrov
2017-05-05 13:38:41 +03:00
parent dba9011563
commit 1dbd6453e0
17 changed files with 237 additions and 6 deletions
@@ -66,7 +66,7 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
addReflect -> ConfigurationKind.ALL
addRuntime -> ConfigurationKind.NO_KOTLIN_REFLECT
else -> ConfigurationKind.JDK_ONLY
};
}
val configuration = createConfiguration(
configurationKind, jdkKind,
@@ -80,10 +80,10 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
protected abstract fun doTest(wholeFile: File, testFiles: List<TestFile>)
protected fun generateIrModule(ignoreErrors: Boolean = false): IrModuleFragment {
protected fun generateIrModule(ignoreErrors: Boolean = false, shouldGenerate: (KtFile) -> Boolean = { true }): IrModuleFragment {
assert(myFiles != null) { "myFiles not initialized" }
assert(myEnvironment != null) { "myEnvironment not initialized" }
return generateIrModule(myFiles.psiFiles, myEnvironment, Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)))
return generateIrModule(myFiles.psiFiles, myEnvironment, Psi2IrTranslator(Psi2IrConfiguration(ignoreErrors)), shouldGenerate)
}
protected fun generateIrFilesAsSingleModule(testFiles: List<TestFile>, ignoreErrors: Boolean = false): Map<TestFile, IrFile> {
@@ -109,13 +109,19 @@ abstract class AbstractIrGeneratorTestCase : CodegenTestCase() {
return textFile
}
fun generateIrModule(ktFiles: List<KtFile>, environment: KotlinCoreEnvironment, psi2ir: Psi2IrTranslator): IrModuleFragment {
val analysisResult = JvmResolveUtil.analyze(ktFiles, environment)
fun generateIrModule(
ktFilesToAnalyze: List<KtFile>,
environment: KotlinCoreEnvironment,
psi2ir: Psi2IrTranslator,
shouldGenerate: (KtFile) -> Boolean
): IrModuleFragment {
val analysisResult = JvmResolveUtil.analyze(ktFilesToAnalyze, environment)
if (!psi2ir.configuration.ignoreErrors) {
analysisResult.throwIfError()
AnalyzingUtils.throwExceptionOnErrors(analysisResult.bindingContext)
}
return generateIrModule(ktFiles, analysisResult.moduleDescriptor, analysisResult.bindingContext, psi2ir)
val fileToGenerate = ktFilesToAnalyze.filter { shouldGenerate(it) }
return generateIrModule(fileToGenerate, analysisResult.moduleDescriptor, analysisResult.bindingContext, psi2ir)
}
fun generateIrModule(ktFiles: List<KtFile>, moduleDescriptor: ModuleDescriptor, bindingContext: BindingContext, ignoreErrors: Boolean = false) =
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.utils.rethrow
import java.io.File
@@ -60,6 +61,8 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
}
protected fun doTestIrFileAgainstExpectations(dir: File, testFile: TestFile, irFile: IrFile) {
if (testFile.isExternalFile()) return
val expectations = parseExpectations(dir, testFile)
val irFileDump = irFile.dump()
@@ -234,9 +237,17 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
private val DUMP_DEPENDENCIES_PATTERN = Regex("""// !DUMP_DEPENDENCIES""")
private val EXTERNAL_FILE_PATTERN = Regex("""// EXTERNAL_FILE""")
internal fun shouldDumpDependencies(wholeFile: File): Boolean =
DUMP_DEPENDENCIES_PATTERN.containsMatchIn(wholeFile.readText())
internal fun TestFile.isExternalFile() =
EXTERNAL_FILE_PATTERN.containsMatchIn(content)
internal fun KtFile.isExternalFile() =
EXTERNAL_FILE_PATTERN.containsMatchIn(text)
internal fun parseExpectations(dir: File, testFile: TestFile): Expectations {
val regexps = ArrayList<RegexpInText>()
val treeFiles = ArrayList<IrTreeFileLabel>()
@@ -1103,6 +1103,30 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/ir/irText/stubs"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("javaEnum.kt")
public void testJavaEnum() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/javaEnum.kt");
doTest(fileName);
}
@TestMetadata("javaInnerClass.kt")
public void testJavaInnerClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/javaInnerClass.kt");
doTest(fileName);
}
@TestMetadata("javaNestedClass.kt")
public void testJavaNestedClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/javaNestedClass.kt");
doTest(fileName);
}
@TestMetadata("kotlinInnerClass.kt")
public void testKotlinInnerClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/kotlinInnerClass.kt");
doTest(fileName);
}
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/stubs/simple.kt");