From 1473565d3346db4194e032c3c030e70bd70ee391 Mon Sep 17 00:00:00 2001 From: Pavel Punegov Date: Tue, 12 Feb 2019 18:43:47 +0300 Subject: [PATCH] Check test execution output with custom function --- backend.native/tests/build.gradle | 3 +-- .../src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 2a0c7b1fa06..4bb03aefa3a 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -2209,8 +2209,7 @@ task spread_operator_0(type: RunKonanTest) { } task main_exception(type: RunKonanTest) { - // TODO: cannot currently check the output because the exact stacktrace strings are unpredictable. - // goldValue = "Uncaught exception from Kotlin's main: Throwable\n" + outputChecker = { s -> s.contains("kotlin.Error: Hello!") } expectedExitStatus = 1 source = "runtime/basic/main_exception.kt" } diff --git a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy index 8c13dda7629..b29369f38e7 100644 --- a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy +++ b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy @@ -23,6 +23,7 @@ import org.gradle.process.ExecResult import javax.inject.Inject import java.nio.file.Paths +import java.util.function.Function import java.util.regex.Pattern abstract class KonanTest extends JavaExec { @@ -39,6 +40,7 @@ abstract class KonanTest extends JavaExec { def enableKonanAssertions = true String outputDirectory = null String goldValue = null + Function outputChecker = null String testData = null int expectedExitStatus = 0 List arguments = null @@ -306,7 +308,9 @@ abstract class KonanTest extends JavaExec { } } - def goldValueMismatch = goldValue != null && goldValue != result.replace(System.lineSeparator(), "\n") + result = result.replace(System.lineSeparator(), "\n") + def goldValueMismatch = (outputChecker != null && !outputChecker.apply(result)) || + (goldValue != null && goldValue != result) if (goldValueMismatch) { def message = "Expected output: $goldValue, actual output: $result" if (this.expectedFail) {