From 99b9bc83a1fb7cc6afa8616c2091f1de5915434d Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 2 Sep 2020 20:17:48 +0300 Subject: [PATCH] as42: Fix assertEqualsToFile usage --- .../AbstractKotlinIdentifiersTest.kt.as42 | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 plugins/uast-kotlin/tests/AbstractKotlinIdentifiersTest.kt.as42 diff --git a/plugins/uast-kotlin/tests/AbstractKotlinIdentifiersTest.kt.as42 b/plugins/uast-kotlin/tests/AbstractKotlinIdentifiersTest.kt.as42 new file mode 100644 index 00000000000..85df068ee10 --- /dev/null +++ b/plugins/uast-kotlin/tests/AbstractKotlinIdentifiersTest.kt.as42 @@ -0,0 +1,37 @@ +package org.jetbrains.uast.test.kotlin + +import com.intellij.psi.PsiElement +import com.intellij.testFramework.assertEqualsToFile +import org.jetbrains.uast.* +import org.jetbrains.uast.test.common.UElementToParentMap +import org.jetbrains.uast.test.common.kotlin.IdentifiersTestBase +import org.jetbrains.uast.test.common.visitUFileAndGetResult +import java.io.File +import kotlin.test.assertNotNull + + +abstract class AbstractKotlinIdentifiersTest : AbstractKotlinUastTest(), IdentifiersTestBase { + + private fun getTestFile(testName: String, ext: String) = + File(File(TEST_KOTLIN_MODEL_DIR, testName).canonicalPath + '.' + ext) + + override fun getIdentifiersFile(testName: String): File = getTestFile(testName, "identifiers.txt") + + override fun check(testName: String, file: UFile) { + super.check(testName, file) + assertEqualsToFile("refNames", getTestFile(testName, "refNames.txt"), file.asRefNames()) + } +} + +private fun refNameRetriever(psiElement: PsiElement): UElement? = + when (val uElement = psiElement.toUElementOfExpectedTypes(UCallExpression::class.java, UReferenceExpression::class.java)) { + is UReferenceExpression -> uElement.referenceNameElement + is UCallExpression -> uElement.classReference?.referenceNameElement + else -> null + }?.also { + assertNotNull(it.sourcePsi, "referenceNameElement should have physical source, origin = $psiElement") + } + +fun UFile.asRefNames() = object : UElementToParentMap(::refNameRetriever) { + override fun renderSource(element: PsiElement): String = element.javaClass.simpleName +}.visitUFileAndGetResult(this) \ No newline at end of file