diff --git a/lib/testing-utils.js b/lib/testing-utils.js index e926c8bda..e1659282a 100644 --- a/lib/testing-utils.js +++ b/lib/testing-utils.js @@ -1,27 +1,30 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +function wrapOutput(context) { + return (str) => { + if (typeof str === 'string') { + context.testOutput += str; + } + return true; + }; +} function silenceDebugOutput(test) { const typedTest = test; typedTest.beforeEach(t => { + t.context.testOutput = ""; const processStdoutWrite = process.stdout.write.bind(process.stdout); - t.context.write = processStdoutWrite; - process.stdout.write = (str, encoding, cb) => { - // Core library will directly call process.stdout.write for commands - // We don't want debug output to be included in tests - if (typeof str === "string") { - str = str.replace(/::(info|debug|warning).*/, ''); - if (str.trim() !== "") { - processStdoutWrite(str, encoding, cb); - } - } - else { - processStdoutWrite(str, encoding, cb); - } - return true; - }; + t.context.stdoutWrite = processStdoutWrite; + process.stdout.write = wrapOutput(t.context); + const processStderrWrite = process.stderr.write.bind(process.stderr); + t.context.stderrWrite = processStderrWrite; + process.stderr.write = wrapOutput(t.context); }); - typedTest.afterEach(t => { - process.stdout.write = t.context.write; + typedTest.afterEach.always(t => { + process.stdout.write = t.context.stdoutWrite; + process.stderr.write = t.context.stderrWrite; + if (!t.passed) { + process.stdout.write(t.context.testOutput); + } }); } exports.silenceDebugOutput = silenceDebugOutput; diff --git a/lib/testing-utils.js.map b/lib/testing-utils.js.map index 2a311a1bf..32f83dd30 100644 --- a/lib/testing-utils.js.map +++ b/lib/testing-utils.js.map @@ -1 +1 @@ -{"version":3,"file":"testing-utils.js","sourceRoot":"","sources":["../src/testing-utils.ts"],"names":[],"mappings":";;AAEA,SAAgB,kBAAkB,CAAC,IAAwB;IACzD,MAAM,SAAS,GAAG,IAAmC,CAAC;IAEtD,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAwB,EAAE,QAAc,EAAE,EAA0B,EAAE,EAAE;YAC5F,oEAAoE;YACpE,qDAAqD;YACrD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAC3B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBACnB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;iBACzC;aACF;iBAAM;gBACL,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;aACvC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAxBD,gDAwBC"} \ No newline at end of file +{"version":3,"file":"testing-utils.js","sourceRoot":"","sources":["../src/testing-utils.ts"],"names":[],"mappings":";;AAIA,SAAS,UAAU,CAAC,OAAoB;IACtC,OAAO,CAAC,GAAQ,EAAW,EAAE;QAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;SAC3B;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAA;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAwB;IACzD,MAAM,SAAS,GAAG,IAAkC,CAAC;IAErD,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QACrB,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;QAE1B,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAE7C,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAE7C,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SAC5C;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,gDAuBC"} \ No newline at end of file diff --git a/src/testing-utils.ts b/src/testing-utils.ts index 48845d6f8..3605ba8d5 100644 --- a/src/testing-utils.ts +++ b/src/testing-utils.ts @@ -1,27 +1,37 @@ import {TestInterface} from 'ava'; +type TestContext = {stdoutWrite: any, stderrWrite: any, testOutput: string}; + +function wrapOutput(context: TestContext) { + return (str: any): boolean => { + if (typeof str === 'string') { + context.testOutput += str; + } + return true; + } +} + export function silenceDebugOutput(test: TestInterface) { - const typedTest = test as TestInterface<{write: any}>; + const typedTest = test as TestInterface; typedTest.beforeEach(t => { + t.context.testOutput = ""; + const processStdoutWrite = process.stdout.write.bind(process.stdout); - t.context.write = processStdoutWrite; - process.stdout.write = (str: Uint8Array | string, encoding?: any, cb?: (err?: Error) => void) => { - // Core library will directly call process.stdout.write for commands - // We don't want debug output to be included in tests - if (typeof str === "string") { - str = str.replace(/::(info|debug|warning).*/, ''); - if (str.trim() !== "") { - processStdoutWrite(str, encoding, cb); - } - } else { - processStdoutWrite(str, encoding, cb); - } - return true; - }; + t.context.stdoutWrite = processStdoutWrite; + process.stdout.write = wrapOutput(t.context); + + const processStderrWrite = process.stderr.write.bind(process.stderr); + t.context.stderrWrite = processStderrWrite; + process.stderr.write = wrapOutput(t.context); }); - typedTest.afterEach(t => { - process.stdout.write = t.context.write; + typedTest.afterEach.always(t => { + process.stdout.write = t.context.stdoutWrite; + process.stderr.write = t.context.stderrWrite; + + if (!t.passed) { + process.stdout.write(t.context.testOutput); + } }); }