[Java. Logging] Add base for tests for resolving logger methods in java

IDEA-342484

GitOrigin-RevId: fd2666c64933e2c82e546e20b752f2a4a4775c02
This commit is contained in:
Georgii Ustinov
2024-03-15 14:55:00 +02:00
committed by intellij-monorepo-bot
parent eec7243d08
commit c3bc0c82af
3 changed files with 62 additions and 5 deletions

View File

@@ -0,0 +1,47 @@
package com.intellij.logging.resolve
import com.intellij.analysis.logging.resolve.JvmLoggerArgumentSymbol
import com.intellij.jvm.analysis.internal.testFramework.logging.LoggingArgumentSymbolReferenceProviderTestBase
import com.intellij.model.psi.PsiSymbolReference
import com.intellij.model.psi.PsiSymbolReferenceService
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiLiteralExpression
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.testFramework.LightProjectDescriptor
import junit.framework.TestCase
import org.jetbrains.uast.ULiteralExpression
class JavaLoggingArgumentSymbolReferenceProviderTest : LoggingArgumentSymbolReferenceProviderTestBase() {
override fun getProjectDescriptor(): LightProjectDescriptor = JAVA_LATEST_WITH_LATEST_JDK
fun `test log4j2`() {
myFixture.configureByText("Logging.java", """
import org.apache.logging.log4j.*;
class Logging {
private static final Logger LOG = LogManager.getLogger();
void m(int i) {
LOG.info("<caret>{}", i);
}
}
""".trimIndent())
doTest(mapOf(TextRange(1, 3) to "i"))
}
private fun doTest(bindings : Map<TextRange, String>) {
val literal = PsiTreeUtil.getParentOfType(myFixture.file.findElementAt(myFixture.editor.caretModel.offset), PsiLiteralExpression::class.java)
TestCase.assertFalse(literal == null)
val refs: Collection<PsiSymbolReference> = PsiSymbolReferenceService.getService().getReferences(literal!!)
refs.forEach {ref ->
assertEquals(literal, ref.element)
val symbols = ref.resolveReference()
assertEquals(bindings.size, symbols.size)
val symbol = symbols.single()
assertTrue(symbol is JvmLoggerArgumentSymbol)
val formatSymbol = symbol as JvmLoggerArgumentSymbol
assertTrue(formatSymbol.getPlaceholderString() is ULiteralExpression)
val expressionText = formatSymbol.expression.text
assertEquals(bindings[ref.rangeInElement], expressionText)
}
}
}