JS: support "LANGUAGE" directives in box tests

This commit is contained in:
Alexander Udalov
2017-12-28 16:50:04 +01:00
parent 8b3d439d5b
commit 02857dbfdb
@@ -23,6 +23,7 @@ import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import junit.framework.TestCase import junit.framework.TestCase
import org.jetbrains.kotlin.checkers.parseLanguageVersionSettings
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
@@ -46,7 +47,10 @@ import org.jetbrains.kotlin.js.dce.InputFile
import org.jetbrains.kotlin.js.dce.InputResource import org.jetbrains.kotlin.js.dce.InputResource
import org.jetbrains.kotlin.js.facade.* import org.jetbrains.kotlin.js.facade.*
import org.jetbrains.kotlin.js.parser.parse import org.jetbrains.kotlin.js.parser.parse
import org.jetbrains.kotlin.js.parser.sourcemaps.* import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapError
import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapLocationRemapper
import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapParser
import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapSuccess
import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver
import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder
import org.jetbrains.kotlin.js.test.utils.* import org.jetbrains.kotlin.js.test.utils.*
@@ -524,9 +528,8 @@ abstract class BasicBoxTest(
val configuration = environment.configuration.copy() val configuration = environment.configuration.copy()
configuration.put(CommonConfigurationKeys.DISABLE_INLINE, module.inliningDisabled) configuration.put(CommonConfigurationKeys.DISABLE_INLINE, module.inliningDisabled)
module.languageVersion?.let { languageVersion -> module.languageVersionSettings?.let { languageVersionSettings ->
configuration.languageVersionSettings = configuration.languageVersionSettings = languageVersionSettings
LanguageVersionSettingsImpl(languageVersion, LanguageVersionSettingsImpl.DEFAULT.apiVersion)
} }
configuration.put(JSConfigurationKeys.LIBRARIES, JsConfig.JS_STDLIB + JsConfig.JS_KOTLIN_TEST + dependencies) configuration.put(JSConfigurationKeys.LIBRARIES, JsConfig.JS_STDLIB + JsConfig.JS_KOTLIN_TEST + dependencies)
@@ -640,11 +643,10 @@ abstract class BasicBoxTest(
KotlinTestUtils.mkdirs(temporaryFile.parentFile) KotlinTestUtils.mkdirs(temporaryFile.parentFile)
temporaryFile.writeText(text, Charsets.UTF_8) temporaryFile.writeText(text, Charsets.UTF_8)
val version = InTextDirectivesUtils.findStringWithPrefixes(text, "// LANGUAGE_VERSION:") val old = currentModule.languageVersionSettings
if (version != null) { val new = parseLanguageVersionSettings(directives)
assert(currentModule.languageVersion == null) { "Should not specify LANGUAGE_VERSION twice" } assert(old == null || old == new) { "Should not specify language version settings twice:\n$old\n$new" }
currentModule.languageVersion = LanguageVersion.fromVersionString(version) currentModule.languageVersionSettings = new
}
SOURCE_MAP_SOURCE_EMBEDDING.find(text)?.let { match -> SOURCE_MAP_SOURCE_EMBEDDING.find(text)?.let { match ->
currentModule.sourceMapSourceEmbedding = SourceMapSourceEmbedding.valueOf(match.groupValues[1]) currentModule.sourceMapSourceEmbedding = SourceMapSourceEmbedding.valueOf(match.groupValues[1])
@@ -677,7 +679,7 @@ abstract class BasicBoxTest(
var moduleKind = ModuleKind.PLAIN var moduleKind = ModuleKind.PLAIN
var inliningDisabled = false var inliningDisabled = false
val files = mutableListOf<TestFile>() val files = mutableListOf<TestFile>()
var languageVersion: LanguageVersion? = null var languageVersionSettings: LanguageVersionSettings? = null
var sourceMapSourceEmbedding = SourceMapSourceEmbedding.NEVER var sourceMapSourceEmbedding = SourceMapSourceEmbedding.NEVER
val hasFilesToRecompile get() = files.any { it.recompile } val hasFilesToRecompile get() = files.any { it.recompile }