Add more stub generator tests for external dependencies
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user