UNPKG

mocha-annotated

Version:
73 lines (65 loc) 1.83 kB
'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** * Replaces any circular references inside `obj` with '[object Object]' * * @private * @param {Object} obj * @return {Object} */ function cleanCycles(obj) { var cache = []; var str = JSON.stringify(obj, function (key, value) { if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null) { if (cache.indexOf(value) !== -1) { // Instead of going in a circle, we'll set it to null return null; } cache.push(value); } return value; }); return JSON.parse(str); } exports.cleanCycles = cleanCycles; /** * Transform an Error object into a JSON object. * * @private * @param {Error} err * @return {Object} */ function errorJSON(err) { var res = {}; Object.getOwnPropertyNames(err).forEach(function (key) { res[key] = err[key]; }, err); return res; } exports.errorJSON = errorJSON; /** * Return a plain-object representation of `test` * free of cyclic properties etc. * * @api private * @param {AnnotatedTest|Test} test * @return {Object} */ function clean(test) { var result = { title: test.title, task: test.task, feedback: test.feedback, fullTitle: test.fullTitle(), duration: test.duration, currentRetry: test.currentRetry() }; if (test.err != null) { result.err = cleanCycles(test.err instanceof Error ? errorJSON(test.err) : test.err); if (test.annotated && result.feedback == null) { result.feedback = result.err.message; } } return result; } exports.clean = clean;