KT-22807: allow asynchronous testing in Kotlin/JS with QUnit

This commit is contained in:
gcx11
2019-04-01 00:55:45 +02:00
committed by Anton Bannykh
parent d98b1dfa7e
commit b49c5bf74e
6 changed files with 13 additions and 18 deletions
@@ -1,12 +1,6 @@
var Tester = require('./test-result-checker');
var full = require('./expected-outcomes');
var allAsyncPass = {};
for (var name in full) {
allAsyncPass[name] = name.startsWith('AsyncTest ') ? 'pass' : full[name];
}
var tester = new Tester(allAsyncPass, 'qunit');
var expectedOutcomes = require('./expected-outcomes');
var tester = new Tester(expectedOutcomes, 'qunit');
QUnit.testDone(function (details) {
var testName = (details.module.replace('> ', '') + ' ' + details.name).trim();
@@ -38,5 +38,5 @@ public external interface FrameworkAdapter {
* @param ignored whether the test is ignored
* @param testFn contains test body invocation
*/
fun test(name: String, ignored: Boolean, testFn: () -> Unit)
fun test(name: String, ignored: Boolean, testFn: () -> Any)
}
@@ -18,7 +18,7 @@ internal open class BareAdapter : FrameworkAdapter {
}
}
override fun test(name: String, ignored: Boolean, testFn: () -> Unit) {
override fun test(name: String, ignored: Boolean, testFn: () -> Any) {
if (!ignored) {
testFn()
}
@@ -10,8 +10,8 @@ package kotlin.test.adapters
*/
internal external object QUnit {
fun module(name: String, suiteFn: () -> Unit): Unit
fun test(name: String, testFn: (dynamic) -> Unit): Unit
fun skip(name: String, testFn: (dynamic) -> Unit): Unit
fun test(name: String, testFn: (dynamic) -> Any): Unit
fun skip(name: String, testFn: (dynamic) -> Any): Unit
}
/*
@@ -20,8 +20,8 @@ internal external object QUnit {
internal external fun describe(name: String, fn: () -> Unit)
internal external fun xdescribe(name: String, fn: () -> Unit)
internal external fun it(name: String, fn: () -> Unit)
internal external fun xit(name: String, fn: () -> Unit)
internal external fun it(name: String, fn: () -> Any)
internal external fun xit(name: String, fn: () -> Any)
internal fun isQUnit() = jsTypeOf(QUnit) !== "undefined"
@@ -20,7 +20,7 @@ internal class JasmineLikeAdapter : FrameworkAdapter {
}
}
override fun test(name: String, ignored: Boolean, testFn: () -> Unit) {
override fun test(name: String, ignored: Boolean, testFn: () -> Any) {
if (ignored) {
xit(name, testFn)
} else {
@@ -22,7 +22,7 @@ internal class QUnitAdapter : FrameworkAdapter {
ignoredSuite = prevIgnore
}
override fun test(name: String, ignored: Boolean, testFn: () -> Unit) {
override fun test(name: String, ignored: Boolean, testFn: () -> Any) {
if (ignored or ignoredSuite) {
QUnit.skip(name, wrapTest(testFn))
} else {
@@ -30,15 +30,16 @@ internal class QUnitAdapter : FrameworkAdapter {
}
}
private fun wrapTest(testFn: () -> Unit): (dynamic) -> Unit = { assert ->
private fun wrapTest(testFn: () -> Any): (dynamic) -> Any = { assert ->
var assertionsHappened = false
assertHook = { testResult ->
assertionsHappened = true
assert.ok(testResult.result, testResult.lazyMessage())
}
testFn()
val possiblePromise = testFn()
if (!assertionsHappened) {
assertTrue(true, "A test with no assertions is considered successful")
}
possiblePromise
}
}