UAST: tests utils for bottom-top finding UElements moved to AbstractUastTest.kt

This commit is contained in:
Nicolay Mitropolsky
2017-10-22 10:48:48 +03:00
committed by Dmitry Jemerov
parent f9809d5a73
commit c5fa7fb217
2 changed files with 17 additions and 13 deletions
+5 -13
View File
@@ -6,11 +6,11 @@ import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry
import org.jetbrains.kotlin.psi.KtStringTemplateExpression import org.jetbrains.kotlin.psi.KtStringTemplateExpression
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
import org.jetbrains.uast.* import org.jetbrains.uast.*
import org.jetbrains.uast.kotlin.KotlinUastLanguagePlugin import org.jetbrains.uast.kotlin.KotlinUastLanguagePlugin
import org.jetbrains.uast.test.env.findElementByText import org.jetbrains.uast.test.env.findElementByText
import org.jetbrains.uast.test.env.findElementByTextFromPsi
import org.junit.Assert import org.junit.Assert
import org.junit.Test import org.junit.Test
@@ -131,19 +131,19 @@ class KotlinUastApiTest : AbstractKotlinUastTest() {
fun testWhenStringLiteral() { fun testWhenStringLiteral() {
doTest("WhenStringLiteral") { _, file -> doTest("WhenStringLiteral") { _, file ->
file.findFromPsi<ULiteralExpression>("abc").let { literalExpression -> file.findElementByTextFromPsi<ULiteralExpression>("abc").let { literalExpression ->
val psi = literalExpression.psi!! val psi = literalExpression.psi!!
Assert.assertTrue(psi is KtLiteralStringTemplateEntry) Assert.assertTrue(psi is KtLiteralStringTemplateEntry)
UsefulTestCase.assertInstanceOf(literalExpression.uastParent, USwitchClauseExpressionWithBody::class.java) UsefulTestCase.assertInstanceOf(literalExpression.uastParent, USwitchClauseExpressionWithBody::class.java)
} }
file.findFromPsi<ULiteralExpression>("def").let { literalExpression -> file.findElementByTextFromPsi<ULiteralExpression>("def").let { literalExpression ->
val psi = literalExpression.psi!! val psi = literalExpression.psi!!
Assert.assertTrue(psi is KtLiteralStringTemplateEntry) Assert.assertTrue(psi is KtLiteralStringTemplateEntry)
UsefulTestCase.assertInstanceOf(literalExpression.uastParent, USwitchClauseExpressionWithBody::class.java) UsefulTestCase.assertInstanceOf(literalExpression.uastParent, USwitchClauseExpressionWithBody::class.java)
} }
file.findFromPsi<ULiteralExpression>("def1").let { literalExpression -> file.findElementByTextFromPsi<ULiteralExpression>("def1").let { literalExpression ->
val psi = literalExpression.psi!! val psi = literalExpression.psi!!
Assert.assertTrue(psi is KtLiteralStringTemplateEntry) Assert.assertTrue(psi is KtLiteralStringTemplateEntry)
UsefulTestCase.assertInstanceOf(literalExpression.uastParent, UBlockExpression::class.java) UsefulTestCase.assertInstanceOf(literalExpression.uastParent, UBlockExpression::class.java)
@@ -157,7 +157,7 @@ class KotlinUastApiTest : AbstractKotlinUastTest() {
fun testWhenAndDestructing() { fun testWhenAndDestructing() {
doTest("WhenAndDestructing") { _, file -> doTest("WhenAndDestructing") { _, file ->
file.findFromPsi<UExpression>("val (bindingContext, statementFilter) = arr").let { e -> file.findElementByTextFromPsi<UExpression>("val (bindingContext, statementFilter) = arr").let { e ->
val uBlockExpression = e.getParentOfType<UBlockExpression>() val uBlockExpression = e.getParentOfType<UBlockExpression>()
Assert.assertNotNull(uBlockExpression) Assert.assertNotNull(uBlockExpression)
val uMethod = uBlockExpression!!.getParentOfType<UMethod>() val uMethod = uBlockExpression!!.getParentOfType<UMethod>()
@@ -167,11 +167,3 @@ class KotlinUastApiTest : AbstractKotlinUastTest() {
} }
} }
} }
inline fun <reified T : UElement> UFile.findFromPsi(refText: String): T =
(this.psi.findElementAt(this.psi.text.indexOf(refText)) ?: throw AssertionError("requested text '$refText' was not found in ${this.psi.name}"))
.parentsWithSelf.dropWhile { !it.text.contains(refText) }.mapNotNull { it.toUElementOfType<T>() }.first().also {
if (it.psi != null && it.psi?.text != refText) throw AssertionError("requested text '$refText' found as '${it.psi?.text}' in $it")
}
@@ -17,10 +17,14 @@
package org.jetbrains.uast.test.env package org.jetbrains.uast.test.env
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.uast.UElement import org.jetbrains.uast.UElement
import org.jetbrains.uast.UFile import org.jetbrains.uast.UFile
import org.jetbrains.uast.toUElementOfType
import org.jetbrains.uast.visitor.UastVisitor import org.jetbrains.uast.visitor.UastVisitor
import java.io.File import java.io.File
import kotlin.test.fail
abstract class AbstractUastTest : AbstractTestWithCoreEnvironment() { abstract class AbstractUastTest : AbstractTestWithCoreEnvironment() {
protected companion object { protected companion object {
@@ -60,3 +64,11 @@ fun <T> UElement.findElementByText(refText: String, cls: Class<T>): T {
} }
inline fun <reified T : Any> UElement.findElementByText(refText: String): T = findElementByText(refText, T::class.java) inline fun <reified T : Any> UElement.findElementByText(refText: String): T = findElementByText(refText, T::class.java)
inline fun <reified T : UElement> UElement.findElementByTextFromPsi(refText: String): T = (this.psi ?: fail("no psi for $this")).findUElementByTextFromPsi(refText)
inline fun <reified T : UElement> PsiElement.findUElementByTextFromPsi(refText: String): T =
(this.findElementAt(this.text.indexOf(refText)) ?: throw AssertionError("requested text '$refText' was not found in $this"))
.parentsWithSelf.dropWhile { !it.text.contains(refText) }.mapNotNull { it.toUElementOfType<T>() }.first().also {
if (it.psi != null && it.psi?.text != refText) throw AssertionError("requested text '$refText' found as '${it.psi?.text}' in $it")
}