Test quickfixes for updating language/API version and coroutine support in Gradle projects

This commit is contained in:
Dmitry Jemerov
2017-03-06 10:14:37 +01:00
parent 5d461ec6df
commit 73a2c8c436
14 changed files with 267 additions and 3 deletions
@@ -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"
}
@@ -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"
}
}
@@ -0,0 +1,2 @@
suspend fun foo() {
}
@@ -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"
}
@@ -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"
}
@@ -0,0 +1 @@
val x = <caret>"s"::length
@@ -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"
}
@@ -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"
}
@@ -0,0 +1 @@
val x = <caret>"s"::length
@@ -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"
}
@@ -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"
}
@@ -0,0 +1 @@
val x get() = 1
@@ -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;
}
@@ -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<CodeInsightTestFixture?>).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)
}
}
}