@webex/xunit-with-logs 3.0.0-beta.13 → 3.0.0-beta.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["util","require","fs","Base","utils","escape","mkdirp","path","pick","exports","module","XUnit","runner","options","stats","tests","self","reporterOptions","output","createWriteStream","Error","sync","dirname","fileStream","on","test","push","logMethodNames","originalMethods","console","systemErr","systemOut","forEach","methodName","args","callerInfo","stack","split","match","length","callerFile","relative","__dirname","unshift","toUpperCase","write","tag","name","failures","errors","skipped","passes","timestamp","Date","toUTCString","time","duration","t","inherits","prototype","done","fn","end","line","log","testFn","attrs","classname","parent","fullTitle","title","cdata","reduce","reducer","state","err","failureMessage","message","pending","out","innerOut","arg","close","content","pairs","innerTag","key","value","join","str"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// These'll get cleaned up in the xunit PR; for now, they're just here because\n// this file attempted to follow the format of the mocha core xunit reporter\n/* eslint-disable no-console */\n/* eslint-disable no-multi-assign */\n\n/**\n * Module dependencies.\n */\n\nconst util = require('util');\nconst fs = require('fs');\n\nconst Base = require('mocha/lib/reporters/base');\nconst utils = require('mocha/lib/utils');\n\nconst {escape} = utils;\nconst mkdirp = require('mkdirp');\n\nconst path = require('path');\n\nconst {pick} = require('lodash');\n\n/**\n * Expose `XUnit`.\n */\n\nexports = module.exports = XUnit;\n\n/**\n * Initialize a new `XUnit` reporter.\n *\n * @param {Runner} runner\n * @param {Object} options\n * @returns {undefined}\n * @api public\n */\nfunction XUnit(runner, options) {\n Reflect.apply(Base, this, [runner]);\n const {stats} = this;\n const tests = [];\n const self = this;\n\n if (options.reporterOptions && options.reporterOptions.output) {\n if (!fs.createWriteStream) {\n throw new Error('file output not supported in browser');\n }\n mkdirp.sync(path.dirname(options.reporterOptions.output));\n self.fileStream = fs.createWriteStream(options.reporterOptions.output);\n }\n\n runner.on('pending', (test) => {\n tests.push(test);\n });\n\n runner.on('pass', (test) => {\n tests.push(test);\n });\n\n runner.on('fail', (test) => {\n tests.push(test);\n });\n\n const logMethodNames = ['error', 'warn', 'log', 'info', 'debug', 'trace'];\n const originalMethods = pick(console, logMethodNames);\n\n runner.on('test', (test) => {\n test.systemErr = [];\n test.systemOut = [];\n\n logMethodNames.forEach((methodName) => {\n if (!console[methodName]) {\n methodName = 'log';\n }\n\n console[methodName] = (...args) => {\n Reflect.apply(originalMethods[methodName], console, args);\n\n const callerInfo = (new Error())\n .stack\n .split('\\n')[2]\n .match(/\\((.+?):(\\d+):\\d+/);\n\n if (callerInfo && callerInfo.length >= 2) {\n const callerFile = path.relative(__dirname, '..', callerInfo[1]);\n\n args.unshift(`(FILE:${callerFile || 'UNKNOWN'})`);\n args.unshift(`(LINE:${callerInfo[2] || 'UNKNOWN'})`);\n }\n\n if (methodName === 'error') {\n test.systemErr.push(args);\n }\n else {\n args.unshift(`${methodName.toUpperCase()}:`);\n\n test.systemOut.push(args);\n }\n };\n });\n });\n\n runner.on('test end', () => {\n logMethodNames.forEach((methodName) => {\n console[methodName] = originalMethods[methodName];\n });\n });\n\n runner.on('end', () => {\n self.write('<testsuites>');\n self.write(tag('testsuite', {\n name: 'Mocha Tests',\n tests: stats.tests,\n failures: stats.failures,\n errors: stats.failures,\n skipped: stats.tests - stats.failures - stats.passes,\n timestamp: (new Date()).toUTCString(),\n time: stats.duration / 1000 || 0\n }, false));\n\n tests.forEach((t) => {\n self.test(t);\n });\n\n self.write('</testsuite>');\n self.write('</testsuites>');\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\nutil.inherits(XUnit, Base);\n\n/**\n * Override done to close the stream (if it's a file).\n *\n * @param {Array} failures\n * @param {Function} fn\n * @returns {undefined}\n */\nXUnit.prototype.done = function done(failures, fn) {\n if (this.fileStream) {\n this.fileStream.end(() => {\n fn(failures);\n });\n }\n else {\n fn(failures);\n }\n};\n\n/**\n * Write out the given line.\n *\n * @param {string} line\n * @returns {undefined}\n */\nXUnit.prototype.write = function write(line) {\n if (this.fileStream) {\n this.fileStream.write(`${line}\\n`);\n }\n else {\n console.log(line);\n }\n};\n\n/**\n * Output tag for the given `test.`\n *\n * @param {Test} test\n * @returns {undefined}\n */\nXUnit.prototype.test = function testFn(test) {\n const attrs = {\n classname: test.parent.fullTitle(),\n name: test.title,\n time: test.duration / 1000 || 0\n };\n\n let systemErr;\n\n if (test.systemErr && test.systemErr.length > 0) {\n systemErr = tag('system-err', {}, false, cdata(test.systemErr.reduce(reducer, '\\n')));\n }\n else {\n systemErr = '';\n }\n\n let systemOut;\n\n if (test.systemOut && test.systemOut.length > 0) {\n systemOut = tag('system-out', {}, false, cdata(test.systemOut.reduce(reducer, '\\n')));\n }\n else {\n systemOut = '';\n }\n\n if (test.state === 'failed') {\n const {err} = test;\n const failureMessage = tag('failure', {}, false, cdata(`${escape(err.message)}\\n${err.stack}`));\n\n this.write(tag('testcase', attrs, false, failureMessage + systemOut + systemErr));\n }\n else if (test.pending) {\n this.write(tag('testcase', attrs, false, tag('skipped', {}, true)));\n }\n else {\n this.write(tag('testcase', attrs, true));\n }\n\n /**\n * reducer\n * @param {string} out\n * @param {Array<mixed>} args\n * @returns {string}\n * @private\n */\n function reducer(out, args) {\n return `${out + args.reduce((innerOut, arg) => `${innerOut + arg} `, '')}\\n`;\n }\n};\n\n/**\n * HTML tag helper.\n *\n * @param {string} name\n * @param {Object} attrs\n * @param {boolean} close\n * @param {string} content\n * @returns {string}\n */\nfunction tag(name, attrs, close, content) {\n const end = close ? '/>' : '>';\n const pairs = [];\n let innerTag;\n\n for (const [key, value] of Object.entries(attrs)) {\n pairs.push(`${key}=\"${escape(value)}\"`);\n }\n\n innerTag = `<${name}${pairs.length ? ` ${pairs.join(' ')}` : ''}${end}`;\n if (content) {\n innerTag += `${content}</${name}${end}`;\n }\n\n return innerTag;\n}\n\n/**\n * Return cdata escaped CDATA `str`.\n * @param {string} str\n * @returns {string}\n */\nfunction cdata(str) {\n return `<![CDATA[${escape(str)}]]>`;\n}\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AAEA;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AAEA,IAAMA,IAAI,GAAGC,OAAO,CAAC,MAAD,CAApB;;AACA,IAAMC,EAAE,GAAGD,OAAO,CAAC,IAAD,CAAlB;;AAEA,IAAME,IAAI,GAAGF,OAAO,CAAC,0BAAD,CAApB;;AACA,IAAMG,KAAK,GAAGH,OAAO,CAAC,iBAAD,CAArB;;AAEA,IAAOI,MAAP,GAAiBD,KAAjB,CAAOC,MAAP;;AACA,IAAMC,MAAM,GAAGL,OAAO,CAAC,QAAD,CAAtB;;AAEA,IAAMM,IAAI,GAAGN,OAAO,CAAC,MAAD,CAApB;;AAEA,eAAeA,OAAO,CAAC,QAAD,CAAtB;AAAA,IAAOO,IAAP,YAAOA,IAAP;AAEA;AACA;AACA;;;AAEAC,OAAO,GAAGC,MAAM,CAACD,OAAP,GAAiBE,KAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASA,KAAT,CAAeC,MAAf,EAAuBC,OAAvB,EAAgC;EAC9B,oBAAcV,IAAd,EAAoB,IAApB,EAA0B,CAACS,MAAD,CAA1B;EACA,IAAOE,KAAP,GAAgB,IAAhB,CAAOA,KAAP;EACA,IAAMC,KAAK,GAAG,EAAd;EACA,IAAMC,IAAI,GAAG,IAAb;;EAEA,IAAIH,OAAO,CAACI,eAAR,IAA2BJ,OAAO,CAACI,eAAR,CAAwBC,MAAvD,EAA+D;IAC7D,IAAI,CAAChB,EAAE,CAACiB,iBAAR,EAA2B;MACzB,MAAM,IAAIC,KAAJ,CAAU,sCAAV,CAAN;IACD;;IACDd,MAAM,CAACe,IAAP,CAAYd,IAAI,CAACe,OAAL,CAAaT,OAAO,CAACI,eAAR,CAAwBC,MAArC,CAAZ;IACAF,IAAI,CAACO,UAAL,GAAkBrB,EAAE,CAACiB,iBAAH,CAAqBN,OAAO,CAACI,eAAR,CAAwBC,MAA7C,CAAlB;EACD;;EAEDN,MAAM,CAACY,EAAP,CAAU,SAAV,EAAqB,UAACC,IAAD,EAAU;IAC7BV,KAAK,CAACW,IAAN,CAAWD,IAAX;EACD,CAFD;EAIAb,MAAM,CAACY,EAAP,CAAU,MAAV,EAAkB,UAACC,IAAD,EAAU;IAC1BV,KAAK,CAACW,IAAN,CAAWD,IAAX;EACD,CAFD;EAIAb,MAAM,CAACY,EAAP,CAAU,MAAV,EAAkB,UAACC,IAAD,EAAU;IAC1BV,KAAK,CAACW,IAAN,CAAWD,IAAX;EACD,CAFD;EAIA,IAAME,cAAc,GAAG,CAAC,OAAD,EAAU,MAAV,EAAkB,KAAlB,EAAyB,MAAzB,EAAiC,OAAjC,EAA0C,OAA1C,CAAvB;EACA,IAAMC,eAAe,GAAGpB,IAAI,CAACqB,OAAD,EAAUF,cAAV,CAA5B;EAEAf,MAAM,CAACY,EAAP,CAAU,MAAV,EAAkB,UAACC,IAAD,EAAU;IAC1BA,IAAI,CAACK,SAAL,GAAiB,EAAjB;IACAL,IAAI,CAACM,SAAL,GAAiB,EAAjB;IAEAJ,cAAc,CAACK,OAAf,CAAuB,UAACC,UAAD,EAAgB;MACrC,IAAI,CAACJ,OAAO,CAACI,UAAD,CAAZ,EAA0B;QACxBA,UAAU,GAAG,KAAb;MACD;;MAEDJ,OAAO,CAACI,UAAD,CAAP,GAAsB,YAAa;QAAA,kCAATC,IAAS;UAATA,IAAS;QAAA;;QACjC,oBAAcN,eAAe,CAACK,UAAD,CAA7B,EAA2CJ,OAA3C,EAAoDK,IAApD;QAEA,IAAMC,UAAU,GAAI,IAAIf,KAAJ,EAAD,CAChBgB,KADgB,CAEhBC,KAFgB,CAEV,IAFU,EAEJ,CAFI,EAGhBC,KAHgB,CAGV,mBAHU,CAAnB;;QAKA,IAAIH,UAAU,IAAIA,UAAU,CAACI,MAAX,IAAqB,CAAvC,EAA0C;UACxC,IAAMC,UAAU,GAAGjC,IAAI,CAACkC,QAAL,CAAcC,SAAd,EAAyB,IAAzB,EAA+BP,UAAU,CAAC,CAAD,CAAzC,CAAnB;UAEAD,IAAI,CAACS,OAAL,iBAAsBH,UAAU,IAAI,SAApC;UACAN,IAAI,CAACS,OAAL,iBAAsBR,UAAU,CAAC,CAAD,CAAV,IAAiB,SAAvC;QACD;;QAED,IAAIF,UAAU,KAAK,OAAnB,EAA4B;UAC1BR,IAAI,CAACK,SAAL,CAAeJ,IAAf,CAAoBQ,IAApB;QACD,CAFD,MAGK;UACHA,IAAI,CAACS,OAAL,WAAgBV,UAAU,CAACW,WAAX,EAAhB;UAEAnB,IAAI,CAACM,SAAL,CAAeL,IAAf,CAAoBQ,IAApB;QACD;MACF,CAvBD;IAwBD,CA7BD;EA8BD,CAlCD;EAoCAtB,MAAM,CAACY,EAAP,CAAU,UAAV,EAAsB,YAAM;IAC1BG,cAAc,CAACK,OAAf,CAAuB,UAACC,UAAD,EAAgB;MACrCJ,OAAO,CAACI,UAAD,CAAP,GAAsBL,eAAe,CAACK,UAAD,CAArC;IACD,CAFD;EAGD,CAJD;EAMArB,MAAM,CAACY,EAAP,CAAU,KAAV,EAAiB,YAAM;IACrBR,IAAI,CAAC6B,KAAL,CAAW,cAAX;IACA7B,IAAI,CAAC6B,KAAL,CAAWC,GAAG,CAAC,WAAD,EAAc;MAC1BC,IAAI,EAAE,aADoB;MAE1BhC,KAAK,EAAED,KAAK,CAACC,KAFa;MAG1BiC,QAAQ,EAAElC,KAAK,CAACkC,QAHU;MAI1BC,MAAM,EAAEnC,KAAK,CAACkC,QAJY;MAK1BE,OAAO,EAAEpC,KAAK,CAACC,KAAN,GAAcD,KAAK,CAACkC,QAApB,GAA+BlC,KAAK,CAACqC,MALpB;MAM1BC,SAAS,EAAG,IAAIC,IAAJ,EAAD,CAAaC,WAAb,EANe;MAO1BC,IAAI,EAAEzC,KAAK,CAAC0C,QAAN,GAAiB,IAAjB,IAAyB;IAPL,CAAd,EAQX,KARW,CAAd;IAUAzC,KAAK,CAACiB,OAAN,CAAc,UAACyB,CAAD,EAAO;MACnBzC,IAAI,CAACS,IAAL,CAAUgC,CAAV;IACD,CAFD;IAIAzC,IAAI,CAAC6B,KAAL,CAAW,cAAX;IACA7B,IAAI,CAAC6B,KAAL,CAAW,eAAX;EACD,CAlBD;AAmBD;AAED;AACA;AACA;;;AACA7C,IAAI,CAAC0D,QAAL,CAAc/C,KAAd,EAAqBR,IAArB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACAQ,KAAK,CAACgD,SAAN,CAAgBC,IAAhB,GAAuB,SAASA,IAAT,CAAcZ,QAAd,EAAwBa,EAAxB,EAA4B;EACjD,IAAI,KAAKtC,UAAT,EAAqB;IACnB,KAAKA,UAAL,CAAgBuC,GAAhB,CAAoB,YAAM;MACxBD,EAAE,CAACb,QAAD,CAAF;IACD,CAFD;EAGD,CAJD,MAKK;IACHa,EAAE,CAACb,QAAD,CAAF;EACD;AACF,CATD;AAWA;AACA;AACA;AACA;AACA;AACA;;;AACArC,KAAK,CAACgD,SAAN,CAAgBd,KAAhB,GAAwB,SAASA,KAAT,CAAekB,IAAf,EAAqB;EAC3C,IAAI,KAAKxC,UAAT,EAAqB;IACnB,KAAKA,UAAL,CAAgBsB,KAAhB,WAAyBkB,IAAzB;EACD,CAFD,MAGK;IACHlC,OAAO,CAACmC,GAAR,CAAYD,IAAZ;EACD;AACF,CAPD;AASA;AACA;AACA;AACA;AACA;AACA;;;AACApD,KAAK,CAACgD,SAAN,CAAgBlC,IAAhB,GAAuB,SAASwC,MAAT,CAAgBxC,IAAhB,EAAsB;EAC3C,IAAMyC,KAAK,GAAG;IACZC,SAAS,EAAE1C,IAAI,CAAC2C,MAAL,CAAYC,SAAZ,EADC;IAEZtB,IAAI,EAAEtB,IAAI,CAAC6C,KAFC;IAGZf,IAAI,EAAE9B,IAAI,CAAC+B,QAAL,GAAgB,IAAhB,IAAwB;EAHlB,CAAd;EAMA,IAAI1B,SAAJ;;EAEA,IAAIL,IAAI,CAACK,SAAL,IAAkBL,IAAI,CAACK,SAAL,CAAeS,MAAf,GAAwB,CAA9C,EAAiD;IAC/CT,SAAS,GAAGgB,GAAG,CAAC,YAAD,EAAe,EAAf,EAAmB,KAAnB,EAA0ByB,KAAK,CAAC9C,IAAI,CAACK,SAAL,CAAe0C,MAAf,CAAsBC,OAAtB,EAA+B,IAA/B,CAAD,CAA/B,CAAf;EACD,CAFD,MAGK;IACH3C,SAAS,GAAG,EAAZ;EACD;;EAED,IAAIC,SAAJ;;EAEA,IAAIN,IAAI,CAACM,SAAL,IAAkBN,IAAI,CAACM,SAAL,CAAeQ,MAAf,GAAwB,CAA9C,EAAiD;IAC/CR,SAAS,GAAGe,GAAG,CAAC,YAAD,EAAe,EAAf,EAAmB,KAAnB,EAA0ByB,KAAK,CAAC9C,IAAI,CAACM,SAAL,CAAeyC,MAAf,CAAsBC,OAAtB,EAA+B,IAA/B,CAAD,CAA/B,CAAf;EACD,CAFD,MAGK;IACH1C,SAAS,GAAG,EAAZ;EACD;;EAED,IAAIN,IAAI,CAACiD,KAAL,KAAe,QAAnB,EAA6B;IAC3B,IAAOC,GAAP,GAAclD,IAAd,CAAOkD,GAAP;IACA,IAAMC,cAAc,GAAG9B,GAAG,CAAC,SAAD,EAAY,EAAZ,EAAgB,KAAhB,EAAuByB,KAAK,WAAIlE,MAAM,CAACsE,GAAG,CAACE,OAAL,CAAV,eAA4BF,GAAG,CAACvC,KAAhC,EAA5B,CAA1B;IAEA,KAAKS,KAAL,CAAWC,GAAG,CAAC,UAAD,EAAaoB,KAAb,EAAoB,KAApB,EAA2BU,cAAc,GAAG7C,SAAjB,GAA6BD,SAAxD,CAAd;EACD,CALD,MAMK,IAAIL,IAAI,CAACqD,OAAT,EAAkB;IACrB,KAAKjC,KAAL,CAAWC,GAAG,CAAC,UAAD,EAAaoB,KAAb,EAAoB,KAApB,EAA2BpB,GAAG,CAAC,SAAD,EAAY,EAAZ,EAAgB,IAAhB,CAA9B,CAAd;EACD,CAFI,MAGA;IACH,KAAKD,KAAL,CAAWC,GAAG,CAAC,UAAD,EAAaoB,KAAb,EAAoB,IAApB,CAAd;EACD;EAED;AACF;AACA;AACA;AACA;AACA;AACA;;;EACE,SAASO,OAAT,CAAiBM,GAAjB,EAAsB7C,IAAtB,EAA4B;IAC1B,iBAAU6C,GAAG,GAAG7C,IAAI,CAACsC,MAAL,CAAY,UAACQ,QAAD,EAAWC,GAAX;MAAA,iBAAsBD,QAAQ,GAAGC,GAAjC;IAAA,CAAZ,EAAqD,EAArD,CAAhB;EACD;AACF,CAhDD;AAkDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASnC,GAAT,CAAaC,IAAb,EAAmBmB,KAAnB,EAA0BgB,KAA1B,EAAiCC,OAAjC,EAA0C;EACxC,IAAMrB,GAAG,GAAGoB,KAAK,GAAG,IAAH,GAAU,GAA3B;EACA,IAAME,KAAK,GAAG,EAAd;EACA,IAAIC,QAAJ;;EAEA,mCAA2B,sBAAenB,KAAf,CAA3B,qCAAkD;IAA7C;IAAA,IAAOoB,GAAP;IAAA,IAAYC,KAAZ;;IACHH,KAAK,CAAC1D,IAAN,WAAc4D,GAAd,gBAAsBjF,MAAM,CAACkF,KAAD,CAA5B;EACD;;EAEDF,QAAQ,cAAOtC,IAAP,SAAcqC,KAAK,CAAC7C,MAAN,cAAmB6C,KAAK,CAACI,IAAN,CAAW,GAAX,CAAnB,IAAuC,EAArD,SAA0D1B,GAA1D,CAAR;;EACA,IAAIqB,OAAJ,EAAa;IACXE,QAAQ,cAAOF,OAAP,eAAmBpC,IAAnB,SAA0Be,GAA1B,CAAR;EACD;;EAED,OAAOuB,QAAP;AACD;AAED;AACA;AACA;AACA;AACA;;;AACA,SAASd,KAAT,CAAekB,GAAf,EAAoB;EAClB,0BAAmBpF,MAAM,CAACoF,GAAD,CAAzB;AACD"}
1
+ {"version":3,"names":["util","require","fs","Base","utils","escape","mkdirp","path","pick","exports","module","XUnit","runner","options","stats","tests","self","reporterOptions","output","createWriteStream","Error","sync","dirname","fileStream","on","test","push","logMethodNames","originalMethods","console","systemErr","systemOut","forEach","methodName","args","callerInfo","stack","split","match","length","callerFile","relative","__dirname","unshift","toUpperCase","write","tag","name","failures","errors","skipped","passes","timestamp","Date","toUTCString","time","duration","t","inherits","prototype","done","fn","end","line","log","testFn","attrs","classname","parent","fullTitle","title","cdata","reduce","reducer","state","err","failureMessage","message","pending","out","innerOut","arg","close","content","pairs","innerTag","key","value","join","str"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// These'll get cleaned up in the xunit PR; for now, they're just here because\n// this file attempted to follow the format of the mocha core xunit reporter\n/* eslint-disable no-console */\n/* eslint-disable no-multi-assign */\n\n/**\n * Module dependencies.\n */\n\nconst util = require('util');\nconst fs = require('fs');\n\nconst Base = require('mocha/lib/reporters/base');\nconst utils = require('mocha/lib/utils');\n\nconst {escape} = utils;\nconst mkdirp = require('mkdirp');\n\nconst path = require('path');\n\nconst {pick} = require('lodash');\n\n/**\n * Expose `XUnit`.\n */\n\nexports = module.exports = XUnit;\n\n/**\n * Initialize a new `XUnit` reporter.\n *\n * @param {Runner} runner\n * @param {Object} options\n * @returns {undefined}\n * @api public\n */\nfunction XUnit(runner, options) {\n Reflect.apply(Base, this, [runner]);\n const {stats} = this;\n const tests = [];\n const self = this;\n\n if (options.reporterOptions && options.reporterOptions.output) {\n if (!fs.createWriteStream) {\n throw new Error('file output not supported in browser');\n }\n mkdirp.sync(path.dirname(options.reporterOptions.output));\n self.fileStream = fs.createWriteStream(options.reporterOptions.output);\n }\n\n runner.on('pending', (test) => {\n tests.push(test);\n });\n\n runner.on('pass', (test) => {\n tests.push(test);\n });\n\n runner.on('fail', (test) => {\n tests.push(test);\n });\n\n const logMethodNames = ['error', 'warn', 'log', 'info', 'debug', 'trace'];\n const originalMethods = pick(console, logMethodNames);\n\n runner.on('test', (test) => {\n test.systemErr = [];\n test.systemOut = [];\n\n logMethodNames.forEach((methodName) => {\n if (!console[methodName]) {\n methodName = 'log';\n }\n\n console[methodName] = (...args) => {\n Reflect.apply(originalMethods[methodName], console, args);\n\n const callerInfo = new Error().stack.split('\\n')[2].match(/\\((.+?):(\\d+):\\d+/);\n\n if (callerInfo && callerInfo.length >= 2) {\n const callerFile = path.relative(__dirname, '..', callerInfo[1]);\n\n args.unshift(`(FILE:${callerFile || 'UNKNOWN'})`);\n args.unshift(`(LINE:${callerInfo[2] || 'UNKNOWN'})`);\n }\n\n if (methodName === 'error') {\n test.systemErr.push(args);\n } else {\n args.unshift(`${methodName.toUpperCase()}:`);\n\n test.systemOut.push(args);\n }\n };\n });\n });\n\n runner.on('test end', () => {\n logMethodNames.forEach((methodName) => {\n console[methodName] = originalMethods[methodName];\n });\n });\n\n runner.on('end', () => {\n self.write('<testsuites>');\n self.write(\n tag(\n 'testsuite',\n {\n name: 'Mocha Tests',\n tests: stats.tests,\n failures: stats.failures,\n errors: stats.failures,\n skipped: stats.tests - stats.failures - stats.passes,\n timestamp: new Date().toUTCString(),\n time: stats.duration / 1000 || 0,\n },\n false\n )\n );\n\n tests.forEach((t) => {\n self.test(t);\n });\n\n self.write('</testsuite>');\n self.write('</testsuites>');\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\nutil.inherits(XUnit, Base);\n\n/**\n * Override done to close the stream (if it's a file).\n *\n * @param {Array} failures\n * @param {Function} fn\n * @returns {undefined}\n */\nXUnit.prototype.done = function done(failures, fn) {\n if (this.fileStream) {\n this.fileStream.end(() => {\n fn(failures);\n });\n } else {\n fn(failures);\n }\n};\n\n/**\n * Write out the given line.\n *\n * @param {string} line\n * @returns {undefined}\n */\nXUnit.prototype.write = function write(line) {\n if (this.fileStream) {\n this.fileStream.write(`${line}\\n`);\n } else {\n console.log(line);\n }\n};\n\n/**\n * Output tag for the given `test.`\n *\n * @param {Test} test\n * @returns {undefined}\n */\nXUnit.prototype.test = function testFn(test) {\n const attrs = {\n classname: test.parent.fullTitle(),\n name: test.title,\n time: test.duration / 1000 || 0,\n };\n\n let systemErr;\n\n if (test.systemErr && test.systemErr.length > 0) {\n systemErr = tag('system-err', {}, false, cdata(test.systemErr.reduce(reducer, '\\n')));\n } else {\n systemErr = '';\n }\n\n let systemOut;\n\n if (test.systemOut && test.systemOut.length > 0) {\n systemOut = tag('system-out', {}, false, cdata(test.systemOut.reduce(reducer, '\\n')));\n } else {\n systemOut = '';\n }\n\n if (test.state === 'failed') {\n const {err} = test;\n const failureMessage = tag('failure', {}, false, cdata(`${escape(err.message)}\\n${err.stack}`));\n\n this.write(tag('testcase', attrs, false, failureMessage + systemOut + systemErr));\n } else if (test.pending) {\n this.write(tag('testcase', attrs, false, tag('skipped', {}, true)));\n } else {\n this.write(tag('testcase', attrs, true));\n }\n\n /**\n * reducer\n * @param {string} out\n * @param {Array<mixed>} args\n * @returns {string}\n * @private\n */\n function reducer(out, args) {\n return `${out + args.reduce((innerOut, arg) => `${innerOut + arg} `, '')}\\n`;\n }\n};\n\n/**\n * HTML tag helper.\n *\n * @param {string} name\n * @param {Object} attrs\n * @param {boolean} close\n * @param {string} content\n * @returns {string}\n */\nfunction tag(name, attrs, close, content) {\n const end = close ? '/>' : '>';\n const pairs = [];\n let innerTag;\n\n for (const [key, value] of Object.entries(attrs)) {\n pairs.push(`${key}=\"${escape(value)}\"`);\n }\n\n innerTag = `<${name}${pairs.length ? ` ${pairs.join(' ')}` : ''}${end}`;\n if (content) {\n innerTag += `${content}</${name}${end}`;\n }\n\n return innerTag;\n}\n\n/**\n * Return cdata escaped CDATA `str`.\n * @param {string} str\n * @returns {string}\n */\nfunction cdata(str) {\n return `<![CDATA[${escape(str)}]]>`;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/xunit-with-logs",
3
- "version": "3.0.0-beta.13",
3
+ "version": "3.0.0-beta.15",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
package/src/index.js CHANGED
@@ -79,10 +79,7 @@ function XUnit(runner, options) {
79
79
  console[methodName] = (...args) => {
80
80
  Reflect.apply(originalMethods[methodName], console, args);
81
81
 
82
- const callerInfo = (new Error())
83
- .stack
84
- .split('\n')[2]
85
- .match(/\((.+?):(\d+):\d+/);
82
+ const callerInfo = new Error().stack.split('\n')[2].match(/\((.+?):(\d+):\d+/);
86
83
 
87
84
  if (callerInfo && callerInfo.length >= 2) {
88
85
  const callerFile = path.relative(__dirname, '..', callerInfo[1]);
@@ -93,8 +90,7 @@ function XUnit(runner, options) {
93
90
 
94
91
  if (methodName === 'error') {
95
92
  test.systemErr.push(args);
96
- }
97
- else {
93
+ } else {
98
94
  args.unshift(`${methodName.toUpperCase()}:`);
99
95
 
100
96
  test.systemOut.push(args);
@@ -111,15 +107,21 @@ function XUnit(runner, options) {
111
107
 
112
108
  runner.on('end', () => {
113
109
  self.write('<testsuites>');
114
- self.write(tag('testsuite', {
115
- name: 'Mocha Tests',
116
- tests: stats.tests,
117
- failures: stats.failures,
118
- errors: stats.failures,
119
- skipped: stats.tests - stats.failures - stats.passes,
120
- timestamp: (new Date()).toUTCString(),
121
- time: stats.duration / 1000 || 0
122
- }, false));
110
+ self.write(
111
+ tag(
112
+ 'testsuite',
113
+ {
114
+ name: 'Mocha Tests',
115
+ tests: stats.tests,
116
+ failures: stats.failures,
117
+ errors: stats.failures,
118
+ skipped: stats.tests - stats.failures - stats.passes,
119
+ timestamp: new Date().toUTCString(),
120
+ time: stats.duration / 1000 || 0,
121
+ },
122
+ false
123
+ )
124
+ );
123
125
 
124
126
  tests.forEach((t) => {
125
127
  self.test(t);
@@ -147,8 +149,7 @@ XUnit.prototype.done = function done(failures, fn) {
147
149
  this.fileStream.end(() => {
148
150
  fn(failures);
149
151
  });
150
- }
151
- else {
152
+ } else {
152
153
  fn(failures);
153
154
  }
154
155
  };
@@ -162,8 +163,7 @@ XUnit.prototype.done = function done(failures, fn) {
162
163
  XUnit.prototype.write = function write(line) {
163
164
  if (this.fileStream) {
164
165
  this.fileStream.write(`${line}\n`);
165
- }
166
- else {
166
+ } else {
167
167
  console.log(line);
168
168
  }
169
169
  };
@@ -178,15 +178,14 @@ XUnit.prototype.test = function testFn(test) {
178
178
  const attrs = {
179
179
  classname: test.parent.fullTitle(),
180
180
  name: test.title,
181
- time: test.duration / 1000 || 0
181
+ time: test.duration / 1000 || 0,
182
182
  };
183
183
 
184
184
  let systemErr;
185
185
 
186
186
  if (test.systemErr && test.systemErr.length > 0) {
187
187
  systemErr = tag('system-err', {}, false, cdata(test.systemErr.reduce(reducer, '\n')));
188
- }
189
- else {
188
+ } else {
190
189
  systemErr = '';
191
190
  }
192
191
 
@@ -194,8 +193,7 @@ XUnit.prototype.test = function testFn(test) {
194
193
 
195
194
  if (test.systemOut && test.systemOut.length > 0) {
196
195
  systemOut = tag('system-out', {}, false, cdata(test.systemOut.reduce(reducer, '\n')));
197
- }
198
- else {
196
+ } else {
199
197
  systemOut = '';
200
198
  }
201
199
 
@@ -204,11 +202,9 @@ XUnit.prototype.test = function testFn(test) {
204
202
  const failureMessage = tag('failure', {}, false, cdata(`${escape(err.message)}\n${err.stack}`));
205
203
 
206
204
  this.write(tag('testcase', attrs, false, failureMessage + systemOut + systemErr));
207
- }
208
- else if (test.pending) {
205
+ } else if (test.pending) {
209
206
  this.write(tag('testcase', attrs, false, tag('skipped', {}, true)));
210
- }
211
- else {
207
+ } else {
212
208
  this.write(tag('testcase', attrs, true));
213
209
  }
214
210