Files
openide/plugins/devkit/runtimeModuleRepository/jps/testSrc/build/RuntimeModuleRepositoryIncrementalBuildTest.kt
Nikolay Chashnikov 44f53cad05 [devkit] implement incremental compilation for runtime module repository (IDEA-335089)
The runtime module descriptors file should be updated if and only if something changes in the configuration of modules and libraries. Since up-to-date checks in org.jetbrains.jps.incremental.BuildOperations are based on files, we need to have at least one source file registered by the builder for that. Here .idea/modules.xml is used for that.

GitOrigin-RevId: ca5e56dfca75d63e4056017a4164dd3fbb20b116
2024-01-29 17:17:12 +00:00

99 lines
2.3 KiB
Kotlin

// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.devkit.runtimeModuleRepository.jps.build
import org.jetbrains.jps.builders.BuildResult
import org.jetbrains.jps.builders.CompileScopeTestBuilder
import org.jetbrains.jps.model.java.JavaSourceRootType
class RuntimeModuleRepositoryIncrementalBuildTest : RuntimeModuleRepositoryTestCase() {
fun `test up to date`() {
addModule("a", withTests = false)
buildRepository().assertSuccessful()
assertUpToDate()
}
fun `test add source root`() {
val a = addModule("a", withTests = false, withSources = false)
buildAndCheck {
descriptor("a", resourceDirName = null)
}
a.addSourceRoot(getUrl("a/src"), JavaSourceRootType.SOURCE)
buildAndCheck {
descriptor("a")
}
assertUpToDate()
}
fun `test add source file`() {
addModule("a", withTests = false)
buildAndCheck {
descriptor("a")
}
createFile("a/src/A.java", "class A {}")
assertUpToDate()
}
fun `test add remove dependency`() {
val a = addModule("a", withTests = false)
val b = addModule("b", withTests = false)
buildAndCheck {
descriptor("a")
descriptor("b")
}
b.dependenciesList.addModuleDependency(a)
buildAndCheck {
descriptor("a")
descriptor("b", "a")
}
assertUpToDate()
b.dependenciesList.clear()
buildAndCheck {
descriptor("a")
descriptor("b")
}
assertUpToDate()
}
fun `test add remove module`() {
addModule("a", withTests = false)
buildAndCheck {
descriptor("a")
}
val b = addModule("b", withTests = false)
buildAndCheck {
descriptor("a")
descriptor("b")
}
myProject.removeModule(b)
buildAndCheck {
descriptor("a")
}
assertUpToDate()
}
fun `test delete output`() {
addModule("a", withTests = false)
buildAndCheck {
descriptor("a")
}
deleteFile("out/${RuntimeModuleRepositoryBuildConstants.JAR_REPOSITORY_FILE_NAME}")
buildAndCheck {
descriptor("a")
}
}
private fun assertUpToDate() {
buildRepository().assertUpToDate()
}
private fun buildRepository(): BuildResult {
return doBuild(CompileScopeTestBuilder.make().targetTypes(RuntimeModuleRepositoryTarget))
}
}