Support running import tests on bootstrap version of gradle plugin

This commit is contained in:
Andrey Uskov
2020-04-03 21:49:28 +03:00
committed by Alexander Dudinsky
parent b0c96a61ec
commit 005314ce06
36 changed files with 85 additions and 140 deletions
+1
View File
@@ -105,6 +105,7 @@ sourceSets {
testsJar()
projectTest(parallel = false) {
dependsOnKotlinPluginInstall()
workingDir = rootDir
useAndroidSdk()
@@ -36,7 +36,7 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testImportHMPPFlag() {
configureByFiles()
importProject()
@@ -51,7 +51,7 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testImportIntermediateModules() {
configureByFiles()
importProject()
@@ -225,7 +225,7 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testJvmWithJavaOnHMPP() {
configureByFiles()
importProject()
@@ -13,13 +13,13 @@ import org.junit.Test
class ImportAndCheckHighlighting : MultiplePluginVersionGradleImportingTestCase() {
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.40+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.40+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testMultiplatformLibrary() {
importAndCheckHighlighting()
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.40+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.40+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testUnresolvedInMultiplatformLibrary() {
importAndCheckHighlighting(false, false)
}
@@ -23,7 +23,7 @@ import org.junit.Test
class ImportAndCheckNavigation : MultiplePluginVersionGradleImportingTestCase() {
@Test
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.50+")
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.50+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testNavigationToCommonizedLibrary() {
val files = configureAndImportProject()
@@ -21,6 +21,8 @@ import org.junit.After
import org.junit.Before
import org.junit.Test
const val mppImportTestMinVersionForMaster = "6.0+"
class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportingTestCase() {
@Before
@@ -39,7 +41,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.10+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.10+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testProjectDependency() {
configureByFiles()
importProject()
@@ -217,6 +219,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testFileCollectionDependency() {
configureByFiles()
importProject()
@@ -235,7 +238,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testUnresolvedDependency() {
configureByFiles()
importProject()
@@ -255,7 +258,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.30+")
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.30+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testAndroidDependencyOnMPP() {
configureByFiles()
createProjectSubFile(
@@ -359,6 +362,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testTestTasks() {
val files = configureByFiles()
importProject()
@@ -400,7 +404,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.50+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testImportTestsAndTargets() {
configureByFiles()
importProject()
@@ -427,7 +431,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
@Test
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.50+")
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.50+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testSingleAndroidTarget() {
configureByFiles()
importProject()
@@ -484,7 +488,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.10+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.10+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testDependencyOnRoot() {
configureByFiles()
importProject()
@@ -529,7 +533,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.10+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.10+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testNestedDependencies() {
configureByFiles()
importProject()
@@ -612,7 +616,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.20+")
@PluginTargetVersions(gradleVersion = "5.0+", pluginVersion = "1.3.20+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testDetectAndroidSources() {
configureByFiles()
createProjectSubFile(
@@ -634,7 +638,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
* dependencies in multiplatform project included in composite build
*/
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.20+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.20+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testPlatformToCommonExpByInComposite() {
configureByFiles()
importProject(true)
@@ -674,7 +678,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
* Test case for issue https://youtrack.jetbrains.com/issue/KT-29757
*/
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.40+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.40+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testJavaTransitiveOnMPP() {
configureByFiles()
importProject(true)
@@ -736,7 +740,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
* Test case for issue https://youtrack.jetbrains.com/issue/KT-28822
*/
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.41+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.41+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testImportBeforeBuild() {
configureByFiles()
importProject(true)
@@ -799,7 +803,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.20+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.20+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testProductionOnTestFlag() {
configureByFiles()
importProject(true)
@@ -812,7 +816,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testJvmWithJava() {
configureByFiles()
importProject(true)
@@ -865,7 +869,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testCommonTestTargetPlatform() {
configureByFiles()
importProject(true)
@@ -887,7 +891,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
}
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.60+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.60+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testIgnoreIncompatibleNativeTestTasks() {
configureByFiles()
importProject()
@@ -942,7 +946,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
@Test
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+")
@PluginTargetVersions(gradleVersion = "4.0+", pluginVersion = "1.3.30+", gradleVersionForLatestPlugin = mppImportTestMinVersionForMaster)
fun testMutableArtifactLists() {
configureByFiles()
importProject(true)
@@ -45,7 +45,7 @@ abstract class MultiplePluginVersionGradleImportingTestCase : GradleImportingTes
const val LATEST_SUPPORTED_VERSION = "master"// gradle plugin from current build
//should be extended with LATEST_SUPPORTED_VERSION
private val KOTLIN_GRADLE_PLUGIN_VERSIONS = listOf(MINIMAL_SUPPORTED_VERSION, LATEST_STABLE_VERSUON)
private val KOTLIN_GRADLE_PLUGIN_VERSIONS = listOf(MINIMAL_SUPPORTED_VERSION, LATEST_STABLE_VERSUON, LATEST_SUPPORTED_VERSION)
private val KOTLIN_GRADLE_PLUGIN_VERSION_DESCRIPTION_TO_VERSION = mapOf(
MINIMAL_SUPPORTED_VERSION to MINIMAL_SUPPORTED_GRADLE_PLUGIN_VERSION,
LATEST_STABLE_VERSUON to LATEST_STABLE_GRADLE_PLUGIN_VERSION,
@@ -61,7 +61,8 @@ abstract class MultiplePluginVersionGradleImportingTestCase : GradleImportingTes
@JvmStatic
@Parameterized.Parameters(name = "{index}: Gradle-{0}, KotlinGradlePlugin-{1}")
fun data(): Collection<Array<Any>> {
return AbstractModelBuilderTest.SUPPORTED_GRADLE_VERSIONS.flatMap { gradleVersion ->
//TODO(auskov): remove extending list of gradle versions when tested version are advanced
return (AbstractModelBuilderTest.SUPPORTED_GRADLE_VERSIONS + arrayOf("6.5")).flatMap { gradleVersion ->
KOTLIN_GRADLE_PLUGIN_VERSIONS.map { kotlinVersion ->
arrayOf<Any>(
gradleVersion[0],
@@ -72,33 +73,14 @@ abstract class MultiplePluginVersionGradleImportingTestCase : GradleImportingTes
}
}
fun repositories(useKts: Boolean, useMaster: Boolean): String {
val flatDirs = arrayOf(
"libraries/tools/kotlin-gradle-plugin/build/libs",
"prepare/compiler-client-embeddable/build/libs",
"prepare/compiler-embeddable/build/libs",
"libraries/tools/kotlin-gradle-plugin-api/build/libs",
"compiler/compiler-runner/build/libs",
"libraries/tools/kotlin-gradle-plugin-model/build/libs",
"plugins/scripting/scripting-compiler-embeddable/build/libs"
)
fun repositories(useKts: Boolean): String {
val customRepositories = arrayOf("https://dl.bintray.com/kotlin/kotlin-dev", "http://dl.bintray.com/kotlin/kotlin-eap")
val customMavenRepositories = customRepositories.map { if (useKts) "maven(\"$it\")" else "maven { url '$it' } " }.joinToString("\n")
val baseFolder = File(".").absolutePath.replace("\\", "/")
val quote = if (useKts) '"' else '\''
val flatDirRepositories = if (useMaster)
flatDirs.map { "$quote$baseFolder/$it$quote" }.joinToString(
",\n",
if (useKts) "flatDir { dirs(" else "flatDir { dirs ",
if (useKts) ")}" else "}"
)
else
""
return """
mavenLocal()
google()
jcenter()
$customMavenRepositories
$flatDirRepositories
""".trimIndent()
}
@@ -106,30 +88,8 @@ abstract class MultiplePluginVersionGradleImportingTestCase : GradleImportingTes
val unitedProperties = HashMap(properties ?: emptyMap())
unitedProperties["kotlin_plugin_version"] = gradleKotlinPluginVersion
unitedProperties["kotlin_plugin_repositories"] = repositories(false, gradleKotlinPluginVersionType == LATEST_SUPPORTED_VERSION)
unitedProperties["kts_kotlin_plugin_repositories"] = repositories(true, gradleKotlinPluginVersionType == LATEST_SUPPORTED_VERSION)
unitedProperties["extraPluginDependencies"] = if (gradleKotlinPluginVersionType == LATEST_SUPPORTED_VERSION)
"""
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$gradleKotlinPluginVersion")
classpath("org.jetbrains.kotlin:kotlin-compiler-embeddable:$gradleKotlinPluginVersion")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin-api:$gradleKotlinPluginVersion")
classpath("org.jetbrains.kotlin:kotlin-compiler-runner:$gradleKotlinPluginVersion")
classpath("org.jetbrains.kotlin:kotlin-compiler-client-embeddable:$gradleKotlinPluginVersion")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin-model:$gradleKotlinPluginVersion")
""".trimIndent()
else
""
unitedProperties["kts_resolution_strategy"] = if (gradleKotlinPluginVersionType == LATEST_SUPPORTED_VERSION)
"""resolutionStrategy {
eachPlugin {
if(requested.id.id == "org.jetbrains.kotlin.multiplatform") {
useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$gradleKotlinPluginVersion")
}
}
}""".trimIndent()
else ""
unitedProperties["kotlin_plugin_repositories"] = repositories(false)
unitedProperties["kts_kotlin_plugin_repositories"] = repositories(true)
return super.configureByFiles(unitedProperties)
}
}
@@ -48,11 +48,16 @@ public class PluginTargetVersionsRule extends TestWatcher {
@Nullable
private CustomMatcher pluginVersionMatcher;
@Nullable
private CustomMatcher gradleVersionMatcherForLatestPlugin;
@NotNull
public boolean matches(String gradleVersion, String pluginVersion, boolean isLatestPluginVersion) {
boolean matchGradleVersion = gradleVersionMatcher == null || gradleVersionMatcher.matches(gradleVersion);
if (isLatestPluginVersion) {
if (gradleVersionMatcherForLatestPlugin != null) {
return gradleVersionMatcherForLatestPlugin.matches(gradleVersion);
}
return matchGradleVersion;
}
boolean pluginVersionMatches = pluginVersionMatcher == null || pluginVersionMatcher.matches(pluginVersion);
@@ -68,7 +73,8 @@ public class PluginTargetVersionsRule extends TestWatcher {
}
if (pluginTargetVersions == null) return;
gradleVersionMatcher = VersionMatcherRule.produceMatcher("Gradle", new TargetVersionsImpl(pluginTargetVersions.gradleVersion()));
pluginVersionMatcher = VersionMatcherRule.produceMatcher("Plugin", new TargetVersionsImpl(pluginTargetVersions.pluginVersion()));
gradleVersionMatcher = pluginTargetVersions.gradleVersion().isEmpty() ? null : VersionMatcherRule.produceMatcher("Gradle", new TargetVersionsImpl(pluginTargetVersions.gradleVersion()));
pluginVersionMatcher = pluginTargetVersions.pluginVersion().isEmpty() ? null : VersionMatcherRule.produceMatcher("Plugin", new TargetVersionsImpl(pluginTargetVersions.pluginVersion()));
gradleVersionMatcherForLatestPlugin = pluginTargetVersions.gradleVersionForLatestPlugin().isEmpty() ? null : VersionMatcherRule.produceMatcher("Gradle for latest plugin", new TargetVersionsImpl(pluginTargetVersions.gradleVersionForLatestPlugin()));
}
}
@@ -12,7 +12,9 @@ import java.lang.annotation.*;
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface PluginTargetVersions {
String gradleVersion();
String gradleVersion() default "";
String pluginVersion();
String pluginVersion() default "";
String gradleVersionForLatestPlugin() default "";
}