@zoroaster/assert
Version:
The Assertion Library For Zoroaster Context Testing Framework Including Deep Equal & Assert Throws.
311 lines (308 loc) • 9.42 kB
JavaScript
const assert = require('assert');
const os = require('os');
const r = assert.deepStrictEqual;
/*
diff package https://github.com/kpdecker/jsdiff
BSD License
Copyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com>
*/
function t(a, b, e) {
let h = a[a.length - 1];
h && h.f === b && h.h === e ? a[a.length - 1] = {count:h.count + 1, f:b, h:e} : a.push({count:1, f:b, h:e});
}
function u(a, b, e, h, f) {
let k = e.length, d = h.length, c = b.a;
f = c - f;
let g = 0;
for (; c + 1 < k && f + 1 < d && a.equals(e[c + 1], h[f + 1]);) {
c++, f++, g++;
}
g && b.g.push({count:g});
b.a = c;
return f;
}
function v(a) {
let b = [];
for (let e = 0; e < a.length; e++) {
a[e] && b.push(a[e]);
}
return b;
}
function w(a, b) {
var e = new x;
a = v(a.split(""));
b = v(b.split(""));
let h = b.length, f = a.length, k = 1, d = h + f, c = [{a:-1, g:[]}];
var g = u(e, c[0], b, a, 0);
if (c[0].a + 1 >= h && g + 1 >= f) {
return [{value:e.join(b), count:b.length}];
}
for (; k <= d;) {
a: {
for (g = -1 * k; g <= k; g += 2) {
var l = void 0;
l = c[g - 1];
let m = c[g + 1];
var n = (m ? m.a : 0) - g;
l && (c[g - 1] = void 0);
let q = l && l.a + 1 < h;
n = m && 0 <= n && n < f;
if (q || n) {
!q || n && l.a < m.a ? (l = {a:m.a, g:m.g.slice(0)}, t(l.g, void 0, !0)) : (l.a++, t(l.g, !0, void 0));
n = u(e, l, b, a, g);
if (l.a + 1 >= h && n + 1 >= f) {
g = z(e, l.g, b, a);
break a;
}
c[g] = l;
} else {
c[g] = void 0;
}
}
k++;
g = void 0;
}
if (g) {
return g;
}
}
}
class x {
equals(a, b) {
return a === b;
}
join(a) {
return a.join("");
}
}
function z(a, b, e, h) {
let f = 0, k = b.length, d = 0, c = 0;
for (; f < k; f++) {
var g = b[f];
if (g.h) {
g.value = a.join(h.slice(c, c + g.count)), c += g.count, f && b[f - 1].f && (g = b[f - 1], b[f - 1] = b[f], b[f] = g);
} else {
if (g.f) {
g.value = a.join(e.slice(d, d + g.count));
} else {
let l = e.slice(d, d + g.count);
l = l.map(function(n, m) {
m = h[c + m];
return m.length > n.length ? m : n;
});
g.value = a.join(l);
}
d += g.count;
g.f || (c += g.count);
}
}
e = b[k - 1];
1 < k && "string" === typeof e.value && (e.f || e.h) && a.equals("", e.value) && (b[k - 2].value += e.value, b.pop());
return b;
}
;const A = {black:30, red:31, green:32, yellow:33, blue:34, magenta:35, cyan:36, white:37, grey:90}, B = {black:40, red:41, green:42, yellow:43, blue:44, magenta:45, cyan:46, white:47}, C = {reset:0, bold:1, underline:4, slow_blink:5, i:6, reverse:7, conceal:8, crossed_out:9, primary_font:10}, D = a => {
Array.isArray(a) && (a = a.join(";"));
return `\x1b[${a}m`;
};
function F(a, b) {
b = [A[b], ...Object.keys({}).map(e => C[e.toLowerCase()])].filter(Boolean);
return b.length ? `${D(b)}${a}${D(C.reset)}` : a;
}
function G(a) {
a = [B[a], ...Object.keys({}).map(b => C[b])].filter(Boolean);
return a.length ? `${D(a)}${" "}${D(C.reset)}` : " ";
}
function H(a, b) {
return w(a, b).map(({f:e, h, value:f}) => {
let k;
const d = f.split(" ");
if (e || h) {
k = d.map(c => c.replace(/(\r?\n)$/mg, "\u23ce$1").replace(/(\r+)([^\n]|$)/g, (g, l, n) => "<CR>".repeat(l.length) + n));
}
e ? k = k.map(c => F(c, "green")).join(G("green")) : h ? k = k.map(c => F(c, "red")).join(G("red")) : k = F(f, "grey");
return k;
}).join("");
}
;const I = (...a) => {
let b = -1;
return "%s%s".replace(/%s/g, () => {
b++;
return a[b];
});
};
function J(a, b) {
let e = 0;
const h = (d, c) => {
const g = " ".repeat(2 * e);
c = void 0 !== c ? F("+ " + K(c), "green") : null;
d = void 0 !== d ? F("- " + K(d), "red") : null;
const l = [];
d && l.push(I(g, d));
c && l.push(I(g, c));
return l.join("\n");
}, f = d => {
const c = " ".repeat(2 * e);
return I(c, d);
}, k = (d, c) => {
if (d instanceof Date && c instanceof Date) {
var g = d.getTime() != c.getTime() ? !1 : void 0;
return g ? "" : h(d, c);
}
if (d instanceof Date && !(c instanceof Date) || !(d instanceof Date) && c instanceof Date || Array.isArray(d) && !Array.isArray(c) || !Array.isArray(d) && Array.isArray(c)) {
return h(d, c);
}
if (L(d) && L(c) || !L(d) && L(c) || L(d) && !L(c)) {
return d != c ? h(d, c) : "";
}
if (d.constructor && !c.constructor) {
return h(d.constructor.name, c);
}
if (!d.constructor && c.constructor) {
return h(d, c.constructor.name);
}
if (d.constructor && c.constructor) {
if (d.constructor.name != c.constructor.name) {
return h(d.constructor.name, c.constructor.name);
}
g = d.valueOf();
var l = c.valueOf();
if (L(g) && L(l) && g != l) {
return h(g, l);
}
}
if (Array.isArray(d) && Array.isArray(c)) {
let n;
g = d.map((m, q) => {
n = q;
(m = k(m, c[q])) && (m = `${f(`[${q}]`)}\n${m}`);
return m;
}).filter(Boolean);
l = c.slice(n + 1).map((m, q) => `${f(`[${n + q + 1}]`)}\n${h(void 0, m)}`);
return [...g, ...l].join("\n");
}
if ("object" == typeof d && "object" == typeof c) {
const n = [], m = [], q = [];
Object.keys(d).forEach(p => {
p in c ? q.push(p) : m.push(p);
});
Object.keys(c).forEach(p => {
p in d || n.push(p);
});
g = m.map(p => h(`${p}${`: ${K(d[p])}`}`));
l = n.map(p => h(void 0, `${p}: ${K(c[p])}`));
const P = q.map(p => {
e++;
const E = k(d[p], c[p]);
let y = "";
E && (y += f(Array.isArray(d[p]) && Array.isArray(c[p]) ? `${p}.Array` : p), y += "\n" + E);
e--;
return y;
}).filter(Boolean);
return [...g, ...l, ...P].join("\n");
}
console.error("Could not compare two values: %s %s. Please file a bug with differently.", d, c);
};
return k(a, b);
}
const L = a => null === a ? !0 : "string number boolean symbol null undefined".split(" ").includes(typeof a), K = a => Array.isArray(a) ? `Array[${a.toString()}]` : a && a.toString ? a.toString() : `${a}`;
const M = os.EOL, N = os.homedir;
const O = (a, b = 0, e = !1) => {
if (0 === b && !e) {
return a;
}
a = a.split("\n", e ? b + 1 : void 0);
return e ? a[a.length - 1] : a.slice(b).join("\n");
}, Q = (a, b = !1) => O(a, 2 + (b ? 1 : 0)), R = a => {
({callee:{caller:a}} = a);
return a;
};
const S = /\s+at.*(?:\(|\s)(.*)\)?/, T = /^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:IGNORED_MODULES)\/.*)?\w+)\.js:\d+:\d+)|native)/, U = a => {
const {pretty:b = !1, ignoredModules:e = ["pirates", "@artdeco/pirates"]} = {}, h = new RegExp(T.source.replace("IGNORED_MODULES", e.join("|")));
return a.replace(/\\/g, "/").split(/\r?\n/).filter(f => {
f = f.match(S);
if (null === f || !f[1]) {
return !0;
}
f = f[1];
return f.includes(".app/Contents/Resources/electron.asar") || f.includes(".app/Contents/Resources/default_app.asar") ? !1 : !h.test(f);
}).filter(f => f.trim()).map(f => {
if (b) {
const k = N().replace(/\\/g, "/");
return f.replace(/\s+at.*(?:\(|\s)(.*)\)?/, (d, c) => d.replace(c, c.replace(k, "~")));
}
return f;
}).join(M);
};
function V(a, b, e = !1) {
return function(h) {
var f = R(arguments), {stack:k} = Error();
const d = O(k, 2, !0), c = (k = h instanceof Error) ? h.message : h;
f = [`Error: ${c}`, ...null !== f && a === f || e ? [b] : [d, b]].join("\n");
f = U(f);
return Object.assign(k ? h : Error(), {message:c, stack:f});
};
}
;function W(a) {
var {stack:b} = Error();
const e = R(arguments);
b = Q(b, a);
return V(e, b, a);
}
;const X = async(a, b) => {
await b(a);
}, Y = async(a, b) => {
if (b instanceof RegExp) {
if (!b.test(a)) {
throw Error(`${a} does not match regular expression ${b}`);
}
} else {
if ("function" == typeof b) {
await X(a, b);
} else {
if (b && a != b) {
const e = H(`${a}`, `${b}`);
throw Error(`${e}${M}${`${a} != ${b}`}`);
}
}
}
}, Z = async(a, b, e, h, f) => {
const k = Error();
try {
throw b ? await a.call(b, ...e) : await a(...e), k;
} catch (d) {
if (d === k) {
throw Error(`Function ${a.name && "fn" !== a.name ? `${a.name} ` : ""}should have thrown.`);
}
if (h && h !== d) {
throw Error(`${d} is not strict equal to ${h}.`);
}
await Object.keys(f).reduce(async(c, g) => {
await c;
await Y(d[g], f[g]);
}, {});
return d;
}
};
module.exports = {_deepEqual:function(a, b, e) {
try {
r(a, b, e);
} catch (h) {
throw a = J(b, a), h.message = ["deepStrictEqual failed:", a].filter(Boolean).join(M), h;
}
}, _throws:async function(a) {
if (!a) {
throw Error("Config expected.");
}
const b = W(!0), {fn:e, args:h = [], context:f, error:k, ...d} = a;
if ("function" != typeof e) {
throw Error("Function expected.");
}
a = Array.isArray(h) ? h : [h];
try {
return await Z(e, f, a, k, d);
} catch (c) {
throw b(c);
}
}};
//# sourceMappingURL=assert.js.map