193: Fix AbstractResolveByStubTest fixture configuration

This commit is contained in:
Vyacheslav Gerasimov
2019-10-04 20:19:24 +03:00
parent a5d668a093
commit daa25dd56a
@@ -0,0 +1,63 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.stubs
import com.intellij.openapi.util.io.FileUtil
import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
import org.jetbrains.kotlin.idea.test.AstAccessControl
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.kotlin.load.java.descriptors.PossiblyExternalAnnotationDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.util.DescriptorValidator.ValidationVisitor.errorTypesForbidden
import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator
import org.junit.Assert
import java.io.File
abstract class AbstractResolveByStubTest : KotlinLightCodeInsightFixtureTestCase() {
protected fun doTest(testFileName: String) {
if (InTextDirectivesUtils.isDirectiveDefined(File(testFileName).readText(), "NO_CHECK_SOURCE_VS_BINARY")) {
// If NO_CHECK_SOURCE_VS_BINARY is enabled, source vs binary descriptors differ, which means that we should not run this test:
// it would compare descriptors resolved from sources (by stubs) with .txt, which describes binary descriptors
return
}
myFixture.configureByFile(fileName())
val shouldFail = getTestName(false) == "ClassWithConstVal"
AstAccessControl.testWithControlledAccessToAst(shouldFail, project, testRootDisposable) {
performTest(testFileName)
}
}
override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE
private fun performTest(path: String) {
val file = file as KtFile
val module = file.findModuleDescriptor()
val packageViewDescriptor = module.getPackage(FqName("test"))
Assert.assertFalse(packageViewDescriptor.isEmpty())
val fileToCompareTo = File(FileUtil.getNameWithoutExtension(path) + ".txt")
RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile(
packageViewDescriptor,
RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT
.filterRecursion(RecursiveDescriptorComparator.SKIP_BUILT_INS_PACKAGES)
.checkPrimaryConstructors(true)
.checkPropertyAccessors(true)
.withValidationStrategy(errorTypesForbidden())
.withRendererOptions { options ->
options.annotationFilter = { annotationDescriptor ->
annotationDescriptor !is PossiblyExternalAnnotationDescriptor || !annotationDescriptor.isIdeExternalAnnotation
}
},
fileToCompareTo
)
}
}