From fef193be637bbd6aadcca523da1aef67c80fc506 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Wed, 4 Dec 2019 15:07:06 +0300 Subject: [PATCH] gradle.kts: add tests for importing scripts configuration --- .../gradle/AbstractModelBuilderTest.java | 2 +- .../gradle/AbstractModelBuilderTest.java.as36 | 2 +- .../codeInsight/gradle/GradleKtsImportTest.kt | 84 +++++++++++++++++++ .../empty/build.gradle.kts | 1 + 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt create mode 100644 idea/testData/gradle/gradleKtsImportTest/empty/build.gradle.kts diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java index b473aa5f250..d840186840e 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java @@ -49,7 +49,7 @@ import static org.junit.Assume.assumeThat; @RunWith(value = Parameterized.class) public abstract class AbstractModelBuilderTest { - public static final Object[][] SUPPORTED_GRADLE_VERSIONS = {{"4.9"}, {"5.6.4"}}; + public static final Object[][] SUPPORTED_GRADLE_VERSIONS = {{"4.9"}, {"5.6.4"}, {"6.0.1"}}; private static final Pattern TEST_METHOD_NAME_PATTERN = Pattern.compile("(.*)\\[(\\d*: with Gradle-.*)\\]"); diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java.as36 b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java.as36 index 42fdde3a79e..56915c21545 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java.as36 +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/AbstractModelBuilderTest.java.as36 @@ -61,7 +61,7 @@ import static org.junit.Assume.assumeThat; @RunWith(value = Parameterized.class) public abstract class AbstractModelBuilderTest { - public static final Object[][] SUPPORTED_GRADLE_VERSIONS = {{"4.9"}, {"5.6.4"}}; + public static final Object[][] SUPPORTED_GRADLE_VERSIONS = {{"4.9"}, {"5.6.4"}, {"6.0.1"}}; private static final Pattern TEST_METHOD_NAME_PATTERN = Pattern.compile("(.*)\\[(\\d*: with Gradle-.*)\\]"); diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt new file mode 100644 index 00000000000..d969db3f204 --- /dev/null +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt @@ -0,0 +1,84 @@ +/* + * Copyright 2010-2019 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.openapi.vfs.LocalFileSystem +import org.jetbrains.kotlin.idea.completion.test.KotlinCompletionTestCase +import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager +import org.jetbrains.kotlin.idea.core.script.applySuggestedScriptConfiguration +import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationCacheScope +import org.jetbrains.kotlin.idea.core.script.configuration.utils.areSimilar +import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile +import org.jetbrains.kotlin.idea.core.script.hasSuggestedScriptConfiguration +import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper +import org.jetbrains.plugins.gradle.settings.GradleSettings +import org.jetbrains.plugins.gradle.tooling.annotation.TargetVersions +import org.junit.Test +import java.io.File + + +class GradleKtsImportTest : GradleImportingTestCase() { + val scriptConfigurationManager get() = ScriptConfigurationManager.getInstance(myProject) + val projectDir get() = File(GradleSettings.getInstance(myProject).linkedProjectsSettings.first().externalProjectPath) + + override fun testDataDirName(): String { + return "gradleKtsImportTest" + } + + @Test + @TargetVersions("6.0.1+") + fun testEmpty() { + configureByFiles() + importProject() + + checkConfiguration("build.gradle.kts") + } + + private fun checkConfiguration(vararg files: String) { + val scripts = files.map { + KtsFixture(it).also { kts -> + assertTrue(scriptConfigurationManager.hasConfiguration(kts.psiFile)) + kts.imported = scriptConfigurationManager.getConfiguration(kts.psiFile)!! + } + } + + // reload configuration and check this it is not changed + scripts.forEach { + scriptConfigurationManager.updater.postponeConfigurationReload(ScriptConfigurationCacheScope.File(it.psiFile)) + val reloadedConfiguration = scriptConfigurationManager.getConfiguration(it.psiFile)!! + assertTrue(areSimilar(it.imported, reloadedConfiguration)) + it.assertNoSuggestedConfiguration() + } + + // clear memory cache and check everything loaded from FS + ScriptConfigurationManager.clearCaches(myProject) + scripts.forEach { + val fromFs = scriptConfigurationManager.getConfiguration(it.psiFile)!! + assertTrue(areSimilar(it.imported, fromFs)) + } + } + + inner class KtsFixture(val fileName: String) { + val file = projectDir.resolve(fileName) + + val virtualFile get() = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file)!! + val psiFile get() = myProject.getKtFile(virtualFile)!! + + lateinit var imported: ScriptCompilationConfigurationWrapper + + fun assertSuggestedConfiguration() { + assertTrue(virtualFile.hasSuggestedScriptConfiguration(myProject)) + } + + fun assertAndApplySuggestedConfiguration() { + assertTrue(virtualFile.applySuggestedScriptConfiguration(myProject)) + } + + fun assertNoSuggestedConfiguration() { + assertFalse(virtualFile.applySuggestedScriptConfiguration(myProject)) + } + } +} \ No newline at end of file diff --git a/idea/testData/gradle/gradleKtsImportTest/empty/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/empty/build.gradle.kts new file mode 100644 index 00000000000..c99dcc42599 --- /dev/null +++ b/idea/testData/gradle/gradleKtsImportTest/empty/build.gradle.kts @@ -0,0 +1 @@ +// project without sources sets to check that import also works \ No newline at end of file