[BTA tests] Allow passing strategy config once to Project instance
^KT-61860 In Progress
This commit is contained in:
committed by
Space Team
parent
f634f9dacf
commit
99e13318dc
+1
@@ -43,6 +43,7 @@ abstract class AbstractModule(
|
|||||||
final override val moduleName: String,
|
final override val moduleName: String,
|
||||||
val moduleDirectory: Path,
|
val moduleDirectory: Path,
|
||||||
val dependencies: List<Dependency>,
|
val dependencies: List<Dependency>,
|
||||||
|
override val defaultStrategyConfig: CompilerExecutionStrategyConfiguration,
|
||||||
final override val additionalCompilationArguments: List<String> = emptyList(),
|
final override val additionalCompilationArguments: List<String> = emptyList(),
|
||||||
) : Module {
|
) : Module {
|
||||||
override val sourcesDirectory: Path
|
override val sourcesDirectory: Path
|
||||||
|
|||||||
+3
-1
@@ -23,12 +23,14 @@ class JvmModule(
|
|||||||
moduleName: String,
|
moduleName: String,
|
||||||
moduleDirectory: Path,
|
moduleDirectory: Path,
|
||||||
dependencies: List<Dependency>,
|
dependencies: List<Dependency>,
|
||||||
|
defaultStrategyConfig: CompilerExecutionStrategyConfiguration,
|
||||||
additionalCompilationArguments: List<String> = emptyList(),
|
additionalCompilationArguments: List<String> = emptyList(),
|
||||||
) : AbstractModule(
|
) : AbstractModule(
|
||||||
project,
|
project,
|
||||||
moduleName,
|
moduleName,
|
||||||
moduleDirectory,
|
moduleDirectory,
|
||||||
dependencies,
|
dependencies,
|
||||||
|
defaultStrategyConfig,
|
||||||
additionalCompilationArguments,
|
additionalCompilationArguments,
|
||||||
) {
|
) {
|
||||||
override fun compileImpl(
|
override fun compileImpl(
|
||||||
@@ -75,8 +77,8 @@ class JvmModule(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun compileIncrementally(
|
override fun compileIncrementally(
|
||||||
strategyConfig: CompilerExecutionStrategyConfiguration,
|
|
||||||
sourcesChanges: SourcesChanges,
|
sourcesChanges: SourcesChanges,
|
||||||
|
strategyConfig: CompilerExecutionStrategyConfiguration,
|
||||||
forceOutput: LogLevel?,
|
forceOutput: LogLevel?,
|
||||||
forceNonIncrementalCompilation: Boolean,
|
forceNonIncrementalCompilation: Boolean,
|
||||||
compilationConfigAction: (JvmCompilationConfiguration) -> Unit,
|
compilationConfigAction: (JvmCompilationConfiguration) -> Unit,
|
||||||
|
|||||||
+4
-2
@@ -46,16 +46,18 @@ interface Module : Dependency {
|
|||||||
*/
|
*/
|
||||||
val icCachesDir: Path
|
val icCachesDir: Path
|
||||||
|
|
||||||
|
val defaultStrategyConfig: CompilerExecutionStrategyConfiguration
|
||||||
|
|
||||||
fun compile(
|
fun compile(
|
||||||
strategyConfig: CompilerExecutionStrategyConfiguration,
|
strategyConfig: CompilerExecutionStrategyConfiguration = defaultStrategyConfig,
|
||||||
forceOutput: LogLevel? = null,
|
forceOutput: LogLevel? = null,
|
||||||
compilationConfigAction: (JvmCompilationConfiguration) -> Unit = {},
|
compilationConfigAction: (JvmCompilationConfiguration) -> Unit = {},
|
||||||
assertions: context(Module) CompilationOutcome.() -> Unit = {},
|
assertions: context(Module) CompilationOutcome.() -> Unit = {},
|
||||||
): CompilationResult
|
): CompilationResult
|
||||||
|
|
||||||
fun compileIncrementally(
|
fun compileIncrementally(
|
||||||
strategyConfig: CompilerExecutionStrategyConfiguration,
|
|
||||||
sourcesChanges: SourcesChanges,
|
sourcesChanges: SourcesChanges,
|
||||||
|
strategyConfig: CompilerExecutionStrategyConfiguration = defaultStrategyConfig,
|
||||||
forceOutput: LogLevel? = null,
|
forceOutput: LogLevel? = null,
|
||||||
forceNonIncrementalCompilation: Boolean = false,
|
forceNonIncrementalCompilation: Boolean = false,
|
||||||
compilationConfigAction: (JvmCompilationConfiguration) -> Unit = {},
|
compilationConfigAction: (JvmCompilationConfiguration) -> Unit = {},
|
||||||
|
|||||||
+5
-3
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.buildtools.api.tests.compilation.model
|
package org.jetbrains.kotlin.buildtools.api.tests.compilation.model
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.buildtools.api.CompilerExecutionStrategyConfiguration
|
||||||
import org.jetbrains.kotlin.buildtools.api.ProjectId
|
import org.jetbrains.kotlin.buildtools.api.ProjectId
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
@@ -14,6 +15,7 @@ import kotlin.io.path.createDirectories
|
|||||||
import kotlin.io.path.isDirectory
|
import kotlin.io.path.isDirectory
|
||||||
|
|
||||||
class Project(
|
class Project(
|
||||||
|
val defaultStrategyConfig: CompilerExecutionStrategyConfiguration,
|
||||||
val projectDirectory: Path,
|
val projectDirectory: Path,
|
||||||
) {
|
) {
|
||||||
val projectId = ProjectId.ProjectUUID(UUID.randomUUID())
|
val projectId = ProjectId.ProjectUUID(UUID.randomUUID())
|
||||||
@@ -24,7 +26,7 @@ class Project(
|
|||||||
additionalCompilationArguments: List<String> = emptyList(),
|
additionalCompilationArguments: List<String> = emptyList(),
|
||||||
): Module {
|
): Module {
|
||||||
val moduleDirectory = projectDirectory.resolve(moduleName)
|
val moduleDirectory = projectDirectory.resolve(moduleName)
|
||||||
val module = JvmModule(this, moduleName, moduleDirectory, dependencies, additionalCompilationArguments)
|
val module = JvmModule(this, moduleName, moduleDirectory, dependencies, defaultStrategyConfig, additionalCompilationArguments)
|
||||||
module.sourcesDirectory.createDirectories()
|
module.sourcesDirectory.createDirectories()
|
||||||
val templatePath = Paths.get("src/main/resources/modules/$moduleName")
|
val templatePath = Paths.get("src/main/resources/modules/$moduleName")
|
||||||
assert(templatePath.isDirectory()) {
|
assert(templatePath.isDirectory()) {
|
||||||
@@ -39,8 +41,8 @@ class Project(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun BaseCompilationTest.project(action: Project.() -> Unit) {
|
fun BaseCompilationTest.project(strategyConfig: CompilerExecutionStrategyConfiguration, action: Project.() -> Unit) {
|
||||||
Project(workingDirectory).apply {
|
Project(strategyConfig, workingDirectory).apply {
|
||||||
action()
|
action()
|
||||||
endCompilationRound()
|
endCompilationRound()
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-4
@@ -66,8 +66,8 @@ private class ScenarioModuleImpl(
|
|||||||
assertions: context(Module) CompilationOutcome.() -> Unit,
|
assertions: context(Module) CompilationOutcome.() -> Unit,
|
||||||
) {
|
) {
|
||||||
module.compileIncrementally(
|
module.compileIncrementally(
|
||||||
strategyConfig,
|
|
||||||
sourcesChanges,
|
sourcesChanges,
|
||||||
|
strategyConfig,
|
||||||
forceOutput,
|
forceOutput,
|
||||||
compilationConfigAction = { compilationOptionsModifier?.invoke(it) },
|
compilationConfigAction = { compilationOptionsModifier?.invoke(it) },
|
||||||
incrementalCompilationConfigAction = { incrementalCompilationOptionsModifier?.invoke(it) },
|
incrementalCompilationConfigAction = { incrementalCompilationOptionsModifier?.invoke(it) },
|
||||||
@@ -91,14 +91,15 @@ private class ScenarioDsl(
|
|||||||
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
||||||
): ScenarioModule {
|
): ScenarioModule {
|
||||||
val transformedDependencies = dependencies.map { (it as ScenarioModuleImpl).module }
|
val transformedDependencies = dependencies.map { (it as ScenarioModuleImpl).module }
|
||||||
val module = project.module(moduleName, transformedDependencies, additionalCompilationArguments)
|
val module =
|
||||||
|
project.module(moduleName, transformedDependencies, additionalCompilationArguments)
|
||||||
return GlobalCompiledProjectsCache.getProjectFromCache(module, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
return GlobalCompiledProjectsCache.getProjectFromCache(module, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
||||||
?: GlobalCompiledProjectsCache.putProjectIntoCache(module, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
?: GlobalCompiledProjectsCache.putProjectIntoCache(module, strategyConfig, compilationOptionsModifier, incrementalCompilationOptionsModifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun BaseCompilationTest.scenario(strategyConfig: CompilerExecutionStrategyConfiguration, action: Scenario.() -> Unit) {
|
fun BaseCompilationTest.scenario(strategyConfig: CompilerExecutionStrategyConfiguration, action: Scenario.() -> Unit) {
|
||||||
action(ScenarioDsl(Project(workingDirectory), strategyConfig))
|
action(ScenarioDsl(Project(strategyConfig, workingDirectory), strategyConfig))
|
||||||
}
|
}
|
||||||
|
|
||||||
private data class GlobalCompiledProjectsCacheKey(
|
private data class GlobalCompiledProjectsCacheKey(
|
||||||
@@ -135,8 +136,8 @@ private object GlobalCompiledProjectsCache {
|
|||||||
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
incrementalCompilationOptionsModifier: ((IncrementalJvmCompilationConfiguration<*>) -> Unit)?,
|
||||||
): ScenarioModuleImpl {
|
): ScenarioModuleImpl {
|
||||||
module.compileIncrementally(
|
module.compileIncrementally(
|
||||||
strategyConfig,
|
|
||||||
SourcesChanges.Unknown,
|
SourcesChanges.Unknown,
|
||||||
|
strategyConfig,
|
||||||
compilationConfigAction = { compilationOptionsModifier?.invoke(it) },
|
compilationConfigAction = { compilationOptionsModifier?.invoke(it) },
|
||||||
incrementalCompilationConfigAction = { incrementalCompilationOptionsModifier?.invoke(it) }
|
incrementalCompilationConfigAction = { incrementalCompilationOptionsModifier?.invoke(it) }
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-3
@@ -20,14 +20,14 @@ class ExampleCompatibilityCompilationTest : BaseCompilationTest() {
|
|||||||
@DisplayName("Sample compatibility compilation test that is run as part of each test suit")
|
@DisplayName("Sample compatibility compilation test that is run as part of each test suit")
|
||||||
@TestMetadata("jvm-module-1")
|
@TestMetadata("jvm-module-1")
|
||||||
fun testCompatibilityCompilation(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
fun testCompatibilityCompilation(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
||||||
project {
|
project(strategyConfig) {
|
||||||
val module1 = module("jvm-module-1")
|
val module1 = module("jvm-module-1")
|
||||||
val module2 = module("jvm-module-2", listOf(module1))
|
val module2 = module("jvm-module-2", listOf(module1))
|
||||||
|
|
||||||
module1.compile(strategyConfig) {
|
module1.compile {
|
||||||
assertOutputs("FooKt.class", "Bar.class", "BazKt.class")
|
assertOutputs("FooKt.class", "Bar.class", "BazKt.class")
|
||||||
}
|
}
|
||||||
module2.compile(strategyConfig) {
|
module2.compile {
|
||||||
assertOutputs("AKt.class", "BKt.class")
|
assertOutputs("AKt.class", "BKt.class")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-8
@@ -23,16 +23,15 @@ class ExampleIncrementalCompilationTest : BaseCompilationTest() {
|
|||||||
@DefaultStrategyAgnosticCompilationTest
|
@DefaultStrategyAgnosticCompilationTest
|
||||||
@TestMetadata("jvm-module-1")
|
@TestMetadata("jvm-module-1")
|
||||||
fun testSingleModule(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
fun testSingleModule(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
||||||
project {
|
project(strategyConfig) {
|
||||||
val module1 = module("jvm-module-1")
|
val module1 = module("jvm-module-1")
|
||||||
|
|
||||||
module1.compileIncrementally(strategyConfig, SourcesChanges.Unknown)
|
module1.compileIncrementally(SourcesChanges.Unknown)
|
||||||
|
|
||||||
val fooKt = module1.sourcesDirectory.resolve("foo.kt")
|
val fooKt = module1.sourcesDirectory.resolve("foo.kt")
|
||||||
fooKt.writeText(fooKt.readText().replace("foo()", "foo(i: Int = 1)"))
|
fooKt.writeText(fooKt.readText().replace("foo()", "foo(i: Int = 1)"))
|
||||||
|
|
||||||
module1.compileIncrementally(
|
module1.compileIncrementally(
|
||||||
strategyConfig,
|
|
||||||
SourcesChanges.Known(modifiedFiles = listOf(fooKt.toFile()), removedFiles = emptyList()),
|
SourcesChanges.Known(modifiedFiles = listOf(fooKt.toFile()), removedFiles = emptyList()),
|
||||||
) {
|
) {
|
||||||
assertCompiledSources("foo.kt", "bar.kt")
|
assertCompiledSources("foo.kt", "bar.kt")
|
||||||
@@ -45,18 +44,17 @@ class ExampleIncrementalCompilationTest : BaseCompilationTest() {
|
|||||||
@DefaultStrategyAgnosticCompilationTest
|
@DefaultStrategyAgnosticCompilationTest
|
||||||
@TestMetadata("jvm-module-1")
|
@TestMetadata("jvm-module-1")
|
||||||
fun testTwoModules(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
fun testTwoModules(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
||||||
project {
|
project(strategyConfig) {
|
||||||
val module1 = module("jvm-module-1")
|
val module1 = module("jvm-module-1")
|
||||||
val module2 = module("jvm-module-2", listOf(module1))
|
val module2 = module("jvm-module-2", listOf(module1))
|
||||||
|
|
||||||
module1.compileIncrementally(strategyConfig, SourcesChanges.Unknown)
|
module1.compileIncrementally(SourcesChanges.Unknown)
|
||||||
module2.compileIncrementally(strategyConfig, SourcesChanges.Unknown)
|
module2.compileIncrementally(SourcesChanges.Unknown)
|
||||||
|
|
||||||
val barKt = module1.sourcesDirectory.resolve("bar.kt")
|
val barKt = module1.sourcesDirectory.resolve("bar.kt")
|
||||||
barKt.writeText(barKt.readText().replace("bar()", "bar(i: Int = 1)"))
|
barKt.writeText(barKt.readText().replace("bar()", "bar(i: Int = 1)"))
|
||||||
|
|
||||||
module1.compileIncrementally(
|
module1.compileIncrementally(
|
||||||
strategyConfig,
|
|
||||||
SourcesChanges.Known(modifiedFiles = listOf(barKt.toFile()), removedFiles = emptyList()),
|
SourcesChanges.Known(modifiedFiles = listOf(barKt.toFile()), removedFiles = emptyList()),
|
||||||
incrementalCompilationConfigAction = {
|
incrementalCompilationConfigAction = {
|
||||||
it.keepIncrementalCompilationCachesInMemory(false)
|
it.keepIncrementalCompilationCachesInMemory(false)
|
||||||
@@ -64,7 +62,6 @@ class ExampleIncrementalCompilationTest : BaseCompilationTest() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
module2.compileIncrementally(
|
module2.compileIncrementally(
|
||||||
strategyConfig,
|
|
||||||
SourcesChanges.Known(modifiedFiles = emptyList(), removedFiles = emptyList())
|
SourcesChanges.Known(modifiedFiles = emptyList(), removedFiles = emptyList())
|
||||||
) {
|
) {
|
||||||
assertCompiledSources("b.kt")
|
assertCompiledSources("b.kt")
|
||||||
|
|||||||
+5
-5
@@ -19,14 +19,14 @@ class ExampleNonIncrementalCompilationTest : BaseCompilationTest() {
|
|||||||
@DisplayName("Sample non-incremental compilation test with two modules")
|
@DisplayName("Sample non-incremental compilation test with two modules")
|
||||||
@DefaultStrategyAgnosticCompilationTest
|
@DefaultStrategyAgnosticCompilationTest
|
||||||
fun myTest(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
fun myTest(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
||||||
project {
|
project(strategyConfig) {
|
||||||
val module1 = module("jvm-module-1")
|
val module1 = module("jvm-module-1")
|
||||||
val module2 = module("jvm-module-2", listOf(module1))
|
val module2 = module("jvm-module-2", listOf(module1))
|
||||||
|
|
||||||
module1.compile(strategyConfig) {
|
module1.compile {
|
||||||
assertOutputs("FooKt.class", "Bar.class", "BazKt.class")
|
assertOutputs("FooKt.class", "Bar.class", "BazKt.class")
|
||||||
}
|
}
|
||||||
module2.compile(strategyConfig) {
|
module2.compile {
|
||||||
assertOutputs("AKt.class", "BKt.class")
|
assertOutputs("AKt.class", "BKt.class")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,12 +35,12 @@ class ExampleNonIncrementalCompilationTest : BaseCompilationTest() {
|
|||||||
@DisplayName("Sample non-incremental compilation test with a single module and a compilation error")
|
@DisplayName("Sample non-incremental compilation test with a single module and a compilation error")
|
||||||
@DefaultStrategyAgnosticCompilationTest
|
@DefaultStrategyAgnosticCompilationTest
|
||||||
fun failedCompilationTest(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
fun failedCompilationTest(strategyConfig: CompilerExecutionStrategyConfiguration) {
|
||||||
project {
|
project(strategyConfig) {
|
||||||
val module1 = module("jvm-module-1")
|
val module1 = module("jvm-module-1")
|
||||||
|
|
||||||
module1.sourcesDirectory.resolve("bar.kt").writeText("aaaa")
|
module1.sourcesDirectory.resolve("bar.kt").writeText("aaaa")
|
||||||
|
|
||||||
module1.compile(strategyConfig) {
|
module1.compile {
|
||||||
expectFail()
|
expectFail()
|
||||||
assertLogContainsPatterns(LogLevel.ERROR, ".*bar\\.kt:1:1 Syntax error: Expecting a top level declaration.*".toRegex())
|
assertLogContainsPatterns(LogLevel.ERROR, ".*bar\\.kt:1:1 Syntax error: Expecting a top level declaration.*".toRegex())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user