diff --git a/idea/testData/gradle/languageFeature/enableCoroutines/build.gradle b/idea/testData/gradle/languageFeature/enableCoroutines/build.gradle new file mode 100644 index 00000000000..846876a724c --- /dev/null +++ b/idea/testData/gradle/languageFeature/enableCoroutines/build.gradle @@ -0,0 +1,18 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} diff --git a/idea/testData/gradle/languageFeature/enableCoroutines/build.gradle.after b/idea/testData/gradle/languageFeature/enableCoroutines/build.gradle.after new file mode 100644 index 00000000000..9bfa877c8b1 --- /dev/null +++ b/idea/testData/gradle/languageFeature/enableCoroutines/build.gradle.after @@ -0,0 +1,23 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} +kotlin { + experimental { + coroutines "enable" + } +} diff --git a/idea/testData/gradle/languageFeature/enableCoroutines/src.kt b/idea/testData/gradle/languageFeature/enableCoroutines/src.kt new file mode 100644 index 00000000000..624d4625e64 --- /dev/null +++ b/idea/testData/gradle/languageFeature/enableCoroutines/src.kt @@ -0,0 +1,2 @@ +suspend fun foo() { +} diff --git a/idea/testData/gradle/languageFeature/updateApiVersion/build.gradle b/idea/testData/gradle/languageFeature/updateApiVersion/build.gradle new file mode 100644 index 00000000000..ae4106fc71e --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateApiVersion/build.gradle @@ -0,0 +1,22 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} + +compileKotlin { + kotlinOptions.apiVersion = "1.0" +} diff --git a/idea/testData/gradle/languageFeature/updateApiVersion/build.gradle.after b/idea/testData/gradle/languageFeature/updateApiVersion/build.gradle.after new file mode 100644 index 00000000000..fbf5ce82b61 --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateApiVersion/build.gradle.after @@ -0,0 +1,22 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} + +compileKotlin { + kotlinOptions.apiVersion = "1.1" +} diff --git a/idea/testData/gradle/languageFeature/updateApiVersion/src.kt b/idea/testData/gradle/languageFeature/updateApiVersion/src.kt new file mode 100644 index 00000000000..ccaa5fc137a --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateApiVersion/src.kt @@ -0,0 +1 @@ +val x = "s"::length diff --git a/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/build.gradle b/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/build.gradle new file mode 100644 index 00000000000..96f78136141 --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/build.gradle @@ -0,0 +1,23 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} + +compileKotlin { + kotlinOptions.languageVersion = "1.0" + kotlinOptions.apiVersion = "1.0" +} diff --git a/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/build.gradle.after b/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/build.gradle.after new file mode 100644 index 00000000000..728cdcb7098 --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/build.gradle.after @@ -0,0 +1,23 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} + +compileKotlin { + kotlinOptions.languageVersion = "1.1" + kotlinOptions.apiVersion = "1.1" +} diff --git a/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/src.kt b/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/src.kt new file mode 100644 index 00000000000..ccaa5fc137a --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateLanguageAndApiVersion/src.kt @@ -0,0 +1 @@ +val x = "s"::length diff --git a/idea/testData/gradle/languageFeature/updateLanguageVersion/build.gradle b/idea/testData/gradle/languageFeature/updateLanguageVersion/build.gradle new file mode 100644 index 00000000000..c6d8e03080e --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateLanguageVersion/build.gradle @@ -0,0 +1,22 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} + +compileKotlin { + kotlinOptions.languageVersion = "1.0" +} diff --git a/idea/testData/gradle/languageFeature/updateLanguageVersion/build.gradle.after b/idea/testData/gradle/languageFeature/updateLanguageVersion/build.gradle.after new file mode 100644 index 00000000000..0e739dd351b --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateLanguageVersion/build.gradle.after @@ -0,0 +1,22 @@ +group 'Again' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } +} + +apply plugin: 'kotlin' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0" +} + +compileKotlin { + kotlinOptions.languageVersion = "1.1" +} diff --git a/idea/testData/gradle/languageFeature/updateLanguageVersion/src.kt b/idea/testData/gradle/languageFeature/updateLanguageVersion/src.kt new file mode 100644 index 00000000000..5531476003c --- /dev/null +++ b/idea/testData/gradle/languageFeature/updateLanguageVersion/src.kt @@ -0,0 +1 @@ +val x get() = 1 diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/ExternalSystemTestCase.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/ExternalSystemTestCase.java index cc5d74c6f99..4cf7796a439 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/ExternalSystemTestCase.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/ExternalSystemTestCase.java @@ -55,7 +55,7 @@ import java.util.List; public abstract class ExternalSystemTestCase extends UsefulTestCase { private File ourTempDir; - private IdeaProjectTestFixture myTestFixture; + protected IdeaProjectTestFixture myTestFixture; protected Project myProject; @@ -141,7 +141,7 @@ public abstract class ExternalSystemTestCase extends UsefulTestCase { protected abstract String getTestsTempDir(); - private void setUpFixtures() throws Exception { + protected void setUpFixtures() throws Exception { myTestFixture = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName()).getFixture(); myTestFixture.setUp(); } @@ -176,7 +176,7 @@ public abstract class ExternalSystemTestCase extends UsefulTestCase { } } - private void tearDownFixtures() throws Exception { + protected void tearDownFixtures() throws Exception { myTestFixture.tearDown(); myTestFixture = null; } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleLanguageFeatureQuickFixTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleLanguageFeatureQuickFixTest.kt new file mode 100644 index 00000000000..3f04032b6a6 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleLanguageFeatureQuickFixTest.kt @@ -0,0 +1,84 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.codeInsight.gradle + +import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.openapi.fileEditor.impl.LoadTextUtil +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.rt.execution.junit.FileComparisonFailure +import com.intellij.testFramework.fixtures.CodeInsightTestFixture +import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.test.testFramework.runInEdtAndWait +import org.junit.Test +import java.io.File +import kotlin.reflect.KMutableProperty0 + +class GradleLanguageFeatureQuickFixTest : GradleImportingTestCase() { + private lateinit var codeInsightTestFixture: CodeInsightTestFixture + + fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/gradle/languageFeature/" + getTestName(true).substringBefore('_') + + override fun setUpFixtures() { + myTestFixture = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName()).fixture + codeInsightTestFixture = IdeaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(myTestFixture) + codeInsightTestFixture.setUp() + } + + override fun tearDownFixtures() { + codeInsightTestFixture.tearDown() + (this::codeInsightTestFixture as KMutableProperty0).set(null) + myTestFixture = null + } + + @Test fun testUpdateLanguageVersion() { + doTest("Set module language version to 1.1") + } + + @Test fun testUpdateApiVersion() { + doTest("Set module API version to 1.1") + } + + @Test fun testUpdateLanguageAndApiVersion() { + doTest("Set module language version to 1.1") + } + + @Test fun testEnableCoroutines() { + doTest("Enable coroutine support in the current module") + } + + private fun doTest(intentionName: String) { + val buildGradleVFile = createProjectSubFile("build.gradle", File(getTestDataPath(), "build.gradle").readText()) + importProject() + runInEdtAndWait { + val sourceVFile = createProjectSubFile("src/main/kotlin/src.kt", File(getTestDataPath(), "src.kt").readText()) + codeInsightTestFixture.configureFromExistingVirtualFile(sourceVFile) + codeInsightTestFixture.launchAction(codeInsightTestFixture.findSingleIntention(intentionName)) + FileDocumentManager.getInstance().saveAllDocuments() + checkResult(buildGradleVFile) + } + } + + private fun checkResult(file: VirtualFile) { + val expectedPath = File(getTestDataPath(), "build.gradle.after") + val expectedContent = expectedPath.readText() + val actualContent = LoadTextUtil.loadText(file).toString() + if (actualContent != expectedContent) { + throw FileComparisonFailure("build.gradle doesn't match", expectedContent, actualContent, expectedPath.path) + } + } +}