Provide a way to force stdout output in Gradle tests

This commit is contained in:
Alexey Tsvetkov
2016-10-14 16:26:02 +03:00
parent 229e63f5c5
commit d79679e647
2 changed files with 22 additions and 8 deletions
@@ -73,7 +73,8 @@ abstract class BaseGradleIT {
val daemonOptionSupported: Boolean = true,
val incremental: Boolean? = null,
val androidHome: File? = null,
val androidGradlePluginVersion: String? = null)
val androidGradlePluginVersion: String? = null,
val forceOutputToStdout: Boolean = false)
open inner class Project(
val projectName: String,
@@ -141,12 +142,15 @@ abstract class BaseGradleIT {
setupWorkingDir()
}
val result = runProcess(cmd, projectDir, env)
val result = runProcess(cmd, projectDir, env, options)
try {
CompiledProject(this, result.output, result.exitCode).check()
}
catch (t: Throwable) {
System.out.println(result.output)
// to prevent duplication of output
if (!options.forceOutputToStdout) {
System.out.println(result.output)
}
throw t
}
}
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.gradle.util
import org.jetbrains.kotlin.gradle.BaseGradleIT
import java.io.File
import java.io.StringWriter
class ProcessRunResult(
private val cmd: List<String>,
@@ -20,7 +20,12 @@ Executing process was ${if (isSuccessful) "successful" else "unsuccessful"}
"""
}
fun runProcess(cmd: List<String>, workingDir: File, environmentVariables: Map<String, String> = mapOf()): ProcessRunResult {
fun runProcess(
cmd: List<String>,
workingDir: File,
environmentVariables: Map<String, String> = mapOf(),
options: BaseGradleIT.BuildOptions? = null
): ProcessRunResult {
val builder = ProcessBuilder(cmd)
builder.environment().putAll(environmentVariables)
builder.directory(workingDir)
@@ -29,11 +34,16 @@ fun runProcess(cmd: List<String>, workingDir: File, environmentVariables: Map<St
val process = builder.start()
// important to read inputStream, otherwise the process may hang on some systems
val sw = StringWriter()
process.inputStream!!.bufferedReader().copyTo(sw)
val sb = StringBuilder()
process.inputStream!!.bufferedReader().forEachLine {
if (options?.forceOutputToStdout ?: false) {
System.out.println(it)
}
sb.appendln(it)
}
val exitCode = process.waitFor()
return ProcessRunResult(cmd, workingDir, exitCode, sw.toString())
return ProcessRunResult(cmd, workingDir, exitCode, sb.toString())
}
fun createGradleCommand(tailParameters: List<String>): List<String> {