alsatian
Version:
TypeScript and JavaScript testing framework for beautiful and readable tests
57 lines • 1.62 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const spying_1 = require("../spying");
function stringify(data) {
if (isItearable(data)) {
return stringifyIterable(data);
}
if (data instanceof Function) {
return stringifyFunction(data);
}
return stringifyObject(data);
}
exports.stringify = stringify;
function isItearable(data) {
return data && typeof data[Symbol.iterator] === "function";
}
function stringifyFunction(data) {
if (data === spying_1.Any) {
return "Anything";
}
return data.name || "anonymous function";
}
function stringifyObject(data) {
if (data instanceof spying_1.TypeMatcher) {
return data.stringify();
}
return JSON.stringify(data, createCircularReplacer(data)) || "undefined";
}
function stringifyIterable(data) {
if (data instanceof Array) {
return stringifyArray(data);
}
if (data instanceof Map) {
return `Map<${data.size}>`;
}
return stringifyObject(data);
}
function createCircularReplacer(rootObject) {
const cache = [];
return (key, value) => circularReplacer(key, value, cache, rootObject);
}
function circularReplacer(key, value, cache, rootObject) {
if (typeof value === "function") {
return value.toString();
}
if (typeof value === "object" && value !== null) {
if (cache.indexOf(value) !== -1) {
return;
}
cache.push(value);
}
return value;
}
function stringifyArray(array) {
return `[${array.map(stringify).join(", ")}]`;
}
//# sourceMappingURL=stringify.js.map
;