Check stubs consistency in decompiler tests

This commit is contained in:
Nikolay Krasko
2018-03-13 18:10:50 +03:00
parent dbab5bcc58
commit 6adf7eaf04
2 changed files with 21 additions and 0 deletions
@@ -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)
}
@@ -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)
}