JS: add suffix '_test' to test module output files to avoid name conflicts (KT-16979)
Also stop setting AMD module ids explicitly.
This commit is contained in:
@@ -133,8 +133,8 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
|
|||||||
val list = arrayListOf<String>()
|
val list = arrayListOf<String>()
|
||||||
for (moduleName in moduleNames) {
|
for (moduleName in moduleNames) {
|
||||||
val outputDir = File("out/production/$moduleName")
|
val outputDir = File("out/production/$moduleName")
|
||||||
list.add(toSystemIndependentName(JpsJsModuleUtils.getOutputFile(outputDir, moduleName).path))
|
list.add(toSystemIndependentName(JpsJsModuleUtils.getOutputFile(outputDir, moduleName, false).path))
|
||||||
list.add(toSystemIndependentName(JpsJsModuleUtils.getOutputMetaFile(outputDir, moduleName).path))
|
list.add(toSystemIndependentName(JpsJsModuleUtils.getOutputMetaFile(outputDir, moduleName, false).path))
|
||||||
}
|
}
|
||||||
return list.toTypedArray()
|
return list.toTypedArray()
|
||||||
}
|
}
|
||||||
@@ -389,8 +389,7 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
|
|||||||
buildResult.assertSuccessful()
|
buildResult.assertSuccessful()
|
||||||
|
|
||||||
val warnings = buildResult.getMessages(BuildMessage.Kind.WARNING)
|
val warnings = buildResult.getMessages(BuildMessage.Kind.WARNING)
|
||||||
assertEquals("Warning about duplicate module definition: $warnings", 1, warnings.size)
|
assertEquals("Warning about duplicate module definition: $warnings", 0, warnings.size)
|
||||||
assertEquals("Module \"srcAndTests\" is defined in more than one file", warnings[0].messageText)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testKotlinJavaScriptProjectWithTwoSrcModuleDependency() {
|
fun testKotlinJavaScriptProjectWithTwoSrcModuleDependency() {
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ object JpsJsModuleUtils {
|
|||||||
fun addTarget(module: JpsModule, targetType: JavaModuleBuildTargetType) {
|
fun addTarget(module: JpsModule, targetType: JavaModuleBuildTargetType) {
|
||||||
val moduleBuildTarget = ModuleBuildTarget(module, targetType)
|
val moduleBuildTarget = ModuleBuildTarget(module, targetType)
|
||||||
val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(moduleBuildTarget)
|
val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(moduleBuildTarget)
|
||||||
val metaInfoFile = getOutputMetaFile(outputDir, module.name)
|
val metaInfoFile = getOutputMetaFile(outputDir, module.name, targetType.isTests)
|
||||||
if (metaInfoFile.exists()) {
|
if (metaInfoFile.exists()) {
|
||||||
result.add(metaInfoFile.absolutePath)
|
result.add(metaInfoFile.absolutePath)
|
||||||
}
|
}
|
||||||
@@ -71,8 +71,12 @@ object JpsJsModuleUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getOutputFile(outputDir: File, moduleName: String) = File(outputDir, moduleName + KotlinJavascriptMetadataUtils.JS_EXT)
|
fun getOutputFile(outputDir: File, moduleName: String, isTests: Boolean)
|
||||||
|
= File(outputDir, moduleName + suffix(isTests) + KotlinJavascriptMetadataUtils.JS_EXT)
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun getOutputMetaFile(outputDir: File, moduleName: String) = File(outputDir, moduleName + KotlinJavascriptMetadataUtils.META_JS_SUFFIX)
|
fun getOutputMetaFile(outputDir: File, moduleName: String, isTests: Boolean)
|
||||||
|
= File(outputDir, moduleName + suffix(isTests) + KotlinJavascriptMetadataUtils.META_JS_SUFFIX)
|
||||||
|
|
||||||
|
private fun suffix(isTests: Boolean) = if (isTests) "_test" else ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) {
|
if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) {
|
||||||
copyJsLibraryFilesIfNeeded(chunk, project)
|
copyJsLibraryFilesIfNeeded(chunk)
|
||||||
return OK
|
return OK
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -666,7 +666,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
|
|
||||||
val representativeModule = representativeTarget.module
|
val representativeModule = representativeTarget.module
|
||||||
val moduleName = representativeModule.name
|
val moduleName = representativeModule.name
|
||||||
val outputFile = JpsJsModuleUtils.getOutputFile(outputDir, moduleName)
|
val outputFile = JpsJsModuleUtils.getOutputFile(outputDir, moduleName, representativeTarget.isTests)
|
||||||
val libraries = JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget)
|
val libraries = JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget)
|
||||||
val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(representativeModule)
|
val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(representativeModule)
|
||||||
val k2JsArguments = JpsKotlinCompilerSettings.getK2JsCompilerArguments(representativeModule)
|
val k2JsArguments = JpsKotlinCompilerSettings.getK2JsCompilerArguments(representativeModule)
|
||||||
@@ -676,7 +676,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
return environment.outputItemsCollector
|
return environment.outputItemsCollector
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun copyJsLibraryFilesIfNeeded(chunk: ModuleChunk, project: JpsProject) {
|
private fun copyJsLibraryFilesIfNeeded(chunk: ModuleChunk) {
|
||||||
val representativeTarget = chunk.representativeTarget()
|
val representativeTarget = chunk.representativeTarget()
|
||||||
val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(representativeTarget)
|
val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(representativeTarget)
|
||||||
val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(representativeTarget.module)
|
val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(representativeTarget.module)
|
||||||
|
|||||||
@@ -233,6 +233,13 @@ abstract class BasicBoxTest(
|
|||||||
"$KOTLIN_TEST_INTERNAL.endModule(\"${StringUtil.escapeStringCharacters(config.moduleId)}\");"
|
"$KOTLIN_TEST_INTERNAL.endModule(\"${StringUtil.escapeStringCharacters(config.moduleId)}\");"
|
||||||
FileUtil.writeToFile(outputFile, wrappedContent)
|
FileUtil.writeToFile(outputFile, wrappedContent)
|
||||||
}
|
}
|
||||||
|
else if (config.moduleKind == ModuleKind.AMD || config.moduleKind == ModuleKind.UMD) {
|
||||||
|
val content = FileUtil.loadFile(outputFile, true)
|
||||||
|
val wrappedContent = "if (typeof $KOTLIN_TEST_INTERNAL !== \"undefined\") { " +
|
||||||
|
"$KOTLIN_TEST_INTERNAL.setModuleId(\"${StringUtil.escapeStringCharacters(config.moduleId)}\"); }\n" +
|
||||||
|
"$content\n"
|
||||||
|
FileUtil.writeToFile(outputFile, wrappedContent)
|
||||||
|
}
|
||||||
|
|
||||||
processJsProgram(translationResult.program, psiFiles)
|
processJsProgram(translationResult.program, psiFiles)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -28,7 +28,7 @@ object ModuleWrapperTranslation {
|
|||||||
program: JsProgram, kind: ModuleKind
|
program: JsProgram, kind: ModuleKind
|
||||||
): List<JsStatement> {
|
): List<JsStatement> {
|
||||||
return when (kind) {
|
return when (kind) {
|
||||||
ModuleKind.AMD -> wrapAmd(moduleId, function, importedModules, program)
|
ModuleKind.AMD -> wrapAmd(function, importedModules, program)
|
||||||
ModuleKind.COMMON_JS -> wrapCommonJs(function, importedModules, program)
|
ModuleKind.COMMON_JS -> wrapCommonJs(function, importedModules, program)
|
||||||
ModuleKind.UMD -> wrapUmd(moduleId, function, importedModules, program)
|
ModuleKind.UMD -> wrapUmd(moduleId, function, importedModules, program)
|
||||||
ModuleKind.PLAIN -> wrapPlain(moduleId, function, importedModules, program)
|
ModuleKind.PLAIN -> wrapPlain(moduleId, function, importedModules, program)
|
||||||
@@ -54,7 +54,7 @@ object ModuleWrapperTranslation {
|
|||||||
JsNameRef("amd", defineName.makeRef()))
|
JsNameRef("amd", defineName.makeRef()))
|
||||||
val commonJsTest = JsAstUtils.typeOfIs(exportsName.makeRef(), program.getStringLiteral("object"))
|
val commonJsTest = JsAstUtils.typeOfIs(exportsName.makeRef(), program.getStringLiteral("object"))
|
||||||
|
|
||||||
val amdBody = JsBlock(wrapAmd(moduleId, factoryName.makeRef(), importedModules, program))
|
val amdBody = JsBlock(wrapAmd(factoryName.makeRef(), importedModules, program))
|
||||||
val commonJsBody = JsBlock(wrapCommonJs(factoryName.makeRef(), importedModules, program))
|
val commonJsBody = JsBlock(wrapCommonJs(factoryName.makeRef(), importedModules, program))
|
||||||
val plainInvocation = makePlainInvocation(moduleId, factoryName.makeRef(), importedModules, program)
|
val plainInvocation = makePlainInvocation(moduleId, factoryName.makeRef(), importedModules, program)
|
||||||
|
|
||||||
@@ -78,13 +78,12 @@ object ModuleWrapperTranslation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun wrapAmd(
|
private fun wrapAmd(
|
||||||
moduleId: String, function: JsExpression,
|
function: JsExpression,
|
||||||
importedModules: List<StaticContext.ImportedModule>, program: JsProgram
|
importedModules: List<StaticContext.ImportedModule>, program: JsProgram
|
||||||
): List<JsStatement> {
|
): List<JsStatement> {
|
||||||
val scope = program.scope
|
val scope = program.scope
|
||||||
val defineName = scope.declareName("define")
|
val defineName = scope.declareName("define")
|
||||||
val invocationArgs = listOf(
|
val invocationArgs = listOf(
|
||||||
program.getStringLiteral(moduleId),
|
|
||||||
JsArrayLiteral(listOf(program.getStringLiteral("exports")) + importedModules.map { program.getStringLiteral(it.externalName) }),
|
JsArrayLiteral(listOf(program.getStringLiteral("exports")) + importedModules.map { program.getStringLiteral(it.externalName) }),
|
||||||
function
|
function
|
||||||
)
|
)
|
||||||
|
|||||||
+10
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
var emulatedModules = { kotlin: kotlin };
|
var emulatedModules = { kotlin: kotlin };
|
||||||
var module = { exports: {} };
|
var module = { exports: {} };
|
||||||
|
var currentModuleId;
|
||||||
|
|
||||||
|
|
||||||
// TODO don't expose by default when run test with AMD module kind
|
// TODO don't expose by default when run test with AMD module kind
|
||||||
function require(moduleId) {
|
function require(moduleId) {
|
||||||
@@ -14,11 +16,19 @@ var $kotlin_test_internal$ = {
|
|||||||
},
|
},
|
||||||
endModule : function(moduleId) {
|
endModule : function(moduleId) {
|
||||||
emulatedModules[moduleId] = module.exports;
|
emulatedModules[moduleId] = module.exports;
|
||||||
|
},
|
||||||
|
setModuleId: function(moduleId) {
|
||||||
|
currentModuleId = moduleId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO expose only when run test with AMD or UMD module kind
|
// TODO expose only when run test with AMD or UMD module kind
|
||||||
function define(moduleId, dependencies, body) {
|
function define(moduleId, dependencies, body) {
|
||||||
|
if (Array.isArray(moduleId)) {
|
||||||
|
body = dependencies;
|
||||||
|
dependencies = moduleId;
|
||||||
|
moduleId = currentModuleId;
|
||||||
|
}
|
||||||
var resolvedDependencies = [];
|
var resolvedDependencies = [];
|
||||||
emulatedModules[moduleId] = {};
|
emulatedModules[moduleId] = {};
|
||||||
for (var i = 0; i < dependencies.length; ++i) {
|
for (var i = 0; i < dependencies.length; ++i) {
|
||||||
|
|||||||
Reference in New Issue
Block a user