UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

80 lines 13.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const jest_environment_node_1 = require("jest-environment-node"); class TestEnvironment extends jest_environment_node_1.TestEnvironment { constructor(config, context) { super(config, context); this.log = new Array(); // We need to set the event handler by assignment in the constructor, // because if we declare it as an async member TypeScript's type derivation // doesn't work properly. this.handleTestEvent = (async (event, _state) => { if (event.name === 'test_done' && event.test.errors.length > 0 && this.log.length > 0) { this.stopCapture(); this.originalConsole.log(`[Console output] ${fullTestName(event.test)}\n`); for (const item of this.log) { this.originalConsole[item.type].apply(this.originalConsole, [' ', ...item.args]); } this.originalConsole.log('\n'); this.startCapture(); } if (event.name === 'test_done') { this.log = []; } }); } async setup() { await super.setup(); this.log = []; this.startCapture(); } async teardown() { this.stopCapture(); await super.teardown(); } startCapture() { this.originalConsole = console; this.originalStdoutWrite = process.stdout.write; this.originalStderrWrite = process.stderr.write; this.global.console = { ...console, log: (...args) => this.log.push({ type: 'log', args }), error: (...args) => this.log.push({ type: 'error', args }), warn: (...args) => this.log.push({ type: 'warn', args }), info: (...args) => this.log.push({ type: 'info', args }), debug: (...args) => this.log.push({ type: 'debug', args }), }; const self = this; process.stdout.write = function (chunk, enccb) { const encoding = typeof enccb === 'string' ? enccb : 'utf-8'; const message = Buffer.isBuffer(chunk) ? chunk.toString(encoding) : chunk; self.log.push({ type: 'log', args: [message.replace(/\n$/, '')] }); if (typeof enccb === 'function') { enccb(); } }; process.stderr.write = function (chunk, enccb) { const encoding = typeof enccb === 'string' ? enccb : 'utf-8'; const message = Buffer.isBuffer(chunk) ? chunk.toString(encoding) : chunk; self.log.push({ type: 'error', args: [message.replace(/\n$/, '')] }); if (typeof enccb === 'function') { enccb(); } }; } stopCapture() { this.global.console = this.originalConsole; process.stdout.write = this.originalStdoutWrite; process.stderr.write = this.originalStderrWrite; } } exports.default = TestEnvironment; function fullTestName(test) { let ret = test.name; while (test.parent != null && test.parent.name !== 'ROOT_DESCRIBE_BLOCK') { ret = test.parent.name + ' › ' + ret; test = test.parent; } return ret; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC1idWZmZXJlZGNvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqZXN0LWJ1ZmZlcmVkY29uc29sZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLGlFQUEyRTtBQU8zRSxNQUFxQixlQUFnQixTQUFRLHVDQUFlO0lBTzFELFlBQVksTUFBNkIsRUFBRSxPQUEyQjtRQUNwRSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBUGpCLFFBQUcsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztRQVN4QyxxRUFBcUU7UUFDckUsMkVBQTJFO1FBQzNFLHlCQUF5QjtRQUN4QixJQUFpQyxDQUFDLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBRW5CLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLG9CQUFvQixZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0UsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRS9CLElBQUksQ0FBQyxZ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QUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qKlxuICogQSBKZXN0IGVudmlyb25tZW50IHRoYXQgYnVmZmVycyBvdXRwdXRzIHRvIGBjb25zb2xlLmxvZygpYCBhbmQgb25seSBzaG93cyBpdCBmb3IgZmFpbGluZyB0ZXN0cy5cbiAqL1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENvbnRleHQsIEplc3RFbnZpcm9ubWVudCwgSmVzdEVudmlyb25tZW50Q29uZmlnIH0gZnJvbSAnQGplc3QvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ2lyY3VzIH0gZnJvbSAnQGplc3QvdHlwZXMnO1xuaW1wb3J0IHsgVGVzdEVudmlyb25tZW50IGFzIE5vZGVFbnZpcm9ubWVudCB9IGZyb20gJ2plc3QtZW52aXJvbm1lbnQtbm9kZSc7XG5cbmludGVyZmFjZSBDb25zb2xlTWVzc2FnZSB7XG4gIHR5cGU6ICdsb2cnIHwgJ2Vycm9yJyB8ICd3YXJuJyB8ICdpbmZvJyB8ICdkZWJ1Zyc7XG4gIGFyZ3M6IGFueVtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0RW52aXJvbm1lbnQgZXh0ZW5kcyBOb2RlRW52aXJvbm1lbnQgaW1wbGVtZW50cyBKZXN0RW52aXJvbm1lbnQ8dW5rbm93bj4ge1xuICBwcml2YXRlIGxvZyA9IG5ldyBBcnJheTxDb25zb2xlTWVzc2FnZT4oKTtcblxuICBwcml2YXRlIG9yaWdpbmFsQ29uc29sZSE6IHR5cGVvZiBjb25zb2xlO1xuICBwcml2YXRlIG9yaWdpbmFsU3Rkb3V0V3JpdGUhOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQud3JpdGU7XG4gIHByaXZhdGUgb3JpZ2luYWxTdGRlcnJXcml0ZSE6IHR5cGVvZiBwcm9jZXNzLnN0ZGVyci53cml0ZTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEplc3RFbnZpcm9ubWVudENvbmZpZywgY29udGV4dDogRW52aXJvbm1lbnRDb250ZXh0KSB7XG4gICAgc3VwZXIoY29uZmlnLCBjb250ZXh0KTtcblxuICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBldmVudCBoYW5kbGVyIGJ5IGFzc2lnbm1lbnQgaW4gdGhlIGNvbnN0cnVjdG9yLFxuICAgIC8vIGJlY2F1c2UgaWYgd2UgZGVjbGFyZSBpdCBhcyBhbiBhc3luYyBtZW1iZXIgVHlwZVNjcmlwdCdzIHR5cGUgZGVyaXZhdGlvblxuICAgIC8vIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cbiAgICAodGhpcyBhcyBKZXN0RW52aXJvbm1lbnQ8dW5rbm93bj4pLmhhbmRsZVRlc3RFdmVudCA9IChhc3luYyAoZXZlbnQsIF9zdGF0ZSkgPT4ge1xuICAgICAgaWYgKGV2ZW50Lm5hbWUgPT09ICd0ZXN0X2RvbmUnICYmIGV2ZW50LnRlc3QuZXJyb3JzLmxlbmd0aCA+IDAgJiYgdGhpcy5sb2cubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnN0b3BDYXB0dXJlKCk7XG5cbiAgICAgICAgdGhpcy5vcmlnaW5hbENvbnNvbGUubG9nKGBbQ29uc29sZSBvdXRwdXRdICR7ZnVsbFRlc3ROYW1lKGV2ZW50LnRlc3QpfVxcbmApO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5sb2cpIHtcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsQ29uc29sZVtpdGVtLnR5cGVdLmFwcGx5KHRoaXMub3JpZ2luYWxDb25zb2xlLCBbJyAgICAnLCAuLi5pdGVtLmFyZ3NdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9yaWdpbmFsQ29uc29sZS5sb2coJ1xcbicpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRDYXB0dXJlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5uYW1lID09PSAndGVzdF9kb25lJykge1xuICAgICAgICB0aGlzLmxvZyA9IFtdO1xuICAgICAgfVxuICAgIH0pIHNhdGlzZmllcyBDaXJjdXMuRXZlbnRIYW5kbGVyO1xuICB9XG5cbiAgYXN5bmMgc2V0dXAoKSB7XG4gICAgYXdhaXQgc3VwZXIuc2V0dXAoKTtcblxuICAgIHRoaXMubG9nID0gW107XG4gICAgdGhpcy5zdGFydENhcHR1cmUoKTtcbiAgfVxuXG4gIGFzeW5jIHRlYXJkb3duKCkge1xuICAgIHRoaXMuc3RvcENhcHR1cmUoKTtcbiAgICBhd2FpdCBzdXBlci50ZWFyZG93bigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENhcHR1cmUoKSB7XG4gICAgdGhpcy5vcmlnaW5hbENvbnNvbGUgPSBjb25zb2xlO1xuICAgIHRoaXMub3JpZ2luYWxTdGRvdXRXcml0ZSA9IHByb2Nlc3Muc3Rkb3V0LndyaXRlO1xuICAgIHRoaXMub3JpZ2luYWxTdGRlcnJXcml0ZSA9IHByb2Nlc3Muc3RkZXJyLndyaXRlO1xuXG4gICAgdGhpcy5nbG9iYWwuY29uc29sZSA9IHtcbiAgICAgIC4uLmNvbnNvbGUsXG4gICAgICBsb2c6ICguLi5hcmdzKSA9PiB0aGlzLmxvZy5wdXNoKHsgdHlwZTogJ2xvZycsIGFyZ3MgfSksXG4gICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMubG9nLnB1c2goeyB0eXBlOiAnZXJyb3InLCBhcmdzIH0pLFxuICAgICAgd2FybjogKC4uLmFyZ3MpID0+IHRoaXMubG9nLnB1c2goeyB0eXBlOiAnd2FybicsIGFyZ3MgfSksXG4gICAgICBpbmZvOiAoLi4uYXJncykgPT4gdGhpcy5sb2cucHVzaCh7IHR5cGU6ICdpbmZvJywgYXJncyB9KSxcbiAgICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5sb2cucHVzaCh7IHR5cGU6ICdkZWJ1ZycsIGFyZ3MgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlID0gZnVuY3Rpb24gKGNodW5rOiBCdWZmZXIgfCBzdHJpbmcsIGVuY2NiPzogQnVmZmVyRW5jb2RpbmcgfCAoKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKSk6IHZvaWQge1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSB0eXBlb2YgZW5jY2IgPT09ICdzdHJpbmcnID8gZW5jY2IgOiAndXRmLTgnO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuay50b1N0cmluZyhlbmNvZGluZykgOiBjaHVuaztcbiAgICAgIHNlbGYubG9nLnB1c2goeyB0eXBlOiAnbG9nJywgYXJnczogW21lc3NhZ2UucmVwbGFjZSgvXFxuJC8sICcnKV0gfSk7XG4gICAgICBpZiAodHlwZW9mIGVuY2NiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVuY2NiKCk7XG4gICAgICB9XG4gICAgfSBhcyBhbnk7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUgPSBmdW5jdGlvbiAoY2h1bms6IEJ1ZmZlciB8IHN0cmluZywgZW5jY2I/OiBCdWZmZXJFbmNvZGluZyB8ICgoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpKTogdm9pZCB7XG4gICAgICBjb25zdCBlbmNvZGluZyA9IHR5cGVvZiBlbmNjYiA9PT0gJ3N0cmluZycgPyBlbmNjYiA6ICd1dGYtOCc7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmlzQnVmZmVyKGNodW5rKSA/IGNodW5rLnRvU3RyaW5nKGVuY29kaW5nKSA6IGNodW5rO1xuICAgICAgc2VsZi5sb2cucHVzaCh7IHR5cGU6ICdlcnJvcicsIGFyZ3M6IFttZXNzYWdlLnJlcGxhY2UoL1xcbiQvLCAnJyldIH0pO1xuICAgICAgaWYgKHR5cGVvZiBlbmNjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbmNjYigpO1xuICAgICAgfVxuICAgIH0gYXMgYW55O1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2FwdHVyZSgpIHtcbiAgICB0aGlzLmdsb2JhbC5jb25zb2xlID0gdGhpcy5vcmlnaW5hbENvbnNvbGU7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUgPSB0aGlzLm9yaWdpbmFsU3Rkb3V0V3JpdGU7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUgPSB0aGlzLm9yaWdpbmFsU3RkZXJyV3JpdGU7XG4gIH1cbn1cblxuLy8gRGVzY3JpYmVCbG9jayBpcyBub3QgZXhwb3J0ZWQgZnJvbSBgQGplc3QvdHlwZXNgLCBzbyB3ZSBuZWVkIHRvIGJ1aWxkIHRoZSBwYXJ0cyB3ZSBhcmUgaW50ZXJlc3RlZCBpblxudHlwZSBUZXN0RGVzY3JpcHRpb24gPSBQYXJ0aWFsQnk8UGljazxDaXJjdXMuVGVzdEVudHJ5LCAnbmFtZScgfCAncGFyZW50Jz4sICdwYXJlbnQnPjtcblxuLy8gVXRpbGl0eSB0eXBlIHRvIG1ha2Ugc3BlY2lmaWMgZmllbGRzIG9wdGlvbmFsXG50eXBlIFBhcnRpYWxCeTxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+ICYgUGFydGlhbDxQaWNrPFQsIEs+PlxuXG5mdW5jdGlvbiBmdWxsVGVzdE5hbWUodGVzdDogVGVzdERlc2NyaXB0aW9uKSB7XG4gIGxldCByZXQgPSB0ZXN0Lm5hbWU7XG4gIHdoaWxlICh0ZXN0LnBhcmVudCAhPSBudWxsICYmIHRlc3QucGFyZW50Lm5hbWUgIT09ICdST09UX0RFU0NSSUJFX0JMT0NLJykge1xuICAgIHJldCA9IHRlc3QucGFyZW50Lm5hbWUgKyAnIOKAuiAnICsgcmV0O1xuICAgIHRlc3QgPSB0ZXN0LnBhcmVudDtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19