[IC TEST] Implement legacy js multi module gradle-like test infra
This commit is contained in:
+102
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* 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.incremental
|
||||
|
||||
import org.jetbrains.kotlin.build.report.ICReporter
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.incremental.multiproject.ModulesApiHistoryJs
|
||||
import org.jetbrains.kotlin.incremental.testingUtils.BuildLogFinder
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
abstract class AbstractIncrementalMultiModuleJsCompilerRunnerTest :
|
||||
AbstractIncrementalMultiModuleCompilerRunnerTest<K2JSCompilerArguments, ModulesApiHistoryJs>() {
|
||||
|
||||
override val buildLogFinder: BuildLogFinder
|
||||
get() = super.buildLogFinder.copy(
|
||||
isJsEnabled = true,
|
||||
isScopeExpansionEnabled = scopeExpansionMode != CompileScopeExpansionMode.NEVER
|
||||
)
|
||||
|
||||
override fun createCompilerArguments(destinationDir: File, testDir: File): K2JSCompilerArguments =
|
||||
K2JSCompilerArguments().apply {
|
||||
sourceMap = true
|
||||
metaInfo = true
|
||||
}
|
||||
|
||||
override fun makeForSingleModule(
|
||||
moduleCacheDir: File,
|
||||
sourceRoots: Iterable<File>,
|
||||
args: K2JSCompilerArguments,
|
||||
moduleBuildHistoryFile: File,
|
||||
messageCollector: MessageCollector,
|
||||
reporter: ICReporter,
|
||||
scopeExpansion: CompileScopeExpansionMode,
|
||||
modulesApiHistory: ModulesApiHistoryJs,
|
||||
providedChangedFiles: ChangedFiles?
|
||||
) {
|
||||
makeJsIncrementally(
|
||||
moduleCacheDir,
|
||||
sourceRoots,
|
||||
args,
|
||||
moduleBuildHistoryFile,
|
||||
messageCollector,
|
||||
reporter,
|
||||
scopeExpansionMode,
|
||||
modulesApiHistory,
|
||||
providedChangedFiles
|
||||
)
|
||||
}
|
||||
|
||||
override fun K2JSCompilerArguments.updateForSingleModule(moduleDependencies: List<String>, outFile: File) {
|
||||
val dependencies = moduleDependencies.joinToString(File.pathSeparator) {
|
||||
File(repository, it.asArtifactFileName()).absolutePath
|
||||
}
|
||||
|
||||
libraries = dependencies
|
||||
outputFile = outFile.path
|
||||
}
|
||||
|
||||
override fun transformToDependency(moduleName: String, rawArtifact: File): File {
|
||||
val rawDir = rawArtifact.parentFile
|
||||
val artifactFile = File(repository, moduleName.asArtifactFileName())
|
||||
val zipOut = ZipOutputStream(FileOutputStream(artifactFile))
|
||||
|
||||
fun walkFiles(dir: File) {
|
||||
dir.listFiles()?.let { files ->
|
||||
files.forEach { file ->
|
||||
if (file.isDirectory) walkFiles(file)
|
||||
else {
|
||||
val relativePath = file.relativeTo(rawDir).path
|
||||
val zipEntry = ZipEntry(relativePath)
|
||||
zipEntry.time = 0
|
||||
zipOut.putNextEntry(zipEntry)
|
||||
file.readBytes().let { bytes ->
|
||||
zipOut.write(bytes, 0, bytes.size)
|
||||
}
|
||||
zipOut.closeEntry()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
walkFiles(rawDir)
|
||||
|
||||
zipOut.close()
|
||||
|
||||
return artifactFile
|
||||
}
|
||||
|
||||
override val modulesApiHistory: ModulesApiHistoryJs by lazy { ModulesApiHistoryJs(incrementalModuleInfo) }
|
||||
|
||||
override fun String.asOutputFileName(): String = "$this.js"
|
||||
override fun String.asArtifactFileName(): String = "$this.jar"
|
||||
|
||||
override val scopeExpansionMode = CompileScopeExpansionMode.NEVER
|
||||
}
|
||||
Reference in New Issue
Block a user