diff options
Diffstat (limited to 'jps/jps-builders/testSrc/org/jetbrains/jps/builders/rebuild/JpsRebuildTestCase.kt')
-rw-r--r-- | jps/jps-builders/testSrc/org/jetbrains/jps/builders/rebuild/JpsRebuildTestCase.kt | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/rebuild/JpsRebuildTestCase.kt b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/rebuild/JpsRebuildTestCase.kt new file mode 100644 index 000000000000..dae4cb005e1d --- /dev/null +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/rebuild/JpsRebuildTestCase.kt @@ -0,0 +1,86 @@ +package org.jetbrains.jps.builders.rebuild; + +import com.intellij.openapi.application.ex.PathManagerEx; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.util.io.TestFileSystemBuilder; +import org.jetbrains.jps.builders.JpsBuildTestCase; +import org.jetbrains.jps.model.java.JpsJavaExtensionService; +import org.jetbrains.jps.util.JpsPathUtil; + +import java.io.File; +import java.util.LinkedHashMap; +import kotlin.properties.Delegates +import com.intellij.util.io.TestFileSystemItem + +/** + * @author nik + */ +public abstract class JpsRebuildTestCase: JpsBuildTestCase() { + protected val myOutputDirectory: File by Delegates.lazy { + FileUtil.createTempDirectory("jps-build-output", "") + } + + override fun setUp() { + super.setUp() + addJdk("1.6"); + } + + fun doTest(projectPath: String, expectedOutput: TestFileSystemItem) { + doTest(projectPath, LinkedHashMap<String, String>(), expectedOutput); + } + + fun doTest(projectPath: String, pathVariables: Map<String, String>, expectedOutput: TestFileSystemItem) { + loadAndRebuild(projectPath, pathVariables); + assertOutput(myOutputDirectory.getAbsolutePath(), expectedOutput); + } + + fun assertOutput(targetFolder: String, expectedOutput: TestFileSystemItem) { + expectedOutput.assertDirectoryEqual(File(FileUtil.toSystemDependentName(targetFolder))); + } + + fun loadAndRebuild(projectPath: String, pathVariables: Map<String, String>) { + loadProject(projectPath, pathVariables); + rebuild(); + } + + fun rebuild() { + JpsJavaExtensionService.getInstance()!!.getOrCreateProjectExtension(myProject) + .setOutputUrl(JpsPathUtil.pathToUrl(FileUtil.toSystemIndependentName(myOutputDirectory.getAbsolutePath()))); + rebuildAll(); + } + + override fun getAdditionalPathVariables(): MutableMap<String, String> = + hashMapOf("ARTIFACTS_OUT" to FileUtil.toSystemIndependentName(myOutputDirectory.getAbsolutePath()) + "/artifacts") + + protected override fun getTestDataRootPath(): String { + return PathManagerEx.findFileUnderCommunityHome("jps/jps-builders/testData/output")!!.getAbsolutePath(); + } +} + +fun fs(init: TestFileSystemBuilderBuilder.() -> Unit): TestFileSystemItem { + val builder = TestFileSystemBuilder.fs() + TestFileSystemBuilderBuilder(builder).init() + return builder.build() +} + +class TestFileSystemBuilderBuilder(private val current: TestFileSystemBuilder) { + fun file(name: String) { + current.file(name) + } + + fun file(name: String, content: String) { + current.file(name, content) + } + + fun dir(name: String, init: TestFileSystemBuilderBuilder.() -> Unit) { + val dir = current.dir(name) + TestFileSystemBuilderBuilder(dir).init() + dir.end() + } + + fun archive(name: String, init: TestFileSystemBuilderBuilder.() -> Unit) { + val dir = current.archive(name) + TestFileSystemBuilderBuilder(dir).init() + dir.end() + } +}
\ No newline at end of file |