blob: 950ed43f5ad55ac1be512077b89800c2602ee406 [file]
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.gradle.util
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiManager
import org.jetbrains.plugins.gradle.execution.test.runner.applyTestConfiguration
import org.jetbrains.plugins.gradle.importing.GradleBuildScriptBuilderEx
import org.jetbrains.plugins.gradle.importing.GradleImportingTestCase
import org.junit.Test
import org.junit.runners.Parameterized
class TestGradleConfigurationProducerUtilTest : GradleImportingTestCase() {
@Test
fun `test generation of gradle test settings`() {
createProjectSubFile("module/src/test/java/AbstractSuite.java", """
import org.junit.Assert;
import org.junit.Test;
public abstract class AbstractSuite {
protected abstract int x();
@Test
public void testX() {
Assert.assertEquals(3, x());
}
}
""".trimIndent())
val aSimpleTestCaseFile = createProjectSubFile("module/src/test/java/SimpleTestCase.java", """
import org.junit.Assert;
import org.junit.Test;
public class SimpleTestCase extends AbstractSuite {
@Override
protected int x() {
return 1;
}
}
""".trimIndent())
val aDepSimpleTestCaseFile = createProjectSubFile("dep-module/src/test/java/DepSimpleTestCase.java", """
import org.junit.Assert;
import org.junit.Test;
public class DepSimpleTestCase extends AbstractSuite {
@Override
protected int x() {
return 1;
}
@Test
public void test() {
Assert.fail();
}
}
""".trimIndent())
val moduleBuildScript = GradleBuildScriptBuilderEx()
.withJavaPlugin()
.withJUnit("4.12")
.addPostfix("""
task myTestsJar(type: Jar, dependsOn: testClasses) {
baseName = "test-${'$'}{project.archivesBaseName}"
from sourceSets.test.output
}
configurations {
testArtifacts
}
artifacts {
testArtifacts myTestsJar
}
""".trimIndent())
val depModuleBuildScript = GradleBuildScriptBuilderEx()
.withJavaPlugin()
.withJUnit("4.12")
.addDependency("compile project(':module')")
.addDependency("testCompile project(path: ':module', configuration: 'testArtifacts')")
createProjectSubFile("module/build.gradle", moduleBuildScript.generate())
createProjectSubFile("dep-module/build.gradle", depModuleBuildScript.generate())
createSettingsFile("""
rootProject.name = 'project'
include 'module'
include 'dep-module'
""".trimIndent())
importProject()
assertModules("project",
"project.module", "project.module.test", "project.module.main",
"project.dep-module", "project.dep-module.test", "project.dep-module.main")
runReadActionAndWait {
val psiManager = PsiManager.getInstance(myProject)
val aSimpleTestCasePsiFile = psiManager.findFile(aSimpleTestCaseFile)!!
val aDepSimpleTestCasePsiFile = psiManager.findFile(aDepSimpleTestCaseFile)!!
val aSimpleTestCase = aSimpleTestCasePsiFile.findChildByType<PsiClass>()
val aDepSimpleTestCase = aDepSimpleTestCasePsiFile.findChildByType<PsiClass>()
assertClassRunConfigurationSettings(
":module:cleanTest :module:test --tests \"SimpleTestCase\"", aSimpleTestCase)
assertClassRunConfigurationSettings(
":dep-module:cleanTest :dep-module:test --tests \"DepSimpleTestCase\"", aDepSimpleTestCase)
assertClassRunConfigurationSettings(
":module:cleanTest :module:test --tests \"SimpleTestCase\" " +
":dep-module:cleanTest :dep-module:test --tests \"DepSimpleTestCase\" " +
"--continue", aSimpleTestCase, aDepSimpleTestCase)
assertClassRunConfigurationSettings(
":module:cleanTest :module:test --tests \"SimpleTestCase\" " +
":dep-module:cleanTest :dep-module:test --tests \"DepSimpleTestCase\" " +
"--continue", aSimpleTestCase, aDepSimpleTestCase, aDepSimpleTestCase, aSimpleTestCase, aSimpleTestCase)
}
}
private fun assertClassRunConfigurationSettings(expectedSettings: String, vararg classes: PsiClass) {
val settings = ExternalSystemTaskExecutionSettings()
val isApplied = settings.applyTestConfiguration(getModule("project"), *classes) { psiClass ->
GradleExecutionSettingsUtil.createTestFilterFrom(psiClass, false)
}
assertTrue(isApplied)
assertEquals(expectedSettings, settings.toString().trim())
}
companion object {
/**
* It's sufficient to run the test against one gradle version
*/
@Parameterized.Parameters(name = "with Gradle-{0}")
@JvmStatic
fun tests(): Collection<Array<out String>> = arrayListOf(arrayOf(GradleImportingTestCase.BASE_GRADLE_VERSION))
}
}