From 2365df60bbbb845bff4a956360831d005e2d7179 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Mon, 18 Sep 2017 16:14:20 +0300 Subject: [PATCH] unit-tests: Return -1 as an exit code if tests failed --- .../src/main/kotlin/konan/test/Launcher.kt | 30 ++++++++++++++++-- .../src/main/kotlin/konan/test/TestRunner.kt | 31 +++++-------------- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/runtime/src/main/kotlin/konan/test/Launcher.kt b/runtime/src/main/kotlin/konan/test/Launcher.kt index dd246facc9f..256af47bc80 100644 --- a/runtime/src/main/kotlin/konan/test/Launcher.kt +++ b/runtime/src/main/kotlin/konan/test/Launcher.kt @@ -1,5 +1,31 @@ package konan.test -fun main(args:Array) { - TestRunner.run() +import kotlin.system.exitProcess + +class SimpleTestListener: TestListener { + + var hasFails = false + private set + + override fun startTesting(runner: TestRunner) = println("Starting testing") + override fun endTesting(runner: TestRunner) = println("Testing finished") + + override fun startSuite(suite: TestSuite) = println("Starting test suite: $suite") + override fun endSuite(suite: TestSuite) = println("Test suite finished: $suite") + override fun ignoreSuite(suite: TestSuite) = println("Test suite ignored: $suite") + + override fun start(testCase: TestCase) = println("Starting test case: $testCase") + override fun pass(testCase: TestCase) = println("Passed: $testCase") + override fun fail(testCase: TestCase, e: Throwable) { + println("Failed: $testCase. Exception:") + e.printStackTrace() + hasFails = true + } + override fun ignore(testCase: TestCase) = println("Ignore: $testCase") +} + +fun main(args:Array) { + val listener = SimpleTestListener() + TestRunner.run(listener) + exitProcess( if (listener.hasFails) -1 else 0 ) } diff --git a/runtime/src/main/kotlin/konan/test/TestRunner.kt b/runtime/src/main/kotlin/konan/test/TestRunner.kt index 6f938d48298..e480d5311cb 100644 --- a/runtime/src/main/kotlin/konan/test/TestRunner.kt +++ b/runtime/src/main/kotlin/konan/test/TestRunner.kt @@ -2,23 +2,6 @@ package konan.test object TestRunner { - object SimpleTestListener: TestListener { - override fun startTesting(runner: TestRunner) = println("Starting testing") - override fun endTesting(runner: TestRunner) = println("Testing finished") - - override fun startSuite(suite: TestSuite) = println("Starting test suite: $suite") - override fun endSuite(suite: TestSuite) = println("Test suite finished: $suite") - override fun ignoreSuite(suite: TestSuite) = println("Test suite ignored: $suite") - - override fun start(testCase: TestCase) = println("Starting test case: $testCase") - override fun pass(testCase: TestCase) = println("Passed: $testCase") - override fun fail(testCase: TestCase, e: Throwable) { - println("Failed: $testCase. Exception:") - e.printStackTrace() - } - override fun ignore(testCase: TestCase) = println("Ignore: $testCase") - } - private val _suites = mutableListOf() val suites: Collection get() = _suites @@ -26,18 +9,18 @@ object TestRunner { fun register(suites: Iterable) = _suites.addAll(suites) fun register(vararg suites: TestSuite) = _suites.addAll(suites) - fun run() { - SimpleTestListener.startTesting(this) + fun run(listener: TestListener) = with(listener) { + startTesting(this@TestRunner) suites.forEach { if (it.ignored) { - SimpleTestListener.ignoreSuite(it) + ignoreSuite(it) } else { - SimpleTestListener.startSuite(it) - it.run(SimpleTestListener) - SimpleTestListener.endSuite(it) + startSuite(it) + it.run(listener) + endSuite(it) } } - SimpleTestListener.endTesting(this) + endTesting(this@TestRunner) } }