diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/AbstractJsBlackBoxCodegenTestBase.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/AbstractJsBlackBoxCodegenTestBase.kt index bd25a240e09..ea8e851e676 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/AbstractJsBlackBoxCodegenTestBase.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/AbstractJsBlackBoxCodegenTestBase.kt @@ -104,7 +104,8 @@ abstract class AbstractJsBlackBoxCodegenTestBase + allTestFiles.find { it.name == path }?.originalFile?.absolutePath?.let { + return@replaceSources it + } + + tryToMapLibrarySourceFile(dependencies, path)?.let { + return@replaceSources it + } + + path + } + } + } + } + + /** + * Some heuristics to find the library source file that this [sourceMapPath] should point to. + * May not work in 100% of cases, but should be good enough for our tests. + */ + private fun tryToMapLibrarySourceFile(dependencies: Iterable, sourceMapPath: String): String? { + for (dependency in dependencies) { + val libraryFile = try { + File(testServices.jsLibraryProvider.getPathByDescriptor(dependency)) + } catch (e: NoSuchElementException) { + continue + } + + val sourceRoot: File = libraryFile // libraries/stdlib/{js-ir-minimal-for-test|js-ir}/build/classes/kotlin/js/main + .parentFile // libraries/stdlib/{js-ir-minimal-for-test|js-ir}/build/classes/kotlin/js/ + ?.parentFile // libraries/stdlib/{js-ir-minimal-for-test|js-ir}/build/classes/kotlin/ + ?.parentFile // libraries/stdlib/{js-ir-minimal-for-test|js-ir}/build/classes/ + ?.parentFile // libraries/stdlib/{js-ir-minimal-for-test|js-ir}/build/ + ?.parentFile // libraries/stdlib/{js-ir-minimal-for-test|js-ir}/ + ?: continue + + val searchPaths = listOf(sourceRoot, sourceRoot.resolve("build")) + + for (searchPath in searchPaths) { + val resolved = searchPath.resolve(sourceMapPath) + if (resolved.exists()) { + return resolved.absolutePath + } + } + } + return null + } +}