diff --git a/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js b/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js index 9bbca2930bd..d98389ee87c 100644 --- a/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js +++ b/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js @@ -105,14 +105,29 @@ const KarmaKotlinReporter = function (baseReporterDecorator, config, emitter) { this.TEST_STD_OUT = "##teamcity[testStdOut name='%s' out='%s' flowId='']"; + const END_KOTLIN_TEST = "'--END_KOTLIN_TEST--"; + const tcOnBrowserStart = this.onBrowserStart; this.onBrowserStart = function (browser) { tcOnBrowserStart.call(this, browser); this.browserResults[browser.id].consoleCollector = []; + this.browserResults[browser.id].consoleResultCollector = {}; + }; + + const concatenateFqn = function (result) { + return `${result.suite.join(".")}.${result.description}` }; this.onBrowserLog = (browser, log, type) => { const browserResult = this.browserResults[browser.id]; + + if (log.startsWith(END_KOTLIN_TEST)) { + var result = JSON.parse(log.substring(END_KOTLIN_TEST.length, log.length - 1)); + browserResult.consoleResultCollector[concatenateFqn(result)] = browserResult.consoleCollector; + browserResult.consoleCollector = []; + return + } + if (browserResult) { browserResult.consoleCollector.push(`[${type}] ${log}\n`) } @@ -126,14 +141,12 @@ const KarmaKotlinReporter = function (baseReporterDecorator, config, emitter) { const testName = result.description; const endMessage = log.pop(); - this.browserResults[browser.id].consoleCollector.forEach(item => { + this.browserResults[browser.id].consoleResultCollector[concatenateFqn(result)].forEach(item => { log.push( formatMessage(this.TEST_STD_OUT, testName, item) ) }); log.push(endMessage); - - this.browserResults[browser.id].consoleCollector = [] }; this.specFailure = function (browser, result) { @@ -141,7 +154,7 @@ const KarmaKotlinReporter = function (baseReporterDecorator, config, emitter) { const testName = result.description; log.push(formatMessage(this.TEST_START, testName)); - this.browserResults[browser.id].consoleCollector.forEach(item => { + this.browserResults[browser.id].consoleResultCollector[concatenateFqn(result)].forEach(item => { log.push( formatMessage(this.TEST_STD_OUT, testName, item) ) @@ -153,8 +166,6 @@ const KarmaKotlinReporter = function (baseReporterDecorator, config, emitter) { .join('\n\n') )); log.push(formatMessage(this.TEST_END, testName, result.time)); - - this.browserResults[browser.id].consoleCollector = [] }; this.flushLogs = function (browserResult) { diff --git a/libraries/tools/kotlin-test-js-runner/karma.ts b/libraries/tools/kotlin-test-js-runner/karma.ts index 48eb677efc5..0cf79596b3a 100755 --- a/libraries/tools/kotlin-test-js-runner/karma.ts +++ b/libraries/tools/kotlin-test-js-runner/karma.ts @@ -20,4 +20,10 @@ const parser = new CliArgsParser(cliDescription); const untypedArgs = parser.parse(processArgs); const initialAdapter = kotlin_test.kotlin.test.detectAdapter_8be2vx$(); -kotlin_test.setAdapter(getFilteringAdapter(initialAdapter, untypedArgs)); \ No newline at end of file +kotlin_test.setAdapter(getFilteringAdapter(initialAdapter, untypedArgs)); + +const resultFun = window.__karma__.result; +window.__karma__.result = function (result) { + console.log(`--END_KOTLIN_TEST--\n${JSON.stringify(result)}`); + resultFun(result) +}; \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/window.d.ts b/libraries/tools/kotlin-test-js-runner/window.d.ts index 186ca8ed39b..78af8f20fe0 100644 --- a/libraries/tools/kotlin-test-js-runner/window.d.ts +++ b/libraries/tools/kotlin-test-js-runner/window.d.ts @@ -7,6 +7,10 @@ interface Window { __karma__: { config: { args: string[] - } + }, + result: (result: BrowserResult) => void } +} + +interface BrowserResult { } \ No newline at end of file