diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt index 6048b1d1e84..c378f97ebe2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextBaseTest.kt @@ -44,11 +44,17 @@ abstract class AbstractDecompiledTextBaseTest( protected abstract fun checkPsiFile(psiFile: PsiFile) + protected open fun checkStubConsistency(file: VirtualFile, decompiledText: String) {} + fun doTest(path: String) { val fileToDecompile = getFileToDecompile() val psiFile = PsiManager.getInstance(project).findFile(fileToDecompile)!! checkPsiFile(psiFile) + KotlinTestUtils.assertEqualsToFile(File(path.substring(0, path.length - 1) + ".expected.kt"), psiFile.text) + + checkStubConsistency(fileToDecompile, psiFile.text) + checkThatFileWasParsedCorrectly(psiFile) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextTest.kt index 7535823d569..dd548d858b8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/AbstractDecompiledTextTest.kt @@ -22,13 +22,28 @@ import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiFile +import com.intellij.util.indexing.FileContentImpl +import org.jetbrains.kotlin.idea.decompiler.classFile.KotlinClsStubBuilder import org.jetbrains.kotlin.idea.decompiler.classFile.KtClsFile +import org.jetbrains.kotlin.idea.decompiler.stubBuilder.serializeToString +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.stubs.elements.KtFileStubBuilder +import org.junit.Assert import kotlin.test.assertTrue abstract class AbstractDecompiledTextTest(baseDirectory: String, allowKotlinPackage: Boolean) : AbstractDecompiledTextBaseTest(baseDirectory, allowKotlinPackage = allowKotlinPackage) { override fun getFileToDecompile(): VirtualFile = getClassFile(TEST_PACKAGE, getTestName(false), myModule!!) + override fun checkStubConsistency(file: VirtualFile, decompiledText: String) { + val fileWithDecompiledText = KtPsiFactory(project).createFile(decompiledText) + val stubTreeFromDecompiledText = KtFileStubBuilder().buildStubTree(fileWithDecompiledText) + val expectedText = stubTreeFromDecompiledText.serializeToString() + + val fileStub = KotlinClsStubBuilder().buildFileStub(FileContentImpl.createByFile(file))!! + Assert.assertEquals(expectedText, fileStub.serializeToString()) + } + override fun checkPsiFile(psiFile: PsiFile) = assertTrue(psiFile is KtClsFile, "Expecting decompiled kotlin file, was: " + psiFile::class.java) }