[TEST] Extract language feature regex pattern to :test-infrastructure-utils

This commit is contained in:
Dmitriy Novozhilov
2020-12-15 13:25:23 +03:00
parent 4ed2651c1f
commit 019cb1485e
3 changed files with 14 additions and 8 deletions
@@ -0,0 +1,10 @@
/*
* Copyright 2010-2020 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.test.util
import java.util.regex.Pattern
val LANGUAGE_FEATURE_PATTERN: Pattern = Pattern.compile("""(\+|-|warn:)(\w+)\s*""")
@@ -10,14 +10,12 @@ import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
import org.jetbrains.kotlin.test.services.DefaultsDsl import org.jetbrains.kotlin.test.services.DefaultsDsl
import org.jetbrains.kotlin.test.util.LANGUAGE_FEATURE_PATTERN
import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.addToStdlib.runIf
import java.util.regex.Pattern
@DefaultsDsl @DefaultsDsl
class LanguageVersionSettingsBuilder { class LanguageVersionSettingsBuilder {
companion object { companion object {
private val languageFeaturePattern = Pattern.compile("""(\+|-|warn:)(\w+)\s*""")
fun fromExistingSettings(builder: LanguageVersionSettingsBuilder): LanguageVersionSettingsBuilder { fun fromExistingSettings(builder: LanguageVersionSettingsBuilder): LanguageVersionSettingsBuilder {
return LanguageVersionSettingsBuilder().apply { return LanguageVersionSettingsBuilder().apply {
languageVersion = builder.languageVersion languageVersion = builder.languageVersion
@@ -79,7 +77,7 @@ class LanguageVersionSettingsBuilder {
} }
private fun parseLanguageFeature(featureString: String) { private fun parseLanguageFeature(featureString: String) {
val matcher = languageFeaturePattern.matcher(featureString) val matcher = LANGUAGE_FEATURE_PATTERN.matcher(featureString)
if (!matcher.find()) { if (!matcher.find()) {
error( error(
"""Wrong syntax in the '// !${LanguageSettingsDirectives.LANGUAGE.name}: ...' directive: """Wrong syntax in the '// !${LanguageSettingsDirectives.LANGUAGE.name}: ...' directive:
@@ -9,9 +9,9 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.test.Directives import org.jetbrains.kotlin.test.Directives
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.util.LANGUAGE_FEATURE_PATTERN
import org.junit.Assert import org.junit.Assert
import java.io.File import java.io.File
import java.util.regex.Pattern
const val LANGUAGE_DIRECTIVE = "LANGUAGE" const val LANGUAGE_DIRECTIVE = "LANGUAGE"
const val API_VERSION_DIRECTIVE = "API_VERSION" const val API_VERSION_DIRECTIVE = "API_VERSION"
@@ -117,10 +117,8 @@ fun setupLanguageVersionSettingsForCompilerTests(originalFileText: String, envir
private fun <T : Any> analysisFlag(flag: AnalysisFlag<T>, value: @kotlin.internal.NoInfer T?): Pair<AnalysisFlag<T>, T>? = private fun <T : Any> analysisFlag(flag: AnalysisFlag<T>, value: @kotlin.internal.NoInfer T?): Pair<AnalysisFlag<T>, T>? =
value?.let(flag::to) value?.let(flag::to)
private val languagePattern = Pattern.compile("(\\+|\\-|warn:)(\\w+)\\s*")
private fun collectLanguageFeatureMap(directives: String): Map<LanguageFeature, LanguageFeature.State> { private fun collectLanguageFeatureMap(directives: String): Map<LanguageFeature, LanguageFeature.State> {
val matcher = languagePattern.matcher(directives) val matcher = LANGUAGE_FEATURE_PATTERN.matcher(directives)
if (!matcher.find()) { if (!matcher.find()) {
Assert.fail( Assert.fail(
"Wrong syntax in the '// !$LANGUAGE_DIRECTIVE: ...' directive:\n" + "Wrong syntax in the '// !$LANGUAGE_DIRECTIVE: ...' directive:\n" +