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
import com.intellij.codeInsight.template.postfix.templates.*
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.util.Condition
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.intentions.negate
import org.jetbrains.kotlin.idea.refactoring.introduce.introduceVariable.KotlinIntroduceVariableHandler
@@ -63,6 +65,15 @@ class KtPostfixTemplateProvider : PostfixTemplateProvider {
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(
@@ -108,6 +119,16 @@ private fun PsiElement.isStatement() = parent is KtBlockExpression
private class KtExpressionPostfixTemplateSelector(
filter: PsiElement.() -> Boolean
) : 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(
context: PsiElement,
document: Document,
@@ -29,6 +29,17 @@ abstract class AbstractPostfixTemplateProviderTest : KotlinLightCodeInsightFixtu
protected fun doTest(fileName: String) {
myFixture.configureByFile(fileName)
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")
}
override fun tearDown() {
super.tearDown()
KtPostfixTemplateProvider.previouslySuggestedExpressions = emptyList()
}
}