From 7b0070ea62182d384622020e82c5cb4f7ee946a6 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Wed, 27 Dec 2017 17:34:20 +0300 Subject: [PATCH] Promise-based async integration test for kotlin-test-js --- libraries/kotlin.test/js/it/build.gradle | 2 +- .../kotlin.test/js/it/js/expected-outcomes.js | 3 ++ .../kotlin.test/js/it/js/qunit-reporter.js | 9 ++++- .../kotlin.test/js/it/js/tape-reporter.js | 6 +-- .../js/it/src/test/kotlin/MainTest.kt | 40 +++++++++++++++++++ 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/libraries/kotlin.test/js/it/build.gradle b/libraries/kotlin.test/js/it/build.gradle index 6b5d4377dd5..652e5004405 100644 --- a/libraries/kotlin.test/js/it/build.gradle +++ b/libraries/kotlin.test/js/it/build.gradle @@ -33,7 +33,7 @@ node { def createFrameworkTest(def name) { return tasks.create("test$name", NpmTask) { - dependsOn(compileKotlin2Js, populateNodeModules, npmInstall) + dependsOn(compileTestKotlin2Js, populateNodeModules, npmInstall) def lowerName = name.toLowerCase() args = ['run', "test-$lowerName"] group = 'verification' diff --git a/libraries/kotlin.test/js/it/js/expected-outcomes.js b/libraries/kotlin.test/js/it/js/expected-outcomes.js index c775140f115..dd44289b2fc 100644 --- a/libraries/kotlin.test/js/it/js/expected-outcomes.js +++ b/libraries/kotlin.test/js/it/js/expected-outcomes.js @@ -3,6 +3,9 @@ module.exports = { 'SimpleTest testBar': 'pass', 'SimpleTest testFooWrong': 'pending', 'TestTest emptyTest': 'pending', + 'AsyncTest checkAsyncOrder': 'pass', + 'AsyncTest asyncPassing': 'pass', + 'AsyncTest asyncFailing': 'fail', 'org OrgTest test': 'pass', 'org.some SomeTest someIsBetterThanNothing': 'pass', 'org.some.name NameTest test': 'pass', diff --git a/libraries/kotlin.test/js/it/js/qunit-reporter.js b/libraries/kotlin.test/js/it/js/qunit-reporter.js index 9830c458b34..28572f44a71 100644 --- a/libraries/kotlin.test/js/it/js/qunit-reporter.js +++ b/libraries/kotlin.test/js/it/js/qunit-reporter.js @@ -1,5 +1,12 @@ var Tester = require('./test-result-checker'); -var tester = new Tester(require('./expected-outcomes'), 'qunit'); + +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'); QUnit.testDone(function (details) { var testName = (details.module.replace('> ', '') + ' ' + details.name).trim(); diff --git a/libraries/kotlin.test/js/it/js/tape-reporter.js b/libraries/kotlin.test/js/it/js/tape-reporter.js index cbc8fbd41b8..d629fa9e351 100644 --- a/libraries/kotlin.test/js/it/js/tape-reporter.js +++ b/libraries/kotlin.test/js/it/js/tape-reporter.js @@ -6,15 +6,15 @@ var Tester = require('./test-result-checker'); // Tape doesn't report pending tests. // See https://github.com/substack/tape/pull/197 and https://github.com/substack/tape/issues/90 var full = require('./expected-outcomes'); -var noPending = {}; +var noPendingAndAsyncPass = {}; for (var name in full) { var result = full[name]; if (result !== 'pending') { - noPending[name] = result; + noPendingAndAsyncPass[name] = name.startsWith('AsyncTest ') ? 'pass' : result; } } -var tester = new Tester(noPending, 'tape'); +var tester = new Tester(noPendingAndAsyncPass, 'tape'); process.on('exit', function () { tester.end(); diff --git a/libraries/kotlin.test/js/it/src/test/kotlin/MainTest.kt b/libraries/kotlin.test/js/it/src/test/kotlin/MainTest.kt index 51286c6ecc6..c5fadc0b954 100644 --- a/libraries/kotlin.test/js/it/src/test/kotlin/MainTest.kt +++ b/libraries/kotlin.test/js/it/src/test/kotlin/MainTest.kt @@ -1,3 +1,4 @@ +import kotlin.js.Promise import kotlin.test.* var value = 5 @@ -30,4 +31,43 @@ class SimpleTest { class TestTest { @Test fun emptyTest() { } +} + +class AsyncTest { + + var log = "" + + @BeforeTest + fun before() { + log = "" + } + + fun promise(v: Int) = Promise { resolve, reject -> + log += "a" + js("setTimeout")({ log += "c"; resolve(v) }, 100) + log += "b" + } + + @Test + fun checkAsyncOrder(): Promise { + log += 1 + + val p1 = promise(10) + + log += 2 + + val p2 = p1.then { result -> + assertEquals(log, "1ab23c") + } + + log += 3 + + return p2 + } + + @Test + fun asyncPassing() = promise(10).then { assertEquals(10, it) } + + @Test + fun asyncFailing() = promise(20).then { assertEquals(10, it) } } \ No newline at end of file