UNPKG

@zoroaster/assert

Version:

The Assertion Library For Zoroaster Context Testing Framework Including Deep Equal & Assert Throws.

311 lines (308 loc) 9.42 kB
#!/usr/bin/env node 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