From e933a8a0e10f46e6128b277eaadd7ae733a92eeb Mon Sep 17 00:00:00 2001 From: Eugen Cazacu <32613393+oygen87@users.noreply.github.com> Date: Thu, 22 Aug 2019 09:13:13 +0200 Subject: [PATCH] print out the failed tests after the summary (denoland/deno_std#554) Original: https://github.com/denoland/deno_std/commit/ed1b9e0563e0f22eb6415b248d6218e75e500783 --- testing/mod.ts | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/testing/mod.ts b/testing/mod.ts index 51fa62cea6..b237a0d859 100644 --- a/testing/mod.ts +++ b/testing/mod.ts @@ -138,6 +138,7 @@ export function test( const RED_FAILED = red("FAILED"); const GREEN_OK = green("OK"); +const RED_BG_FAIL = bgRed(" FAIL "); interface TestStats { filtered: number; @@ -201,6 +202,17 @@ function report(result: TestResult): void { result.printed = true; } +function printFailedSummary(results: TestResults): void { + results.cases.forEach( + (v): void => { + if (!v.ok) { + console.error(`${RED_BG_FAIL} ${red(v.name)}`); + console.error(v.error); + } + } + ); +} + function printResults( stats: TestStats, results: TestResults, @@ -220,7 +232,7 @@ function printResults( } // Attempting to match the output of Rust's test runner. print( - `\ntest result: ${stats.failed ? RED_FAILED : GREEN_OK}. ` + + `\ntest result: ${stats.failed ? RED_BG_FAIL : GREEN_OK} ` + `${stats.passed} passed; ${stats.failed} failed; ` + `${stats.ignored} ignored; ${stats.measured} measured; ` + `${stats.filtered} filtered out ` + @@ -287,6 +299,7 @@ async function runTestsParallel( async function runTestsSerial( stats: TestStats, + results: TestResults, tests: TestDefinition[], exitOnFail: boolean, disableLog: boolean @@ -309,6 +322,14 @@ async function runTestsSerial( print( GREEN_OK + " " + name + " " + promptTestTime(end - start, true) ); + results.cases.forEach( + (v): void => { + if (v.name === name) { + v.ok = true; + v.printed = true; + } + } + ); } catch (err) { if (disableLog) { print(CLEAR_LINE, false); @@ -316,6 +337,15 @@ async function runTestsSerial( print(`${RED_FAILED} ${name}`); print(err.stack); stats.failed++; + results.cases.forEach( + (v): void => { + if (v.name === name) { + v.error = err; + v.ok = false; + v.printed = true; + } + } + ); if (exitOnFail) { break; } @@ -367,7 +397,7 @@ export async function runTests({ if (parallel) { await runTestsParallel(stats, results, tests, exitOnFail); } else { - await runTestsSerial(stats, tests, exitOnFail, disableLog); + await runTestsSerial(stats, results, tests, exitOnFail, disableLog); } const end = performance.now(); if (disableLog) { @@ -379,6 +409,7 @@ export async function runTests({ // promise rejections being swallowed. setTimeout((): void => { console.error(`There were ${stats.failed} test failures.`); + printFailedSummary(results); Deno.exit(1); }, 0); }