Commit 89a6c56b authored by Jinseong Jeon's avatar Jinseong Jeon
Browse files

FIR/UAST: split non-resolve API fixture tests

parent c769f210
Showing with 238 additions and 185 deletions
+238 -185
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.uast.test.common.kotlin
import com.intellij.psi.PsiModifier
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture
import junit.framework.TestCase
import org.jetbrains.kotlin.psi.KtConstructor
import org.jetbrains.uast.*
import org.jetbrains.uast.test.env.findElementByTextFromPsi
interface UastApiFixtureTestBase : UastPluginSelection {
fun checkAssigningArrayElementType(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"MyClass.kt", """
fun foo() {
val arr = arrayOfNulls<List<*>>(10)
arr[0] = emptyList<Any>()
val lst = mutableListOf<List<*>>()
lst[0] = emptyList<Any>()
}
"""
)
val uFile = myFixture.file.toUElement()!!
TestCase.assertEquals(
"PsiType:List<?>",
uFile.findElementByTextFromPsi<UExpression>("arr[0]").getExpressionType().toString()
)
TestCase.assertEquals(
"PsiType:List<?>",
uFile.findElementByTextFromPsi<UExpression>("lst[0]").getExpressionType().toString()
)
}
fun checkDivByZero(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"MyClass.kt", """
val p = 1 / 0
"""
)
val uFile = myFixture.file.toUElement()!!
val p = uFile.findElementByTextFromPsi<UVariable>("p", strict = false)
TestCase.assertNotNull("can't convert property p", p)
TestCase.assertNotNull("can't find property initializer", p.uastInitializer)
TestCase.assertNull("Should not see ArithmeticException", p.uastInitializer?.evaluate())
}
fun checkDetailsOfDeprecatedHidden(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"MyClass.kt", """
@Deprecated(level = DeprecationLevel.WARNING, message="subject to change")
fun test1() { }
@Deprecated(level = DeprecationLevel.HIDDEN, message="no longer supported")
fun test2() { }
class Test(private val parameter: Int) {
@Deprecated(message = "Binary compatibility", level = DeprecationLevel.HIDDEN)
constructor() : this(42)
}
"""
)
val uFile = myFixture.file.toUElement()!!
val test1 = uFile.findElementByTextFromPsi<UMethod>("test1", strict = false)
TestCase.assertNotNull("can't convert function test1", test1)
TestCase.assertTrue("Warning level, hasAnnotation", test1.javaPsi.hasAnnotation("kotlin.Deprecated"))
TestCase.assertTrue("Warning level, isDeprecated", test1.javaPsi.isDeprecated)
TestCase.assertTrue("Warning level, public", test1.javaPsi.hasModifierProperty(PsiModifier.PUBLIC))
val test2 = uFile.findElementByTextFromPsi<UMethod>("test2", strict = false)
TestCase.assertNotNull("can't convert function test2", test2)
TestCase.assertTrue("Hidden level, hasAnnotation", test2.javaPsi.hasAnnotation("kotlin.Deprecated"))
TestCase.assertTrue("Hidden level, isDeprecated", test2.javaPsi.isDeprecated)
TestCase.assertTrue("Hidden level, public", test2.javaPsi.hasModifierProperty(PsiModifier.PUBLIC))
val testClass = uFile.findElementByTextFromPsi<UClass>("Test", strict = false)
TestCase.assertNotNull("can't convert class Test", testClass)
testClass.methods.forEach { mtd ->
if (mtd.sourcePsi is KtConstructor<*>) {
TestCase.assertTrue("$mtd should be marked as a constructor", mtd.isConstructor)
}
}
}
fun checkImplicitReceiverType(myFixture: JavaCodeInsightTestFixture) {
myFixture.addClass(
"""
public class MyBundle {
public void putString(String key, String value) { }
}
""".trimIndent()
)
myFixture.configureByText(
"main.kt", """
fun foo() {
MyBundle().apply {
<caret>putString("k", "v")
}
}
""".trimIndent()
)
val uCallExpression = myFixture.file.findElementAt(myFixture.caretOffset).toUElement().getUCallExpression()
.orFail("cant convert to UCallExpression")
TestCase.assertEquals("putString", uCallExpression.methodName)
TestCase.assertEquals("PsiType:MyBundle", uCallExpression.receiverType?.toString())
}
fun checkSubstitutedReceiverType(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"main.kt", """
inline fun <T, R> T.use(block: (T) -> R): R {
return block(this)
}
fun foo() {
// T: String, R: Int
val len = "42".u<caret>se { it.length }
}
""".trimIndent()
)
val uCallExpression = myFixture.file.findElementAt(myFixture.caretOffset).toUElement().getUCallExpression()
.orFail("cant convert to UCallExpression")
TestCase.assertEquals("use", uCallExpression.methodName)
TestCase.assertEquals("PsiType:String", uCallExpression.receiverType?.toString())
}
fun checkCallKindOfSamConstructor(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"main.kt", """
val r = java.lang.Runnable { }
""".trimIndent()
)
val uFile = myFixture.file.toUElement()!!
val uCallExpression = uFile.findElementByTextFromPsi<UCallExpression>("Runnable", strict = false)
.orFail("cant convert to UCallExpression")
TestCase.assertEquals("Runnable", uCallExpression.methodName)
TestCase.assertEquals(UastCallKind.CONSTRUCTOR_CALL, uCallExpression.kind)
}
}
\ No newline at end of file
......@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCaseBase.
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCaseBase.assertDoesntContain
import org.jetbrains.kotlin.idea.base.test.JUnit4Assertions.assertSameElements
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtConstructor
import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.jetbrains.uast.*
import org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression
......@@ -535,31 +534,6 @@ interface UastResolveApiFixtureTestBase : UastPluginSelection {
TestCase.assertTrue(resolved.hasAnnotation("kotlin.jvm.JvmSynthetic"))
}
fun checkAssigningArrayElementType(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"MyClass.kt", """
fun foo() {
val arr = arrayOfNulls<List<*>>(10)
arr[0] = emptyList<Any>()
val lst = mutableListOf<List<*>>()
lst[0] = emptyList<Any>()
}
"""
)
val uFile = myFixture.file.toUElement()!!
TestCase.assertEquals(
"PsiType:List<?>",
uFile.findElementByTextFromPsi<UExpression>("arr[0]").getExpressionType().toString()
)
TestCase.assertEquals(
"PsiType:List<?>",
uFile.findElementByTextFromPsi<UExpression>("lst[0]").getExpressionType().toString()
)
}
fun checkMapFunctions(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"main.kt", """
......@@ -802,58 +776,6 @@ interface UastResolveApiFixtureTestBase : UastPluginSelection {
}
}
fun checkDivByZero(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"MyClass.kt", """
val p = 1 / 0
"""
)
val uFile = myFixture.file.toUElement()!!
val p = uFile.findElementByTextFromPsi<UVariable>("p", strict = false)
TestCase.assertNotNull("can't convert property p", p)
TestCase.assertNotNull("can't find property initializer", p.uastInitializer)
TestCase.assertNull("Should not see ArithmeticException", p.uastInitializer?.evaluate())
}
fun checkDetailsOfDeprecatedHidden(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"MyClass.kt", """
@Deprecated(level = DeprecationLevel.WARNING, message="subject to change")
fun test1() { }
@Deprecated(level = DeprecationLevel.HIDDEN, message="no longer supported")
fun test2() { }
class Test(private val parameter: Int) {
@Deprecated(message = "Binary compatibility", level = DeprecationLevel.HIDDEN)
constructor() : this(42)
}
"""
)
val uFile = myFixture.file.toUElement()!!
val test1 = uFile.findElementByTextFromPsi<UMethod>("test1", strict = false)
TestCase.assertNotNull("can't convert function test1", test1)
TestCase.assertTrue("Warning level, hasAnnotation", test1.javaPsi.hasAnnotation("kotlin.Deprecated"))
TestCase.assertTrue("Warning level, isDeprecated", test1.javaPsi.isDeprecated)
TestCase.assertTrue("Warning level, public", test1.javaPsi.hasModifierProperty(PsiModifier.PUBLIC))
val test2 = uFile.findElementByTextFromPsi<UMethod>("test2", strict = false)
TestCase.assertNotNull("can't convert function test2", test2)
TestCase.assertTrue("Hidden level, hasAnnotation", test2.javaPsi.hasAnnotation("kotlin.Deprecated"))
TestCase.assertTrue("Hidden level, isDeprecated", test2.javaPsi.isDeprecated)
TestCase.assertTrue("Hidden level, public", test2.javaPsi.hasModifierProperty(PsiModifier.PUBLIC))
val testClass = uFile.findElementByTextFromPsi<UClass>("Test", strict = false)
TestCase.assertNotNull("can't convert class Test", testClass)
testClass.methods.forEach { mtd ->
if (mtd.sourcePsi is KtConstructor<*>) {
TestCase.assertTrue("$mtd should be marked as a constructor", mtd.isConstructor)
}
}
}
fun checkSyntheticEnumMethods(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"MyClass.kt", """
......@@ -925,64 +847,6 @@ interface UastResolveApiFixtureTestBase : UastPluginSelection {
return qualifiedName?.endsWith("NotNull") == true || qualifiedName?.endsWith("Nullable") == true
}
fun checkImplicitReceiverType(myFixture: JavaCodeInsightTestFixture) {
myFixture.addClass(
"""
public class MyBundle {
public void putString(String key, String value) { }
}
""".trimIndent()
)
myFixture.configureByText(
"main.kt", """
fun foo() {
MyBundle().apply {
<caret>putString("k", "v")
}
}
""".trimIndent()
)
val uCallExpression = myFixture.file.findElementAt(myFixture.caretOffset).toUElement().getUCallExpression()
.orFail("cant convert to UCallExpression")
TestCase.assertEquals("putString", uCallExpression.methodName)
TestCase.assertEquals("PsiType:MyBundle", uCallExpression.receiverType?.toString())
}
fun checkSubstitutedReceiverType(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"main.kt", """
inline fun <T, R> T.use(block: (T) -> R): R {
return block(this)
}
fun foo() {
// T: String, R: Int
val len = "42".u<caret>se { it.length }
}
""".trimIndent()
)
val uCallExpression = myFixture.file.findElementAt(myFixture.caretOffset).toUElement().getUCallExpression()
.orFail("cant convert to UCallExpression")
TestCase.assertEquals("use", uCallExpression.methodName)
TestCase.assertEquals("PsiType:String", uCallExpression.receiverType?.toString())
}
fun checkCallKindOfSamConstructor(myFixture: JavaCodeInsightTestFixture) {
myFixture.configureByText(
"main.kt", """
val r = java.lang.Runnable { }
""".trimIndent()
)
val uFile = myFixture.file.toUElement()!!
val uCallExpression = uFile.findElementByTextFromPsi<UCallExpression>("Runnable", strict = false)
.orFail("cant convert to UCallExpression")
TestCase.assertEquals("Runnable", uCallExpression.methodName)
TestCase.assertEquals(UastCallKind.CONSTRUCTOR_CALL, uCallExpression.kind)
}
fun checkArrayAccessOverloads(myFixture: JavaCodeInsightTestFixture) {
myFixture.addClass(
"""
......
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.fir.uast
import com.intellij.testFramework.LightProjectDescriptor
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.uast.test.common.kotlin.UastApiFixtureTestBase
import org.junit.internal.runners.JUnit38ClassRunner
import org.junit.runner.RunWith
@RunWith(JUnit38ClassRunner::class)
class FirUastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFixtureTestBase {
override val isFirUastPlugin: Boolean = true
override fun isFirPlugin(): Boolean = true
override fun getProjectDescriptor(): LightProjectDescriptor =
KotlinWithJdkAndRuntimeLightProjectDescriptor.getInstance()
private fun doCheck(key: String, checkCallback: (JavaCodeInsightTestFixture) -> Unit) {
checkCallback(myFixture)
}
fun testAssigningArrayElementType() {
doCheck("AssigningArrayElementType", ::checkAssigningArrayElementType)
}
fun testDivByZero() {
doCheck("DivByZero", ::checkDivByZero)
}
fun testDetailsOfDeprecatedHidden() {
doCheck("DetailsOfDeprecatedHidden", ::checkDetailsOfDeprecatedHidden)
}
fun testImplicitReceiverType() {
doCheck("ImplicitReceiverType", ::checkImplicitReceiverType)
}
fun testSubstitutedReceiverType() {
doCheck("SubstitutedReceiverType", ::checkSubstitutedReceiverType)
}
fun testCallKindOfSamConstructor() {
doCheck("CallKindOfSamConstructor", ::checkCallKindOfSamConstructor)
}
}
\ No newline at end of file
......@@ -96,7 +96,6 @@ class FirUastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua
doCheck("ResolveToFacade", ::checkResolveToFacade)
}
fun testMultiConstructorResolve() {
doCheck("MultiConstructorResolve", ::checkMultiConstructorResolve)
}
......@@ -137,10 +136,6 @@ class FirUastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua
doCheck("ResolveSyntheticMethod", ::checkResolveSyntheticMethod)
}
fun testAssigningArrayElementType() {
doCheck("AssigningArrayElementType", ::checkAssigningArrayElementType)
}
fun testMapFunctions() {
doCheck("MapFunctions", ::checkMapFunctions)
}
......@@ -153,10 +148,6 @@ class FirUastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua
doCheck("StringJVM", ::checkStringJVM)
}
fun testDivByZero() {
doCheck("DivByZero", ::checkDivByZero)
}
fun testArgumentMappingDefaultValue() {
doCheck("ArgumentMappingDefaultValue", ::checkArgumentMappingDefaultValue)
}
......@@ -173,26 +164,10 @@ class FirUastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua
doCheck("ArgumentMappingOOBE", ::checkArgumentMappingOOBE)
}
fun testDetailsOfDeprecatedHidden() {
doCheck("DetailsOfDeprecatedHidden", ::checkDetailsOfDeprecatedHidden)
}
fun testSyntheticEnumMethods() {
doCheck("SyntheticEnumMethods", ::checkSyntheticEnumMethods)
}
fun testImplicitReceiverType() {
doCheck("ImplicitReceiverType", ::checkImplicitReceiverType)
}
fun testSubstitutedReceiverType() {
doCheck("SubstitutedReceiverType", ::checkSubstitutedReceiverType)
}
fun testCallKindOfSamConstructor() {
doCheck("CallKindOfSamConstructor", ::checkCallKindOfSamConstructor)
}
fun testArrayAccessOverloads() {
doCheck("ArrayAccessOverloads", ::checkArrayAccessOverloads)
}
......
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.uast.test.kotlin.org.jetbrains.uast.test.kotlin.comparison
import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import org.jetbrains.uast.test.common.kotlin.UastApiFixtureTestBase
import org.junit.internal.runners.JUnit38ClassRunner
import org.junit.runner.RunWith
@RunWith(JUnit38ClassRunner::class)
class FE1UastApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), UastApiFixtureTestBase {
override val isFirUastPlugin: Boolean = false
override fun getProjectDescriptor(): LightProjectDescriptor =
KotlinWithJdkAndRuntimeLightProjectDescriptor.getInstance()
fun testAssigningArrayElementType() {
checkAssigningArrayElementType(myFixture)
}
fun testDivByZero() {
checkDivByZero(myFixture)
}
fun testDetailsOfDeprecatedHidden() {
checkDetailsOfDeprecatedHidden(myFixture)
}
fun testImplicitReceiverType() {
checkImplicitReceiverType(myFixture)
}
fun testSubstitutedReceiverType() {
checkSubstitutedReceiverType(myFixture)
}
fun testCallKindOfSamConstructor() {
checkCallKindOfSamConstructor(myFixture)
}
}
\ No newline at end of file
......@@ -83,10 +83,6 @@ class FE1UastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua
checkResolveSyntheticMethod(myFixture)
}
fun testAssigningArrayElementType() {
checkAssigningArrayElementType(myFixture)
}
fun testMapFunctions() {
checkMapFunctions(myFixture)
}
......@@ -115,30 +111,10 @@ class FE1UastResolveApiFixtureTest : KotlinLightCodeInsightFixtureTestCase(), Ua
checkArgumentMappingOOBE(myFixture)
}
fun testDivByZero() {
checkDivByZero(myFixture)
}
fun testDetailsOfDeprecatedHidden() {
checkDetailsOfDeprecatedHidden(myFixture)
}
fun testSyntheticEnumMethods() {
checkSyntheticEnumMethods(myFixture)
}
fun testImplicitReceiverType() {
checkImplicitReceiverType(myFixture)
}
fun testSubstitutedReceiverType() {
checkSubstitutedReceiverType(myFixture)
}
fun testCallKindOfSamConstructor() {
checkCallKindOfSamConstructor(myFixture)
}
fun testArrayAccessOverloads() {
checkArrayAccessOverloads(myFixture)
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment