Enhance tests for postfix templates

Prohibit multiple suggested expressions in test mode
This commit is contained in:
Denis Zharkov
2016-09-28 17:58:58 +03:00
parent 4025bcb6e3
commit d5d18b2ad6
2 changed files with 32 additions and 0 deletions
@@ -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,
@@ -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()
}
} }