[gradle] more reliable test re-execution (includng cached tests) IDEA-208398

GitOrigin-RevId: 4bd7a7d17004a300803c79bfc195154cbbb90c2a
This commit is contained in:
Nikita Skvortsov
2020-02-19 16:45:59 +03:00
committed by intellij-monorepo-bot
parent b64446de8c
commit 9c90fd26dc
3 changed files with 27 additions and 26 deletions

View File

@@ -24,6 +24,7 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -48,7 +49,7 @@ import static org.jetbrains.plugins.gradle.settings.TestRunner.*;
* @author Vladislav.Soroka
*/
public abstract class GradleTestRunConfigurationProducer extends RunConfigurationProducer<ExternalSystemRunConfiguration> {
private static final List<String> TEST_SOURCE_SET_TASKS = Arrays.asList("cleanTest", "test");
private static final List<String> TEST_SOURCE_SET_TASKS = Collections.singletonList("test");
protected static final Logger LOG = Logger.getInstance(GradleTestRunConfigurationProducer.class);
@@ -179,8 +180,7 @@ public abstract class GradleTestRunConfigurationProducer extends RunConfiguratio
if (FileUtil.isAncestor(sourceFolder, sourcePath, false)) {
String testName = testData.getTestName();
String testTaskName = testData.getTestTaskName();
String clearTestTaskName = testData.getCleanTestTaskName();
List<String> tasks = ContainerUtil.newArrayList(clearTestTaskName, testTaskName);
List<String> tasks = new SmartList<>(testTaskName);
testTasks.add(new TasksToRun.Impl(testName, tasks));
}
}
@@ -235,7 +235,7 @@ public abstract class GradleTestRunConfigurationProducer extends RunConfiguratio
if (taskNode == null) return ContainerUtil.emptyList();
String taskName = StringUtil.trimStart(taskNode.getData().getName(), taskPrefix);
tasks = Arrays.asList("clean" + StringUtil.capitalize(taskName), taskName);
tasks = Collections.singletonList(taskName);
return ContainerUtil.map(tasks, task -> taskPrefix + task);
}

View File

@@ -16,15 +16,15 @@ class GradleTestRunConfigurationProducerTest : GradleTestRunConfigurationProduce
fun `test simple configuration`() {
val projectData = generateAndImportTemplateProject()
assertConfigurationFromContext<TestMethodGradleConfigurationProducer>(
""":cleanTest :test --tests "TestCase.test1"""",
""":test --tests "TestCase.test1"""",
projectData["project"]["TestCase"]["test1"].element
)
assertConfigurationFromContext<TestClassGradleConfigurationProducer>(
""":cleanTest :test --tests "TestCase"""",
""":test --tests "TestCase"""",
projectData["project"]["TestCase"].element
)
assertConfigurationFromContext<AllInPackageGradleConfigurationProducer>(
""":cleanTest :test --tests "pkg.*"""",
""":test --tests "pkg.*"""",
runReadActionAndWait { projectData["project"]["pkg.TestCase"].element.containingFile.containingDirectory }
)
}
@@ -33,22 +33,22 @@ class GradleTestRunConfigurationProducerTest : GradleTestRunConfigurationProduce
fun `test pattern configuration`() {
val projectData = generateAndImportTemplateProject()
assertConfigurationFromContext<PatternGradleConfigurationProducer>(
""":cleanTest :test --tests "TestCase.test1" --tests "pkg.TestCase.test1" """ +
""":module:cleanTest :module:test --tests "ModuleTestCase.test1" --continue""",
""":test --tests "TestCase.test1" --tests "pkg.TestCase.test1" """ +
""":module:test --tests "ModuleTestCase.test1" --continue""",
projectData["project"]["TestCase"]["test1"].element,
projectData["project"]["pkg.TestCase"]["test1"].element,
projectData["module"]["ModuleTestCase"]["test1"].element
)
assertConfigurationFromContext<PatternGradleConfigurationProducer>(
""":cleanTest :test --tests "TestCase" --tests "pkg.TestCase" """ +
""":module:cleanTest :module:test --tests "ModuleTestCase" --continue""",
""":test --tests "TestCase" --tests "pkg.TestCase" """ +
""":module:test --tests "ModuleTestCase" --continue""",
projectData["project"]["TestCase"].element,
projectData["project"]["pkg.TestCase"].element,
projectData["module"]["ModuleTestCase"].element
)
assertConfigurationFromContext<PatternGradleConfigurationProducer>(
""":cleanTest :test --tests "TestCase.test1" --tests "pkg.TestCase.test1" """ +
""":module:cleanTest :module:test --tests "ModuleTestCase" --continue""",
""":test --tests "TestCase.test1" --tests "pkg.TestCase.test1" """ +
""":module:test --tests "ModuleTestCase" --continue""",
projectData["project"]["TestCase"]["test1"].element,
projectData["project"]["pkg.TestCase"]["test1"].element,
projectData["module"]["ModuleTestCase"].element
@@ -98,24 +98,24 @@ class GradleTestRunConfigurationProducerTest : GradleTestRunConfigurationProduce
fun `test configuration escaping`() {
val projectData = generateAndImportTemplateProject()
assertConfigurationFromContext<TestMethodGradleConfigurationProducer>(
"""':my module:cleanTest' ':my module:test' --tests "MyModuleTestCase.test1"""",
"""':my module:test' --tests "MyModuleTestCase.test1"""",
projectData["my module"]["MyModuleTestCase"]["test1"].element
)
assertConfigurationFromContext<TestClassGradleConfigurationProducer>(
"""':my module:cleanTest' ':my module:test' --tests "MyModuleTestCase"""",
"""':my module:test' --tests "MyModuleTestCase"""",
projectData["my module"]["MyModuleTestCase"].element
)
assertConfigurationFromContext<PatternGradleConfigurationProducer>(
"""':my module:cleanTest' ':my module:test' --tests "MyModuleTestCase.test1" --tests "MyModuleTestCase.test2"""",
"""':my module:test' --tests "MyModuleTestCase.test1" --tests "MyModuleTestCase.test2"""",
projectData["my module"]["MyModuleTestCase"]["test1"].element,
projectData["my module"]["MyModuleTestCase"]["test2"].element
)
assertConfigurationFromContext<TestMethodGradleConfigurationProducer>(
""":cleanTest :test --tests "GroovyTestCase.Don\'t use single * quo\*tes"""",
""":test --tests "GroovyTestCase.Don\'t use single * quo\*tes"""",
projectData["project"]["GroovyTestCase"]["""Don\'t use single . quo\"tes"""].element
)
assertConfigurationFromContext<PatternGradleConfigurationProducer>(
""":cleanTest :test --tests "GroovyTestCase.Don\'t use single * quo\*tes" --tests "GroovyTestCase.test2"""",
""":test --tests "GroovyTestCase.Don\'t use single * quo\*tes" --tests "GroovyTestCase.test2"""",
projectData["project"]["GroovyTestCase"]["""Don\'t use single . quo\"tes"""].element,
projectData["project"]["GroovyTestCase"]["test2"].element
)
@@ -126,7 +126,7 @@ class GradleTestRunConfigurationProducerTest : GradleTestRunConfigurationProduce
currentExternalProjectSettings.isResolveModulePerSourceSet = false
val projectData = generateAndImportTemplateProject()
assertConfigurationFromContext<PatternGradleConfigurationProducer>(
""":cleanTest :test --tests "TestCase" :cleanAutoTest :autoTest --tests "AutomationTestCase" --continue""",
""":test --tests "TestCase" :autoTest --tests "AutomationTestCase" --continue""",
projectData["project"]["TestCase"].element,
projectData["project"]["AutomationTestCase"].element,
testTasksFilter = { it in setOf("test", "autoTest") }
@@ -137,31 +137,31 @@ class GradleTestRunConfigurationProducerTest : GradleTestRunConfigurationProduce
fun `test configuration tests for directory`() {
val projectData = generateAndImportTemplateProject()
assertConfigurationFromContext<AllInDirectoryGradleConfigurationProducer>(
""":cleanAutoTest :autoTest --tests * :cleanAutomationTest :automationTest --tests * :cleanTest :test --tests * --continue""",
""":autoTest --tests * :automationTest --tests * :test --tests * --continue""",
projectData["project"].root
)
assertConfigurationFromContext<AllInDirectoryGradleConfigurationProducer>(
""":cleanTest :test --tests *""",
""":test --tests *""",
projectData["project"].root.subDirectory("src")
)
assertConfigurationFromContext<AllInDirectoryGradleConfigurationProducer>(
""":cleanTest :test --tests *""",
""":test --tests *""",
projectData["project"].root.subDirectory("src", "test")
)
assertConfigurationFromContext<AllInDirectoryGradleConfigurationProducer>(
""":cleanTest :test --tests *""",
""":test --tests *""",
projectData["project"].root.subDirectory("src", "test", "java")
)
assertConfigurationFromContext<AllInPackageGradleConfigurationProducer>(
""":cleanTest :test --tests "pkg.*"""",
""":test --tests "pkg.*"""",
projectData["project"].root.subDirectory("src", "test", "java", "pkg")
)
assertConfigurationFromContext<AllInDirectoryGradleConfigurationProducer>(
""":cleanAutoTest :autoTest --tests * :cleanAutomationTest :automationTest --tests * --continue""",
""":autoTest --tests * :automationTest --tests * --continue""",
projectData["project"].root.subDirectory("automation")
)
assertConfigurationFromContext<AllInDirectoryGradleConfigurationProducer>(
""":module:cleanTest :module:test --tests *""",
""":module:test --tests *""",
projectData["module"].root
)
}

View File

@@ -41,6 +41,7 @@ gradle.taskGraph.beforeTask { Task task ->
if (task instanceof Test || (abstractTestTaskClass != null && abstractTestTaskClass.isAssignableFrom(task.class))) {
try {
task.outputs.upToDateWhen { false }
if(ijTestIncludes != ['*'] && ijTestFilteringSupported) {
def filter = task.getFilter()
filter.setIncludePatterns(new String[0])