All files / Nodejs/lib assert.js

0% Statements 0/36
0% Branches 0/10
0% Functions 0/9
0% Lines 0/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56                                                                                                               
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var ARGUMENT_NAMES = /([^\s,]+)/g;
 
function getParamNames(func) {
	var fnStr = func.toString().replace(STRIP_COMMENTS, '');
	var result = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(ARGUMENT_NAMES);
	if (result === null)
		result = [];
	return result;
}
 
function wrap(obj) {
	let data = [];
	out = (...args) => {
		return out.ok.apply(out, args);
	};
	Object.keys(obj).map(k => {
		let old = obj[k];
		if (typeof old === "function") {
			let functionParams = getParamNames(old)
			out[k] = function(...args) {
				let params = k == "fail" && args.length == 1 ? ["message"] : functionParams;
				let log = {
					passes: false,
					method: k
				};
				args.map((v, i) => {
					log[params[i] || i] = v;
				})
				try {
					let result = old.apply(obj, args);
					log.passes = true;
					data.push(log)
					return result;
				} catch (e) {
					data.push(log);
					throw e;
				}
			}
		} else {
			out[k] = old;
		}
	});
	out.get = () => data;
	out.print = () => {
		console.log(JSON.stringify(data, null, 2));
	};
	out.clear = () => {
		data = [];
		return obj;
	};
	return out;
}
 
module.exports = wrap(require("assert"))