From d61e40e49be2012a442509c09cb0e4d7a1d2a28b Mon Sep 17 00:00:00 2001 From: Konstantin Tskhovrebov Date: Wed, 25 Mar 2020 15:33:18 +0300 Subject: [PATCH] Add tests for setup native run gutters. --- .../gradle/NativeRunConfigurationTest.kt | 103 ++++++++++++++++++ .../build.gradle.kts | 21 ++++ .../gradle.properties | 1 + .../settings.gradle.kts | 10 ++ .../macosMain/kotlin/sample/SampleMacos.kt | 6 + .../build.gradle.kts | 27 +++++ .../settings.gradle.kts | 10 ++ .../commonMain/kotlin/sample/SampleCommon.kt | 5 + .../macosMain/kotlin/sample/SampleMacos.kt | 6 + .../macosTest/kotlin/sample/SampleTests.kt | 5 + 10 files changed, 194 insertions(+) create mode 100644 idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/NativeRunConfigurationTest.kt create mode 100644 idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/build.gradle.kts create mode 100644 idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/gradle.properties create mode 100644 idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/settings.gradle.kts create mode 100644 idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt create mode 100644 idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/build.gradle.kts create mode 100644 idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/settings.gradle.kts create mode 100644 idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/commonMain/kotlin/sample/SampleCommon.kt create mode 100644 idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt create mode 100644 idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosTest/kotlin/sample/SampleTests.kt diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/NativeRunConfigurationTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/NativeRunConfigurationTest.kt new file mode 100644 index 00000000000..1c0605f32ba --- /dev/null +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/NativeRunConfigurationTest.kt @@ -0,0 +1,103 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.codeInsight.gradle + +import com.intellij.codeInsight.daemon.LineMarkerInfo +import com.intellij.execution.PsiLocation +import com.intellij.execution.actions.ConfigurationContext +import com.intellij.execution.actions.ConfigurationFromContext +import com.intellij.openapi.vfs.VirtualFile +import org.jetbrains.kotlin.gradle.GradleDaemonAnalyzerTestCase +import org.jetbrains.kotlin.test.TagsTestDataUtil +import org.jetbrains.plugins.gradle.service.execution.GradleRunConfiguration +import org.junit.Test +import org.junit.runners.Parameterized +import java.net.URL +import java.util.* + +class NativeRunConfigurationTest : GradleImportingTestCase() { + private companion object { + private const val DEFAULT_PLUGIN_VERSION = "1.4-M2" + private val latestPluginVersion by lazy { + PluginVersionDownloader.getLatestDevVersion() ?: DEFAULT_PLUGIN_VERSION + } + + @JvmStatic + @Parameterized.Parameters(name = "{index}: Gradle-{0}, KotlinGradlePlugin-{1}") + fun data(): Collection> = listOf(arrayOf("6.0.1", latestPluginVersion)) + } + + override fun testDataDirName(): String = "nativeRunConfiguration" + + @JvmField + @Parameterized.Parameter(1) + var kotlinGradlePluginVersion: String = DEFAULT_PLUGIN_VERSION + + @Test + fun multiplatformNativeRunGutter() { + doTest() + } + + @Test + fun customEntryPointWithoutRunGutter() { + doTest() + } + + override fun configureByFiles(properties: Map?): List { + val unitedProperties = HashMap(properties ?: emptyMap()) + unitedProperties["kotlin_plugin_version"] = kotlinGradlePluginVersion + return super.configureByFiles(unitedProperties) + } + + private fun doTest() { + val files = importProjectFromTestData() + val project = myTestFixture.project + + org.jetbrains.kotlin.gradle.checkFiles( + files.filter { it.extension == "kt" }, + project, + object : GradleDaemonAnalyzerTestCase( + testLineMarkers = true, + checkWarnings = false, + checkInfos = false, + rootDisposable = testRootDisposable + ) { + override fun renderAdditionalAttributeForTag(tag: TagsTestDataUtil.TagInfo<*>): String? { + val lineMarkerInfo = tag.data as? LineMarkerInfo<*> ?: return null + val gradleRunConfigs = lineMarkerInfo.extractConfigurations().filter { it.configuration is GradleRunConfiguration } + val runConfig = gradleRunConfigs.singleOrNull() // can we have more than one? + + val settings = (runConfig?.configurationSettings?.configuration as? GradleRunConfiguration)?.settings ?: return null + + return "settings=\"${settings}\"" + } + + } + ) + } + + private fun LineMarkerInfo<*>.extractConfigurations(): List { + val location = PsiLocation(element) + val emptyContext = ConfigurationContext.createEmptyContextForLocation(location) + return emptyContext.configurationsFromContext.orEmpty() + } +} + +object PluginVersionDownloader { + fun getLatestEapVersion() = downloadVersions(EAP_URL).lastOrNull() + fun getLatestDevVersion() = downloadVersions(DEV_URL).lastOrNull() + + private fun downloadVersions(url: String): List { + return versionRegexp.findAll(URL(url).readText()) + .map { it.groupValues[1].removeSuffix("/") } + .filter { it.isNotEmpty() && it[0].isDigit() } + .toList() + } + + private const val EAP_URL = "https://dl.bintray.com/kotlin/kotlin-eap/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/" + private const val DEV_URL = "https://dl.bintray.com/kotlin/kotlin-dev/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin/" + private val versionRegexp = """href="([^"\\]+)"""".toRegex() +} \ No newline at end of file diff --git a/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/build.gradle.kts b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/build.gradle.kts new file mode 100644 index 00000000000..f4f8fae875f --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + id("org.jetbrains.kotlin.multiplatform") version ("{{kotlin_plugin_version}}") +} +repositories { + maven("https://dl.bintray.com/kotlin/kotlin-eap") + maven("https://dl.bintray.com/kotlin/kotlin-dev") + mavenLocal() +} + +kotlin { + macosX64("macos") { + binaries { + executable { + entryPoint = "sample.foo" + } + } + } + sourceSets { + val macosMain by getting {} + } +} \ No newline at end of file diff --git a/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/gradle.properties b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/gradle.properties new file mode 100644 index 00000000000..ab89dc9dd74 --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/gradle.properties @@ -0,0 +1 @@ +kotlin.import.noCommonSourceSets=true \ No newline at end of file diff --git a/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/settings.gradle.kts b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/settings.gradle.kts new file mode 100644 index 00000000000..e9d561aa042 --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/settings.gradle.kts @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + maven("https://dl.bintray.com/kotlin/kotlin-eap") + maven("https://dl.bintray.com/kotlin/kotlin-dev") + mavenLocal() + gradlePluginPortal() + } +} + +rootProject.name = "test" \ No newline at end of file diff --git a/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt new file mode 100644 index 00000000000..114a47555eb --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/customEntryPointWithoutRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt @@ -0,0 +1,6 @@ +package sample + + +fun main() {} + +fun foo() {} diff --git a/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/build.gradle.kts b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/build.gradle.kts new file mode 100644 index 00000000000..28ffe236ffb --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + id("org.jetbrains.kotlin.multiplatform") version ("{{kotlin_plugin_version}}") +} +repositories { + maven("https://dl.bintray.com/kotlin/kotlin-eap") + maven("https://dl.bintray.com/kotlin/kotlin-dev") + mavenLocal() +} + +kotlin { + macosX64("macos") { + binaries { + executable { + entryPoint = "sample.main" + } + } + } + sourceSets { + commonMain { + dependencies { + implementation(kotlin("stdlib-common")) + } + } + val macosMain by getting { + } + } +} \ No newline at end of file diff --git a/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/settings.gradle.kts b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/settings.gradle.kts new file mode 100644 index 00000000000..e9d561aa042 --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/settings.gradle.kts @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + maven("https://dl.bintray.com/kotlin/kotlin-eap") + maven("https://dl.bintray.com/kotlin/kotlin-dev") + mavenLocal() + gradlePluginPortal() + } +} + +rootProject.name = "test" \ No newline at end of file diff --git a/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/commonMain/kotlin/sample/SampleCommon.kt b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/commonMain/kotlin/sample/SampleCommon.kt new file mode 100644 index 00000000000..eb0a5fe1ae9 --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/commonMain/kotlin/sample/SampleCommon.kt @@ -0,0 +1,5 @@ +package sample + + +fun main() { +} \ No newline at end of file diff --git a/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt new file mode 100644 index 00000000000..a1c5de2b34a --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosMain/kotlin/sample/SampleMacos.kt @@ -0,0 +1,6 @@ +package sample + + +fun main() {} + +fun foo() {} diff --git a/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosTest/kotlin/sample/SampleTests.kt b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosTest/kotlin/sample/SampleTests.kt new file mode 100644 index 00000000000..eb0a5fe1ae9 --- /dev/null +++ b/idea/testData/gradle/nativeRunConfiguration/multiplatformNativeRunGutter/src/macosTest/kotlin/sample/SampleTests.kt @@ -0,0 +1,5 @@ +package sample + + +fun main() { +} \ No newline at end of file