mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
[kotlin] Add basic gradle hl tests
#KTIJ-30118 #KTIJ-28597 GitOrigin-RevId: d4e62f0dc2bd81e0237dc4aa728c8213d771a9f6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3b7873d0a6
commit
e33e4b641a
@@ -0,0 +1,17 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.k2.codeInsight.gradle
|
||||
|
||||
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleHighlightingTest
|
||||
import org.jetbrains.kotlin.idea.test.AssertKotlinPluginMode
|
||||
import org.jetbrains.kotlin.idea.test.UseK2PluginMode
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradleProjectTestApplication
|
||||
|
||||
@UseK2PluginMode
|
||||
@GradleProjectTestApplication
|
||||
@AssertKotlinPluginMode
|
||||
class K2GradleHighlightingTest: AbstractKotlinGradleHighlightingTest() {
|
||||
override fun setUp() {
|
||||
testRootDisposable.enableK2Scripting()
|
||||
super.setUp()
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.k2.codeInsight.gradle
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleNavigationTest
|
||||
@@ -10,17 +11,20 @@ import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradlePro
|
||||
|
||||
private const val SCRIPTING_ENABLED_FLAG = "kotlin.k2.scripting.enabled"
|
||||
|
||||
internal fun Disposable.enableK2Scripting() {
|
||||
val oldUseScripting = Registry.`is`(SCRIPTING_ENABLED_FLAG, false)
|
||||
Registry.get(SCRIPTING_ENABLED_FLAG).setValue(true)
|
||||
Disposer.register(this) {
|
||||
Registry.get(SCRIPTING_ENABLED_FLAG).setValue(oldUseScripting)
|
||||
}
|
||||
}
|
||||
|
||||
@UseK2PluginMode
|
||||
@GradleProjectTestApplication
|
||||
@AssertKotlinPluginMode
|
||||
class K2GradleNavigationTest : AbstractKotlinGradleNavigationTest() {
|
||||
override fun setUp() {
|
||||
val oldUseScripting = Registry.`is`(SCRIPTING_ENABLED_FLAG, false)
|
||||
Registry.get(SCRIPTING_ENABLED_FLAG).setValue(true)
|
||||
Disposer.register(testRootDisposable) {
|
||||
Registry.get(SCRIPTING_ENABLED_FLAG).setValue(oldUseScripting)
|
||||
}
|
||||
testRootDisposable.enableK2Scripting()
|
||||
super.setUp()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import com.intellij.testFramework.TestDataPath
|
||||
import com.intellij.testFramework.runInEdtAndWait
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.AbstractKotlinGradleNavigationTest.Companion.GRADLE_KOTLIN_FIXTURE
|
||||
import org.jetbrains.kotlin.idea.base.plugin.useK2Plugin
|
||||
import org.jetbrains.kotlin.idea.base.test.IgnoreTests
|
||||
import org.jetbrains.kotlin.idea.base.test.TestRoot
|
||||
import org.jetbrains.kotlin.idea.codeMetaInfo.renderConfigurations.HighlightingConfiguration.SeverityRenderingOption
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.highlighter.CHECK_SYMBOL_NAMES
|
||||
import org.jetbrains.kotlin.idea.highlighter.checkHighlighting
|
||||
import org.jetbrains.kotlin.idea.test.KotlinTestUtils.parseDirectives
|
||||
import org.jetbrains.kotlin.test.TestMetadata
|
||||
import org.jetbrains.plugins.gradle.testFramework.annotations.BaseGradleVersionSource
|
||||
import org.junit.jupiter.params.ParameterizedTest
|
||||
import java.io.File
|
||||
|
||||
@TestRoot("idea/tests/testData/")
|
||||
@TestDataPath("\$CONTENT_ROOT")
|
||||
@TestMetadata("gradle/highlighting")
|
||||
abstract class AbstractKotlinGradleHighlightingTest : AbstractGradleCodeInsightTest() {
|
||||
|
||||
@ParameterizedTest
|
||||
@BaseGradleVersionSource
|
||||
@TestMetadata("simple.test")
|
||||
fun testSimple(gradleVersion: GradleVersion) {
|
||||
verifyHighlighting(gradleVersion)
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@BaseGradleVersionSource
|
||||
@TestMetadata("withSdkAndScriptClasses.test")
|
||||
fun testWithSdkAndScriptClasses(gradleVersion: GradleVersion) {
|
||||
verifyHighlighting(gradleVersion)
|
||||
}
|
||||
|
||||
private val outputFileExtensions: List<String> = listOfNotNull(".highlighting.k2".takeIf { useK2Plugin == true }, ".highlighting")
|
||||
|
||||
private fun verifyHighlighting(gradleVersion: GradleVersion) {
|
||||
test(gradleVersion, GRADLE_KOTLIN_FIXTURE) {
|
||||
val mainFile = mainTestDataPsiFile
|
||||
|
||||
runInEdtAndWait {
|
||||
ScriptConfigurationManager.updateScriptDependenciesSynchronously(mainFile)
|
||||
}
|
||||
|
||||
val ktsFileUnderTest = mainFile.virtualFile.toNioPath().toFile()
|
||||
val path = ktsFileUnderTest.path
|
||||
val ktsFileHighlighting = outputFileExtensions.mapNotNull<String, File> { ext ->
|
||||
val resolveSibling = ktsFileUnderTest.resolveSibling("$path$ext")
|
||||
resolveSibling.takeIf(File::exists)
|
||||
}.firstOrNull() ?: error("highlighting file does not exist for ${ktsFileUnderTest.path}")
|
||||
|
||||
val directives = parseDirectives(mainTestDataFile.content).also {
|
||||
it.put(CHECK_SYMBOL_NAMES, true.toString())
|
||||
}
|
||||
|
||||
runInEdtAndWait {
|
||||
IgnoreTests.runTestIfNotDisabledByFileDirective(
|
||||
mainFile.virtualFile.toNioPath(),
|
||||
if (useK2Plugin == true) IgnoreTests.DIRECTIVES.IGNORE_K2 else IgnoreTests.DIRECTIVES.IGNORE_K1
|
||||
) {
|
||||
checkHighlighting(
|
||||
mainFile,
|
||||
ktsFileHighlighting,
|
||||
directives,
|
||||
project,
|
||||
highlightWarnings = true,
|
||||
severityOption = SeverityRenderingOption.ALWAYS
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -115,8 +115,8 @@ class CodeMetaInfoTestCase(
|
||||
if ("!CHECK_HIGHLIGHTING" in file.text)
|
||||
return emptyList()
|
||||
|
||||
val highlightingInfos = CodeInsightTestFixtureImpl.instantiateAndRun(file, editor, intArrayOf(), false)
|
||||
.filterNot { it.severity < configuration.severityLevel }
|
||||
val infos = CodeInsightTestFixtureImpl.instantiateAndRun(file, editor, intArrayOf(), false)
|
||||
val highlightingInfos = infos.filterNot { it.severity < configuration.severityLevel }
|
||||
|
||||
if (configuration.checkNoError) {
|
||||
val errorHighlights = highlightingInfos.filter { it.severity >= HighlightSeverity.ERROR }
|
||||
|
||||
@@ -12,16 +12,18 @@ import org.jetbrains.kotlin.codeMetaInfo.model.CodeMetaInfo
|
||||
import org.jetbrains.kotlin.idea.codeMetaInfo.CodeMetaInfoTestCase
|
||||
import org.jetbrains.kotlin.idea.codeMetaInfo.models.HighlightingCodeMetaInfo
|
||||
import org.jetbrains.kotlin.idea.codeMetaInfo.renderConfigurations.HighlightingConfiguration
|
||||
import org.jetbrains.kotlin.idea.codeMetaInfo.renderConfigurations.HighlightingConfiguration.SeverityRenderingOption
|
||||
import org.jetbrains.kotlin.idea.test.Directives
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
const val CHECK_SYMBOL_NAMES = "CHECK_SYMBOL_NAMES"
|
||||
const val HIGHLIGHT_SEVERITY = "HIGHLIGHT_SEVERITY"
|
||||
|
||||
private const val ALLOW_ERRORS = "ALLOW_ERRORS"
|
||||
private const val HIGHLIGHT_WARNINGS = "HIGHLIGHT_WARNINGS"
|
||||
private const val HIGHLIGHTER_ATTRIBUTES_KEY = "HIGHLIGHTER_ATTRIBUTES_KEY"
|
||||
private const val CHECK_SYMBOL_NAMES = "CHECK_SYMBOL_NAMES"
|
||||
private const val DUMB_MODE = "DUMB_MODE"
|
||||
private const val HIGHLIGHT_SEVERITY = "HIGHLIGHT_SEVERITY"
|
||||
|
||||
|
||||
fun checkHighlighting(
|
||||
@@ -29,7 +31,8 @@ fun checkHighlighting(
|
||||
expectedHighlightingFile: File,
|
||||
globalDirectives: Directives,
|
||||
project: Project,
|
||||
highlightWarnings: Boolean? = false
|
||||
highlightWarnings: Boolean? = false,
|
||||
severityOption: SeverityRenderingOption = SeverityRenderingOption.ONLY_NON_INFO
|
||||
) {
|
||||
val highlightSeverity = globalDirectives.highlightSeverity()
|
||||
// compatibility mode
|
||||
@@ -37,7 +40,7 @@ fun checkHighlighting(
|
||||
|
||||
val highlightingRenderConfiguration = HighlightingConfiguration(
|
||||
descriptionRenderingOption = HighlightingConfiguration.DescriptionRenderingOption.IF_NOT_NULL,
|
||||
renderSeverityOption = HighlightingConfiguration.SeverityRenderingOption.ONLY_NON_INFO,
|
||||
renderSeverityOption = severityOption,
|
||||
renderHighlightingAttributesKey = HIGHLIGHTER_ATTRIBUTES_KEY in globalDirectives,
|
||||
severityLevel = highlightSeverity
|
||||
)
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
// FILE: build.gradle.kts
|
||||
plugins {
|
||||
`kotlin-dsl`
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":module1"))
|
||||
}
|
||||
|
||||
// FILE: settings.gradle.kts
|
||||
include("module1")
|
||||
|
||||
// FILE: build.gradle.kts.highlighting
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>plugins<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>`kotlin-dsl`<!>
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>repositories<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>mavenCentral<!>()
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>dependencies<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>implementation<!>(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>project<!>(":module1"))
|
||||
}
|
||||
|
||||
// FILE: build.gradle.kts.highlighting.k2
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; descr='Style 4'")!>plugins<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>`kotlin-dsl`<!>
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>repositories<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>mavenCentral<!>()
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>dependencies<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>implementation<!>(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>project<!>(":module1"))
|
||||
}
|
||||
|
||||
// FILE: settings.gradle.kts
|
||||
include("module1")
|
||||
|
||||
// FILE: module1/build.gradle.kts
|
||||
plugins {
|
||||
java
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
// FILE: build.gradle.kts
|
||||
plugins {
|
||||
`kotlin-dsl`
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":module1"))
|
||||
}
|
||||
|
||||
enum class JvmTestFramework {
|
||||
JUnit,
|
||||
JUnit5,
|
||||
TestNG;
|
||||
|
||||
fun lowercase() = name.lowercase()
|
||||
}
|
||||
val jvmTestFrameworks = JvmTestFramework.values().toList()
|
||||
|
||||
tasks.register("generateModuleInfo") {
|
||||
doLast {
|
||||
val modules = rootProject.subprojects
|
||||
File("")
|
||||
.writer() // jdk
|
||||
.buffered() // kotlin stdlib ext function
|
||||
jvmTestFrameworks.forEach { framework ->
|
||||
println(framework)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// FILE: settings.gradle.kts
|
||||
include("module1")
|
||||
|
||||
// FILE: build.gradle.kts.highlighting
|
||||
// IGNORE_K1
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>plugins<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>`kotlin-dsl`<!>
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>repositories<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>mavenCentral<!>()
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>dependencies<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>implementation<!>(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>project<!>(":module1"))
|
||||
}
|
||||
|
||||
// FILE: build.gradle.kts.highlighting.k2
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'"), HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'; descr='Style 4'")!>plugins<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>`kotlin-dsl`<!>
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>repositories<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>mavenCentral<!>()
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>dependencies<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>implementation<!>(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>project<!>(":module1"))
|
||||
}
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>enum<!> class <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>JvmTestFramework<!> {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>JUnit<!>,
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>JUnit5<!>,
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>TestNG<!>;
|
||||
|
||||
fun <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>lowercase<!>() = <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>name<!>.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>lowercase<!>()
|
||||
}
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>jvmTestFrameworks<!> = <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>JvmTestFramework<!>.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>values<!>().<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>toList<!>()
|
||||
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>tasks<!>.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>register<!>("generateModuleInfo") {
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>doLast<!> {
|
||||
val <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>modules<!> = <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>rootProject<!>.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>subprojects<!>
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>File<!>("")
|
||||
.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>writer<!>() // jdk
|
||||
.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>buffered<!>() // kotlin stdlib ext function
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>jvmTestFrameworks<!>.<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>forEach<!> { <!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>framework<!> ->
|
||||
<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>println<!>(<!HIGHLIGHTING("severity='SYMBOL_TYPE_SEVERITY'")!>framework<!>)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: settings.gradle.kts
|
||||
include("module1")
|
||||
|
||||
// FILE: module1/build.gradle.kts
|
||||
plugins {
|
||||
java
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import org.jetbrains.kotlin.idea.base.test.InTextDirectivesUtils
|
||||
|
||||
class Directives {
|
||||
|
||||
private val directives = mutableMapOf<String, MutableList<String>?>()
|
||||
private val directives: MutableMap<String, MutableList<String>?> = mutableMapOf<String, MutableList<String>?>()
|
||||
|
||||
operator fun contains(key: String): Boolean {
|
||||
return key in directives
|
||||
|
||||
Reference in New Issue
Block a user