[FIR IDE] Ensure prefixed test output file differs from the default one

This commit is contained in:
Yan Zhulanow
2021-11-01 19:38:10 +09:00
parent 8916626cc3
commit 8d18fa2d00
26 changed files with 47 additions and 79 deletions
@@ -27,6 +27,6 @@ abstract class AbstractExpressionPsiTypeProviderTest : AbstractHLApiSingleFileTe
appendLine("PsiType: $psiType") appendLine("PsiType: $psiType")
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -43,6 +43,6 @@ abstract class AbstractFirGetSuperTypesTest : AbstractHLApiSingleFileTest(FirFro
} }
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -25,8 +25,6 @@ abstract class AbstractHLImportOptimizerTest : AbstractHLApiSingleModuleTest(Fir
unusedImportPaths.forEach(::appendLine) unusedImportPaths.forEach(::appendLine)
} }
val expectedUnusedImports = testDataFileSibling(".imports") testServices.assertions.assertEqualsToTestDataFileSibling(actualUnusedImports, extension = ".imports")
testServices.assertions.assertEqualsToFile(expectedUnusedImports, actualUnusedImports)
} }
} }
@@ -44,7 +44,7 @@ abstract class AbstractPsiTypeProviderTest : AbstractHLApiSingleFileTest(FirFron
} }
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun getContainingKtLightClass( private fun getContainingKtLightClass(
@@ -11,6 +11,7 @@ import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.Disposer
import com.intellij.testFramework.TestDataFile import com.intellij.testFramework.TestDataFile
import junit.framework.ComparisonFailure
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -76,11 +77,30 @@ abstract class AbstractFrontendApiTest(val configurator: FrontendApiTestConfigur
protected abstract fun doTestByFileStructure(ktFiles: List<KtFile>, moduleStructure: TestModuleStructure, testServices: TestServices) protected abstract fun doTestByFileStructure(ktFiles: List<KtFile>, moduleStructure: TestModuleStructure, testServices: TestServices)
protected fun testDataFileSibling(extension: String): Path { protected fun AssertionsService.assertEqualsToTestDataFileSibling(actual: String, extension: String = ".txt") {
val testPrefix = configurator.testPrefix
val expectedFile = getTestDataFileSiblingPath(extension, testPrefix = testPrefix)
assertEqualsToFile(expectedFile, actual)
if (testPrefix != null) {
val expectedFileWithoutPrefix = getTestDataFileSiblingPath(extension, testPrefix = null)
if (expectedFile != expectedFileWithoutPrefix) {
try {
assertEqualsToFile(expectedFileWithoutPrefix, actual)
} catch (ignored: ComparisonFailure) {
return
}
throw AssertionError("\"$expectedFile\" has the same content as \"$expectedFileWithoutPrefix\". Delete the prefixed file.")
}
}
}
private fun getTestDataFileSiblingPath(extension: String, testPrefix: String?): Path {
val extensionWithDot = "." + extension.removePrefix(".") val extensionWithDot = "." + extension.removePrefix(".")
val baseName = testDataPath.nameWithoutExtension val baseName = testDataPath.nameWithoutExtension
val testPrefix = configurator.testPrefix
if (testPrefix != null) { if (testPrefix != null) {
val prefixedFile = testDataPath.resolveSibling("$baseName.$testPrefix$extensionWithDot") val prefixedFile = testDataPath.resolveSibling("$baseName.$testPrefix$extensionWithDot")
if (prefixedFile.exists()) { if (prefixedFile.exists()) {
@@ -61,7 +61,7 @@ abstract class AbstractReferenceResolveTest(configurator: FrontendApiTestConfigu
} }
val actual = "Resolved to:\n$resolvedTo" val actual = "Resolved to:\n$resolvedTo"
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun findReferencesAtCaret(mainKtFile: KtFile, caretPosition: Int): List<KtReference> = private fun findReferencesAtCaret(mainKtFile: KtFile, caretPosition: Int): List<KtReference> =
@@ -36,7 +36,7 @@ abstract class AbstractCompileTimeConstantEvaluatorTest(
appendLine("constant_value: ${analyseForTest(expression) { constantValue?.stringRepresentation() }}") appendLine("constant_value: ${analyseForTest(expression) { constantValue?.stringRepresentation() }}")
appendLine("constant: ${(constantValue as? KtLiteralConstantValue<*>)?.toConst()}") appendLine("constant: ${(constantValue as? KtLiteralConstantValue<*>)?.toConst()}")
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun KtConstantValue.stringRepresentation(): String { private fun KtConstantValue.stringRepresentation(): String {
@@ -33,6 +33,6 @@ abstract class AbstractExpectedExpressionTypeTest(
appendLine("expected type: $actualExpectedTypeText") appendLine("expected type: $actualExpectedTypeText")
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -34,6 +34,6 @@ abstract class AbstractFunctionClassKindTest (
appendLine("expected type: $type") appendLine("expected type: $type")
appendLine("functionClassKind: $functionClassKind") appendLine("functionClassKind: $functionClassKind")
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -26,6 +26,6 @@ abstract class AbstractHLExpressionTypeTest(configurator: FrontendApiTestConfigu
appendLine("expression: ${expression.text}") appendLine("expression: ${expression.text}")
appendLine("type: $type") appendLine("type: $type")
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -29,6 +29,6 @@ abstract class AbstractHLSmartCastInfoTest(configurator: FrontendApiTestConfigur
} }
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -41,7 +41,7 @@ abstract class AbstractOverriddenDeclarationProviderTest(
} }
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun KtAnalysisSession.renderSignature(symbol: KtCallableSymbol): String = buildString { private fun KtAnalysisSession.renderSignature(symbol: KtCallableSymbol): String = buildString {
@@ -36,6 +36,6 @@ abstract class AbstractRendererTest(configurator: FrontendApiTestConfiguratorSer
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".rendered"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".rendered")
} }
} }
@@ -32,6 +32,6 @@ abstract class AbstractWhenMissingCasesTest(
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -40,7 +40,7 @@ abstract class AbstractResolveCallTest(configurator: FrontendApiTestConfigurator
resolveCall(expression)?.stringRepresentation() resolveCall(expression)?.stringRepresentation()
} }
} ?: "null" } ?: "null"
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun KtAnalysisSession.resolveCall(element: PsiElement): KtCall? = when (element) { private fun KtAnalysisSession.resolveCall(element: PsiElement): KtCall? = when (element) {
@@ -37,6 +37,6 @@ abstract class AbstractFileScopeTest(configurator: FrontendApiTestConfiguratorSe
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -56,7 +56,7 @@ abstract class AbstractSymbolTest(configurator: FrontendApiTestConfiguratorServi
testServices: TestServices, testServices: TestServices,
) { ) {
val actual = pointersWithRendered.joinToString(separator = "\n") { it.rendered } val actual = pointersWithRendered.joinToString(separator = "\n") { it.rendered }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun restoreSymbolsInOtherReadActionAndCompareResults( private fun restoreSymbolsInOtherReadActionAndCompareResults(
@@ -72,7 +72,7 @@ abstract class AbstractSymbolTest(configurator: FrontendApiTestConfiguratorServi
} }
} }
val actual = restored.joinToString(separator = "\n") val actual = restored.joinToString(separator = "\n")
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
} }
@@ -1,9 +0,0 @@
interface Some
abstract class My<T : Some> {
abstract val x: T
abstract val y: My<Some>.T
abstract val z: My<Some>.T
abstract fun foo(arg: T)
abstract class Some : My<Some>.T
open inner class T
}
@@ -1,9 +0,0 @@
interface Some
abstract class My<T : Some> {
open inner class T
abstract val x: T
abstract fun foo(arg: T)
abstract val y: My<Some>.T
abstract val z: My<Some>.T
abstract class Some : My<Some>.T
}
@@ -1,21 +0,0 @@
KtConstructorSymbol:
annotatedType: [] java/util/ArrayList<E>
annotationClassIds: []
annotations: []
callableIdIfNonLocal: null
containingClassIdIfNonLocal: java/util/ArrayList
dispatchType: null
hasStableParameterNames: false
isExtension: false
isPrimary: false
origin: JAVA
receiverType: null
symbolKind: CLASS_MEMBER
typeParameters: [
KtTypeParameterSymbol(E)
]
valueParameters: [
KtValueParameterSymbol(p0)
]
visibility: Public
deprecationStatus: null
@@ -1,13 +0,0 @@
KtSamConstructorSymbol:
annotatedType: [] java/lang/Runnable
callableIdIfNonLocal: java/lang/Runnable
hasStableParameterNames: true
isExtension: false
name: Runnable
origin: SAM_CONSTRUCTOR
receiverType: null
symbolKind: SAM_CONSTRUCTOR
valueParameters: [
KtValueParameterSymbol(function)
]
deprecationStatus: null
@@ -99,7 +99,7 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingle
} }
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), resultBuilder.toString()) testServices.assertions.assertEqualsToTestDataFileSibling(resultBuilder.toString())
} }
override val enableTestInDependedMode: Boolean = false override val enableTestInDependedMode: Boolean = false
@@ -13,9 +13,9 @@ import org.jetbrains.kotlin.psi.KtAnnotated
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtFileAnnotationList import org.jetbrains.kotlin.psi.KtFileAnnotationList
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestModuleStructure
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions
import org.jetbrains.kotlin.test.util.findElementByCommentPrefix import org.jetbrains.kotlin.test.util.findElementByCommentPrefix
abstract class AbstractFirOnAirResolveTest : AbstractLowLevelApiSingleFileTest() { abstract class AbstractFirOnAirResolveTest : AbstractLowLevelApiSingleFileTest() {
@@ -35,7 +35,7 @@ abstract class AbstractFirOnAirResolveTest : AbstractLowLevelApiSingleFileTest()
check(resolveState is FirModuleResolveStateImpl) check(resolveState is FirModuleResolveStateImpl)
val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(resolveState, place, onAir) val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(resolveState, place, onAir)
val rendered = firElement.render(FirRenderer.RenderMode.WithResolvePhases) val rendered = firElement.render(FirRenderer.RenderMode.WithResolvePhases)
KotlinTestUtils.assertEqualsToFile(testDataFileSibling(".txt"), rendered) testServices.assertions.assertEqualsToTestDataFileSibling(rendered)
} }
} }
@@ -41,7 +41,7 @@ abstract class AbstractGetOrBuildFirTest : AbstractLowLevelApiSingleFileTest() {
|FIR element rendered: |FIR element rendered:
|${render(fir)}""".trimMargin() |${render(fir)}""".trimMargin()
} }
testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual)
} }
private fun getElementOfType(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices): PsiElement { private fun getElementOfType(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices): PsiElement {
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.services.JUnit5Assertions
import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestModuleStructure
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions import org.jetbrains.kotlin.test.services.assertions
@@ -124,7 +125,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF
) )
val firDump = firElement.render(FirRenderer.RenderMode.WithFqNames) val firDump = firElement.render(FirRenderer.RenderMode.WithFqNames)
KotlinTestUtils.assertEqualsToFile(testDataFileSibling(".txt"), firDump) JUnit5Assertions.assertEqualsToTestDataFileSibling(firDump)
} }
companion object { companion object {
@@ -15,13 +15,14 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestModuleStructure
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions
abstract class AbstractInnerDeclarationsResolvePhaseTest : AbstractLowLevelApiSingleFileTest() { abstract class AbstractInnerDeclarationsResolvePhaseTest : AbstractLowLevelApiSingleFileTest() {
override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
resolveWithClearCaches(ktFile) { resolveState -> resolveWithClearCaches(ktFile) { resolveState ->
val firFile = ktFile.getOrBuildFirOfType<FirFile>(resolveState) val firFile = ktFile.getOrBuildFirOfType<FirFile>(resolveState)
val actual = firFile.render(FirRenderer.RenderMode.WithResolvePhases) val actual = firFile.render(FirRenderer.RenderMode.WithResolvePhases)
KotlinTestUtils.assertEqualsToFile(testDataFileSibling(".fir.txt"), actual) testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".fir.txt")
} }
} }
} }