Enhance tests for postfix templates
Prohibit multiple suggested expressions in test mode
This commit is contained in:
@@ -17,11 +17,13 @@
|
|||||||
package org.jetbrains.kotlin.idea.codeInsight.postfix
|
package org.jetbrains.kotlin.idea.codeInsight.postfix
|
||||||
|
|
||||||
import com.intellij.codeInsight.template.postfix.templates.*
|
import com.intellij.codeInsight.template.postfix.templates.*
|
||||||
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.editor.Document
|
import com.intellij.openapi.editor.Document
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.util.Condition
|
import com.intellij.openapi.util.Condition
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.intentions.negate
|
import org.jetbrains.kotlin.idea.intentions.negate
|
||||||
import org.jetbrains.kotlin.idea.refactoring.introduce.introduceVariable.KotlinIntroduceVariableHandler
|
import org.jetbrains.kotlin.idea.refactoring.introduce.introduceVariable.KotlinIntroduceVariableHandler
|
||||||
@@ -63,6 +65,15 @@ class KtPostfixTemplateProvider : PostfixTemplateProvider {
|
|||||||
|
|
||||||
override fun preExpand(file: PsiFile, editor: Editor) {
|
override fun preExpand(file: PsiFile, editor: Editor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
/**
|
||||||
|
* In tests only one expression should be suggested, so in case there are many of them, save relevant items
|
||||||
|
*/
|
||||||
|
@TestOnly
|
||||||
|
@Volatile
|
||||||
|
var previouslySuggestedExpressions = emptyList<String>()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private object KtNotPostfixTemplate : NotPostfixTemplate(
|
private object KtNotPostfixTemplate : NotPostfixTemplate(
|
||||||
@@ -108,6 +119,16 @@ private fun PsiElement.isStatement() = parent is KtBlockExpression
|
|||||||
private class KtExpressionPostfixTemplateSelector(
|
private class KtExpressionPostfixTemplateSelector(
|
||||||
filter: PsiElement.() -> Boolean
|
filter: PsiElement.() -> Boolean
|
||||||
) : PostfixTemplateExpressionSelectorBase(Condition(filter)) {
|
) : PostfixTemplateExpressionSelectorBase(Condition(filter)) {
|
||||||
|
override fun getExpressions(context: PsiElement, document: Document, offset: Int): List<PsiElement> {
|
||||||
|
val expressions = super.getExpressions(context, document, offset)
|
||||||
|
|
||||||
|
if (ApplicationManager.getApplication().isUnitTestMode && expressions.size > 1) {
|
||||||
|
KtPostfixTemplateProvider.previouslySuggestedExpressions = expressions.map { it.text }
|
||||||
|
}
|
||||||
|
|
||||||
|
return expressions
|
||||||
|
}
|
||||||
|
|
||||||
override fun getNonFilteredExpressions(
|
override fun getNonFilteredExpressions(
|
||||||
context: PsiElement,
|
context: PsiElement,
|
||||||
document: Document,
|
document: Document,
|
||||||
|
|||||||
+11
@@ -29,6 +29,17 @@ abstract class AbstractPostfixTemplateProviderTest : KotlinLightCodeInsightFixtu
|
|||||||
protected fun doTest(fileName: String) {
|
protected fun doTest(fileName: String) {
|
||||||
myFixture.configureByFile(fileName)
|
myFixture.configureByFile(fileName)
|
||||||
myFixture.type("\t")
|
myFixture.type("\t")
|
||||||
|
|
||||||
|
val previouslySuggestedExpressions = KtPostfixTemplateProvider.previouslySuggestedExpressions
|
||||||
|
if (previouslySuggestedExpressions.size > 1) {
|
||||||
|
fail("Only one expression should be suggested, but $previouslySuggestedExpressions were found")
|
||||||
|
}
|
||||||
|
|
||||||
myFixture.checkResultByFile(fileName + ".after")
|
myFixture.checkResultByFile(fileName + ".after")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun tearDown() {
|
||||||
|
super.tearDown()
|
||||||
|
KtPostfixTemplateProvider.previouslySuggestedExpressions = emptyList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user