summaryrefslogtreecommitdiff
path: root/jps/jps-builders/testSrc/org/jetbrains/jps/builders/rebuild/JpsRebuildTestCase.kt
diff options
context:
space:
mode:
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.kt86
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