gradle.kts: add tests for importing scripts configuration

This commit is contained in:
Sergey Rostov
2019-12-04 15:07:06 +03:00
parent dcd67d79f4
commit fef193be63
4 changed files with 87 additions and 2 deletions
@@ -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-.*)\\]");
@@ -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-.*)\\]");
@@ -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))
}
}
}
@@ -0,0 +1 @@
// project without sources sets to check that import also works