diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsGitIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsGitIT.kt index c98ba998b52..af8633035ac 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsGitIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsGitIT.kt @@ -212,7 +212,7 @@ class CocoaPodsGitIT : KGPBaseTest() { val anotherPodName = "Alamofire" val anotherPodRepo = "https://github.com/Alamofire/Alamofire" buildGradleKts.addPod(anotherPodName, produceGitBlock(anotherPodRepo)) - testImport(listOf(defaultPodRepo, anotherPodRepo)) { + testImport(repos = listOf(defaultPodRepo, anotherPodRepo)) { assertTasksExecuted( podspecTaskName, @@ -312,7 +312,7 @@ class CocoaPodsGitIT : KGPBaseTest() { } } - @DisplayName("Pod Build UTD after clean") + @DisplayName("Pod Build is not UTD after clean") @GradleTest fun testPodBuildUTDClean(gradleVersion: GradleVersion) { nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion) { @@ -403,7 +403,74 @@ class CocoaPodsGitIT : KGPBaseTest() { assertTasksUpToDate(defaultPodGenTaskName) } } + } + @DisplayName("UTD for spec repos") + @GradleTest + fun testSpecReposUTD(gradleVersion: GradleVersion) { + nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion) { + + buildGradleKts.addPod("AFNetworking") + build(defaultPodGenTaskName) { + assertTasksExecuted(defaultPodGenTaskName) + } + + buildGradleKts.addSpecRepo("https://github.com/alozhkin/spec_repo_example.git") + build(defaultPodGenTaskName) { + assertTasksExecuted(defaultPodGenTaskName) + } + + build(defaultPodGenTaskName) { + assertTasksUpToDate(defaultPodGenTaskName) + } + } + } + + @DisplayName("Import subspecs") + @GradleTest + fun testImportSubspecs(gradleVersion: GradleVersion) { + nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion) { + buildGradleKts.addPod("SDWebImage/Core") + buildGradleKts.addPod("SDWebImage/MapKit") + testImport() + } + } + + @DisplayName("Checking useLibraries mode") + @GradleTest + fun testUseLibrariesMode(gradleVersion: GradleVersion) { + nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion) { + buildGradleKts.addCocoapodsBlock("useLibraries()") + buildGradleKts.addPod("AFNetworking", configuration = "headers = \"AFNetworking/AFNetworking.h\"") + testImport() + } + } + + @DisplayName("Checking that useLibraries mode warns when pod is added without headers specified") + @GradleTest + fun testUseLibrariesModeWarnsWhenPodIsAddedWithoutHeadersSpecified(gradleVersion: GradleVersion) { + nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion) { + buildGradleKts.addCocoapodsBlock("useLibraries()") + buildGradleKts.addPod("AFNetworking") + testImport { + assertOutputContains("w: Pod 'AFNetworking' should have 'headers' property specified when using 'useLibraries()'") + } + } + } + + @DisplayName("Spec repos import") + @GradleTest + fun testSpecReposImport(gradleVersion: GradleVersion) { + val podName = "example" + val podRepo = "https://github.com/alozhkin/spec_repo" + nativeProjectWithCocoapodsAndIosAppPodFile(gradleVersion = gradleVersion) { + buildGradleKts.addPod(podName) + buildGradleKts.addSpecRepo(podRepo) + + testImport(repos = listOf(podRepo)) { + podImportAsserts(buildGradleKts) + } + } } private fun doTestGit( @@ -423,7 +490,7 @@ class CocoaPodsGitIT : KGPBaseTest() { val buildScript = if (isGradleBuildScript) buildGradle else buildGradleKts buildScript.addPod(pod, produceGitBlock(repo, branch, commit, tag)) - testImport(listOf(repo)) { + testImport(repos = listOf(repo)) { podImportAsserts(buildScript) testImportAssertions() } @@ -493,6 +560,7 @@ class CocoaPodsGitIT : KGPBaseTest() { } private fun TestProject.testImport( + taskName: String = podImportTaskName, repos: List = listOf(defaultPodRepo), vararg args: String, assertions: BuildResult.() -> Unit = {}, @@ -500,10 +568,8 @@ class CocoaPodsGitIT : KGPBaseTest() { isRepoAvailable(repos) - build(podImportTaskName, *args) { + build(taskName, *args) { assertions() } } - - } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt index 783e3094512..ccfa0d4f958 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt @@ -6,12 +6,10 @@ package org.jetbrains.kotlin.gradle.native import org.jetbrains.kotlin.gradle.* +import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.DUMMY_FRAMEWORK_TASK_NAME -import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_BUILD_TASK_NAME -import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_GEN_TASK_NAME import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_IMPORT_TASK_NAME import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_INSTALL_TASK_NAME -import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_SETUP_BUILD_TASK_NAME import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_SPEC_TASK_NAME import org.jetbrains.kotlin.gradle.testbase.ImportMode import org.jetbrains.kotlin.gradle.testbase.cocoaPodsEnvironmentVariables @@ -54,19 +52,12 @@ class CocoaPodsIT : BaseGradleIT() { private val dummyTaskName = ":$DUMMY_FRAMEWORK_TASK_NAME" private val podspecTaskName = ":$POD_SPEC_TASK_NAME" - private val podGenTaskName = ":$POD_GEN_TASK_NAME" private val podImportTaskName = ":$POD_IMPORT_TASK_NAME" private val podInstallTaskName = ":$POD_INSTALL_TASK_NAME" - private val defaultPodRepo = "https://github.com/AFNetworking/AFNetworking" private val defaultPodName = "AFNetworking" - private val defaultFamily = "ios" - private val defaultPodGenTaskName = podGenFullTaskName() private val defaultPodInstallSyntheticTaskName = ":podInstallSyntheticIos" - private fun podGenFullTaskName(familyName: String = defaultFamily) = - podGenTaskName + familyName.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } - private lateinit var hooks: CustomHooks private lateinit var project: BaseGradleIT.Project @@ -111,17 +102,6 @@ class CocoaPodsIT : BaseGradleIT() { project.testSynthetic(":second-library:podImport") } - @Test - fun testSpecReposImport() { - val podName = "example" - val podRepo = "https://github.com/alozhkin/spec_repo" - with(project.gradleBuildScript()) { - addPod(podName) - addSpecRepo(podRepo) - } - project.testImportWithAsserts(listOf(podRepo)) - } - @Test fun testSyntheticProjectPodfileGeneration() { val gradleProject = transformProjectWithPluginsDsl(cocoapodsSingleKtPod, gradleVersion) @@ -251,6 +231,7 @@ class CocoaPodsIT : BaseGradleIT() { project.testImport() } + @Test fun testChangeFrameworkTypeUTD() { project.gradleBuildScript().appendToCocoapodsBlock( @@ -290,26 +271,6 @@ class CocoaPodsIT : BaseGradleIT() { project.testImport() } - - @Test - fun testSpecReposUTD() { - with(project.gradleBuildScript()) { - addPod("AFNetworking") - } - hooks.addHook { - assertTasksExecuted(defaultPodGenTaskName) - } - project.testSynthetic(defaultPodGenTaskName) - with(project.gradleBuildScript()) { - addSpecRepo("https://github.com/alozhkin/spec_repo_example.git") - } - project.testSynthetic(defaultPodGenTaskName) - hooks.rewriteHooks { - assertTasksUpToDate(defaultPodGenTaskName) - } - project.testSynthetic(defaultPodGenTaskName) - } - @Test fun testPodInstallInvalidatesUTD() { with(project.gradleBuildScript()) { @@ -328,15 +289,6 @@ class CocoaPodsIT : BaseGradleIT() { project.testSynthetic(defaultPodInstallSyntheticTaskName) } - @Test - fun testImportSubspecs() { - with(project.gradleBuildScript()) { - addPod("SDWebImage/Core") - addPod("SDWebImage/MapKit") - } - project.testImport(listOf(defaultPodRepo)) - } - @Test fun testUTDPodspec() { project.testWithWrapper(podspecTaskName) @@ -378,9 +330,6 @@ class CocoaPodsIT : BaseGradleIT() { project.testSynthetic(podInstallTaskName) } - - // other tests - @Test fun supportPodsWithDependencies() { with(project.gradleBuildScript()) { @@ -420,31 +369,6 @@ class CocoaPodsIT : BaseGradleIT() { } } - @Test - fun testUseLibrariesMode() { - with(project) { - gradleBuildScript().appendToCocoapodsBlock("useLibraries()") - gradleBuildScript().addPod("AFNetworking", configuration = "headers = \"AFNetworking/AFNetworking.h\"") - testImport() - } - } - - - @Test - fun testUseLibrariesModeWarnWhenPodIsAddedWithoutHeadersSpecified() { - with(project) { - gradleBuildScript().appendToCocoapodsBlock("useLibraries()") - gradleBuildScript().addPod("AFNetworking") - - hooks.addHook { - assertContains("w: Pod 'AFNetworking' should have 'headers' property specified when using 'useLibraries()'") - } - - testImport() - } - } - - @Test fun testCocoapodsWithRegularFrameworkDefinition() { with(project) { @@ -906,7 +830,6 @@ class CocoaPodsIT : BaseGradleIT() { } } - private fun Project.testImportWithAsserts( repos: List = listOf(), vararg args: String, @@ -965,7 +888,6 @@ class CocoaPodsIT : BaseGradleIT() { appendToCocoapodsBlock(podBlock) } - private fun File.addSpecRepo(specRepo: String) = appendToCocoapodsBlock("url(\"$specRepo\")".wrap("specRepos")) private fun File.appendToKotlinBlock(str: String) = appendLine(str.wrap("kotlin")) @@ -980,8 +902,6 @@ class CocoaPodsIT : BaseGradleIT() { """.trimMargin() private fun File.appendLine(s: String) = appendText("\n$s") - - // proposition phase private fun isRepoAvailable(repo: String): Boolean { @@ -1022,12 +942,12 @@ class CocoaPodsIT : BaseGradleIT() { } else { assertTasksSkipped("$taskPrefix:$podInstall") } - assertTasksRegisteredByPrefix(listOf("$taskPrefix:$POD_GEN_TASK_NAME")) + assertTasksRegisteredByPrefix(listOf("$taskPrefix:${KotlinCocoapodsPlugin.POD_GEN_TASK_NAME}")) if (buildScriptText.matches("pod\\(.*\\)".toRegex())) { - assertTasksExecutedByPrefix(listOf("$taskPrefix:$POD_GEN_TASK_NAME")) + assertTasksExecutedByPrefix(listOf("$taskPrefix:${KotlinCocoapodsPlugin.POD_GEN_TASK_NAME}")) } - with(listOf(POD_SETUP_BUILD_TASK_NAME, POD_BUILD_TASK_NAME).map { "$taskPrefix:$it" }) { + with(listOf(KotlinCocoapodsPlugin.POD_SETUP_BUILD_TASK_NAME, KotlinCocoapodsPlugin.POD_BUILD_TASK_NAME).map { "$taskPrefix:$it" }) { if (buildScriptText.matches("pod\\(.*\\)".toRegex())) { assertTasksRegisteredByPrefix(this) assertTasksExecutedByPrefix(this)