[kotlin] Run postfix template tests in dumb and start modes

#KTIJ-27972

GitOrigin-RevId: 0dfb20e6ed27c5c7f7ba59f4f5abf644d9cd3072
This commit is contained in:
Vladimir Dolzhenko
2024-03-05 21:26:49 +01:00
committed by intellij-monorepo-bot
parent 9eaaa42125
commit 5e8080c0ca
5 changed files with 82 additions and 60 deletions

View File

@@ -4,6 +4,10 @@ package org.jetbrains.kotlin.idea.k2.codeInsight.postfix.test;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.idea.test.JUnit3RunnerWithInners;
import com.intellij.testFramework.TestIndexingModeSupporter;
import org.jetbrains.kotlin.idea.base.test.TestIndexingMode;
import static com.intellij.testFramework.TestIndexingModeSupporter.IndexingMode.DUMB_EMPTY_INDEX;
import static com.intellij.testFramework.TestIndexingModeSupporter.IndexingMode.SMART;
import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.kotlin.idea.base.test.TestRoot;
import org.junit.runner.RunWith;
@@ -15,9 +19,11 @@ import org.junit.runner.RunWith;
@SuppressWarnings("all")
@TestRoot("code-insight/postfix-templates")
@TestDataPath("$CONTENT_ROOT")
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion")
public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTemplateTest {
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/arrayOf")
public static class ArrayOf extends AbstractK2PostfixTemplateTest {
@@ -57,6 +63,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/assert")
public static class Assert extends AbstractK2PostfixTemplateTest {
@@ -86,6 +93,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/for")
public static class For extends AbstractK2PostfixTemplateTest {
@@ -155,6 +163,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/fori")
public static class Fori extends AbstractK2PostfixTemplateTest {
@@ -179,6 +188,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/forr")
public static class Forr extends AbstractK2PostfixTemplateTest {
@@ -193,6 +203,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/if")
public static class If extends AbstractK2PostfixTemplateTest {
@@ -227,6 +238,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/iter")
public static class Iter extends AbstractK2PostfixTemplateTest {
@@ -236,6 +248,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/itor")
public static class Itor extends AbstractK2PostfixTemplateTest {
@@ -245,6 +258,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/listOf")
public static class ListOf extends AbstractK2PostfixTemplateTest {
@@ -274,6 +288,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/nn")
public static class Nn extends AbstractK2PostfixTemplateTest {
@@ -283,6 +298,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/not")
public static class Not extends AbstractK2PostfixTemplateTest {
@@ -317,6 +333,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/null")
public static class Null extends AbstractK2PostfixTemplateTest {
@@ -341,9 +358,11 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/oldTestData")
public abstract static class OldTestData extends AbstractK2PostfixTemplateTest {
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/oldTestData")
public static class Uncategorized extends AbstractK2PostfixTemplateTest {
@@ -618,6 +637,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/oldTestData/wrapWithCall")
public static class WrapWithCall extends AbstractK2PostfixTemplateTest {
@@ -643,6 +663,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/par")
public static class Par extends AbstractK2PostfixTemplateTest {
@@ -687,6 +708,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/return")
public static class Return extends AbstractK2PostfixTemplateTest {
@@ -721,6 +743,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/sequenceOf")
public static class SequenceOf extends AbstractK2PostfixTemplateTest {
@@ -730,6 +753,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/setOf")
public static class SetOf extends AbstractK2PostfixTemplateTest {
@@ -739,6 +763,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/sout")
public static class Sout extends AbstractK2PostfixTemplateTest {
@@ -768,6 +793,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/spread")
public static class Spread extends AbstractK2PostfixTemplateTest {
@@ -792,6 +818,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/try")
public static class Try extends AbstractK2PostfixTemplateTest {
@@ -816,6 +843,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/unless")
public static class Unless extends AbstractK2PostfixTemplateTest {
@@ -850,6 +878,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/val")
public static class Val extends AbstractK2PostfixTemplateTest {
@@ -859,6 +888,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/var")
public static class Var extends AbstractK2PostfixTemplateTest {
@@ -868,6 +898,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/when")
public static class When extends AbstractK2PostfixTemplateTest {
@@ -887,6 +918,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/while")
public static class While extends AbstractK2PostfixTemplateTest {
@@ -921,6 +953,7 @@ public abstract class K2PostfixTemplateTestGenerated extends AbstractK2PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/expansion/with")
public static class With extends AbstractK2PostfixTemplateTest {

View File

@@ -1,18 +1,11 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.codeInsight.postfix
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl
import com.intellij.codeInsight.template.impl.TemplateManagerImpl
import com.intellij.codeInsight.template.postfix.templates.LanguagePostfixTemplate
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplate
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.TextRange
import com.intellij.psi.impl.cache.CacheManager
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.UsageSearchContext
import com.intellij.testFramework.DumbModeTestUtils
import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.base.plugin.KotlinPluginMode
@@ -20,6 +13,7 @@ import org.jetbrains.kotlin.idea.base.test.IgnoreTests
import org.jetbrains.kotlin.idea.base.test.KotlinJvmLightProjectDescriptor
import org.jetbrains.kotlin.idea.base.test.KotlinTestHelpers
import org.jetbrains.kotlin.idea.base.test.NewLightKotlinCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.base.util.isInDumbMode
import org.jetbrains.kotlin.idea.util.application.executeCommand
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import java.nio.file.Paths
@@ -43,71 +37,57 @@ abstract class AbstractKotlinPostfixTemplateTestBase : NewLightKotlinCodeInsight
KotlinPluginMode.K1 -> IgnoreTests.DIRECTIVES.IGNORE_K1
KotlinPluginMode.K2 -> IgnoreTests.DIRECTIVES.IGNORE_K2
}
IgnoreTests.runTestIfNotDisabledByFileDirective(testRootPath.resolve(testMethodPath), disableDirective, "after") {
myFixture.configureByDefaultFile()
templateName?.let { myFixture.type(".$it") }
myFixture.configureByDefaultFile()
templateName?.let { myFixture.type(".$it") }
val fileText = file.text
val template = InTextDirectivesUtils.findStringWithPrefixes(fileText, TEMPLATE_DIRECTIVE)
val fileText = file.text
val template = InTextDirectivesUtils.findStringWithPrefixes(fileText, TEMPLATE_DIRECTIVE)
val templateKey = templateName ?: run {
val text = this.editor.getDocument().getText(TextRange(0, this.editor.getCaretModel().getOffset()))
text.substringAfterLast(".")
}
val postfixTemplate: PostfixTemplate =
LanguagePostfixTemplate.LANG_EP.forLanguage(KotlinLanguage.INSTANCE)
.templates.firstOrNull { it.key == ".$templateKey" } ?: error("Unable to find PostfixTemplate for `$templateKey`")
val dumbMode = DumbService.isDumbAware(postfixTemplate)
val templateKey = templateName ?: run {
val text = this.editor.getDocument().getText(TextRange(0, this.editor.getCaretModel().getOffset()))
text.substringAfterLast(".")
}
val projectInDumbMode = project.isInDumbMode
val postfixTemplate: PostfixTemplate? =
LanguagePostfixTemplate.LANG_EP.forLanguage(KotlinLanguage.INSTANCE)
.templates.firstOrNull { it.key == ".$templateKey" }
val postfixTemplateDumbAware = DumbService.isDumbAware(postfixTemplate)
try {
IgnoreTests.runTestIfNotDisabledByFileDirective(testRootPath.resolve(testMethodPath), disableDirective, "after") {
check(postfixTemplate != null) { "Unable to find PostfixTemplate for `$templateKey`" }
val task = {
if (template != null) {
myFixture.type(template.replace("\\t", "\t"))
} else {
myFixture.type("\t")
}
}
//to initialize caches
if (!dumbMode && !DumbService.isDumb(project)) {
CacheManager.getInstance(project).getFilesWithWord(
"XXX",
UsageSearchContext.IN_COMMENTS,
GlobalSearchScope.allScope(project),
true,
)
}
val allowMultipleExpressions = InTextDirectivesUtils.isDirectiveDefined(fileText, ALLOW_MULTIPLE_EXPRESSIONS)
val suggestedExpressions = with(KotlinPostfixTemplateInfo) { file.suggestedExpressions }
if (dumbMode) {
val disposable = Disposer.newCheckedDisposable("mustWaitForSmartMode")
try {
(DaemonCodeAnalyzer.getInstance(project) as DaemonCodeAnalyzerImpl).mustWaitForSmartMode(false, disposable)
DumbModeTestUtils.runInDumbModeSynchronously(project) {
task()
}
} finally {
Disposer.dispose(disposable)
if (suggestedExpressions.size > 1) {
assertTrue("Only one expression should be suggested, but $suggestedExpressions were found", allowMultipleExpressions)
} else {
assertFalse(
"$ALLOW_MULTIPLE_EXPRESSIONS is declared in file, but $suggestedExpressions were found",
allowMultipleExpressions,
)
}
} else {
task()
myFixture.checkContentByExpectedPath(".after", addSuffixAfterExtension = isOldTestData)
}
val allowMultipleExpressions = InTextDirectivesUtils.isDirectiveDefined(fileText, ALLOW_MULTIPLE_EXPRESSIONS)
val suggestedExpressions = with(KotlinPostfixTemplateInfo) { file.suggestedExpressions }
if (suggestedExpressions.size > 1) {
assertTrue("Only one expression should be suggested, but $suggestedExpressions were found", allowMultipleExpressions)
} catch (e: Throwable) {
// ignore failed test when postfixTemplate is not dumbAware and project in dumbMode
if (!(projectInDumbMode && !postfixTemplateDumbAware)) {
throw e
} else {
assertFalse(
"$ALLOW_MULTIPLE_EXPRESSIONS is declared in file, but $suggestedExpressions were found",
allowMultipleExpressions,
)
LOG.info("$name is ignored as $postfixTemplate is not dumbAware while project is in dumbMode")
}
} finally {
val templateState = TemplateManagerImpl.getTemplateState(editor)
if (templateState?.isFinished() == false) {
project.executeCommand("") { templateState.gotoEnd(false) }
}
myFixture.checkContentByExpectedPath(".after", addSuffixAfterExtension = isOldTestData)
}
val templateState = TemplateManagerImpl.getTemplateState(editor)
if (templateState?.isFinished() == false) {
project.executeCommand("") { templateState.gotoEnd(false) }
}
}

View File

@@ -4,6 +4,10 @@ package org.jetbrains.kotlin.idea.codeInsight.postfix;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.idea.test.JUnit3RunnerWithInners;
import com.intellij.testFramework.TestIndexingModeSupporter;
import org.jetbrains.kotlin.idea.base.test.TestIndexingMode;
import static com.intellij.testFramework.TestIndexingModeSupporter.IndexingMode.DUMB_EMPTY_INDEX;
import static com.intellij.testFramework.TestIndexingModeSupporter.IndexingMode.SMART;
import org.jetbrains.kotlin.test.TestMetadata;
import org.jetbrains.kotlin.idea.base.test.TestRoot;
import org.junit.runner.RunWith;
@@ -15,9 +19,11 @@ import org.junit.runner.RunWith;
@SuppressWarnings("all")
@TestRoot("idea/tests")
@TestDataPath("$CONTENT_ROOT")
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("../../code-insight/postfix-templates/testData/expansion/oldTestData")
public abstract class K1PostfixTemplateTestGenerated extends AbstractK1PostfixTemplateTest {
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("../../code-insight/postfix-templates/testData/expansion/oldTestData")
public static class Uncategorized extends AbstractK1PostfixTemplateTest {
@@ -292,6 +298,7 @@ public abstract class K1PostfixTemplateTestGenerated extends AbstractK1PostfixTe
}
}
@TestIndexingMode({DUMB_EMPTY_INDEX, SMART})
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("../../code-insight/postfix-templates/testData/expansion/oldTestData/wrapWithCall")
public static class WrapWithCall extends AbstractK1PostfixTemplateTest {

View File

@@ -1,6 +1,7 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.fe10.testGenerator
import com.intellij.testFramework.TestIndexingModeSupporter.IndexingMode
import org.jetbrains.kotlin.AbstractDataFlowValueRenderingTest
import org.jetbrains.kotlin.addImport.AbstractAddImportTest
import org.jetbrains.kotlin.addImportAlias.AbstractAddImportAliasTest53
@@ -1423,7 +1424,7 @@ private fun assembleWorkspace(): TWorkspace = workspace {
}
testGroup("idea/tests", testDataPath = "../../code-insight/postfix-templates/testData") {
testClass<AbstractK1PostfixTemplateTest> {
testClass<AbstractK1PostfixTemplateTest>(indexingMode = listOf(IndexingMode.DUMB_EMPTY_INDEX, IndexingMode.SMART)) {
model("expansion/oldTestData", pattern = KT_WITHOUT_DOTS, passTestDataPath = false)
}
}

View File

@@ -1,13 +1,14 @@
// 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.fir.testGenerator.codeinsight
import com.intellij.testFramework.TestIndexingModeSupporter.IndexingMode
import org.jetbrains.kotlin.idea.k2.codeInsight.postfix.test.AbstractK2PostfixTemplateTest
import org.jetbrains.kotlin.idea.liveTemplates.k2.macro.AbstractK2LiveTemplateTest
import org.jetbrains.kotlin.testGenerator.model.*
internal fun MutableTWorkspace.generateK2PostfixTemplateTests() {
testGroup("code-insight/postfix-templates") {
testClass<AbstractK2PostfixTemplateTest> {
testClass<AbstractK2PostfixTemplateTest>(indexingMode = listOf(IndexingMode.DUMB_EMPTY_INDEX, IndexingMode.SMART)) {
model("expansion", pattern = Patterns.KT_WITHOUT_DOTS, passTestDataPath = false)
}
}