mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-24 06:14:01 +08:00
83 lines
3.2 KiB
JavaScript
83 lines
3.2 KiB
JavaScript
// An empty custom message, as a literal and as a value computed at run
|
|
// time. Node keeps it and reports generatedMessage true for the methods that
|
|
// pass it to the AssertionError constructor, builds the generated message
|
|
// for match, doesNotMatch and the throws regex and class expectations, and
|
|
// reports generatedMessage false for ok, throws with nothing thrown,
|
|
// doesNotThrow, rejects with nothing rejected and doesNotReject. Each line
|
|
// prints the first line of the message.
|
|
import assert, { AssertionError } from "node:assert";
|
|
|
|
const empty = process.argv.length > 99 ? "unused" : "";
|
|
|
|
function report(label, fn) {
|
|
try {
|
|
fn();
|
|
console.log(label, "did not throw");
|
|
} catch (e) {
|
|
if (!(e instanceof AssertionError)) throw e;
|
|
console.log(label, e.generatedMessage, e.operator, JSON.stringify(e.message.split("\n")[0]));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param {string} kind
|
|
* @param {string} message
|
|
*/
|
|
function runAll(kind, message) {
|
|
console.log(`-- ${kind}`);
|
|
report("ok", () => assert.ok(false, message));
|
|
report("assert", () => assert(0, message));
|
|
report("fail", () => assert.fail(message));
|
|
report("equal", () => assert.equal(1, 2, message));
|
|
report("notEqual", () => assert.notEqual(1, 1, message));
|
|
report("strictEqual", () => assert.strictEqual(1, 2, message));
|
|
report("strictEqual strings", () => assert.strictEqual("a", "b", message));
|
|
report("strictEqual booleans", () => assert.strictEqual(true, false, message));
|
|
report("strictEqual bigints", () => assert.strictEqual(1n, 2n, message));
|
|
report("notStrictEqual", () => assert.notStrictEqual(1, 1, message));
|
|
report("notStrictEqual strings", () => assert.notStrictEqual("a", "a", message));
|
|
report("deepStrictEqual", () => assert.deepStrictEqual([1], [2], message));
|
|
report("notDeepStrictEqual", () => assert.notDeepStrictEqual([1], [1], message));
|
|
report("notDeepStrictEqual bytes", () =>
|
|
assert.notDeepStrictEqual(new Uint8Array([1]), new Uint8Array([1]), message),
|
|
);
|
|
report("deepEqual", () => assert.deepEqual({ a: 1 }, { a: 2 }, message));
|
|
report("notDeepEqual", () => assert.notDeepEqual({ a: 1 }, { a: 1 }, message));
|
|
report("partialDeepStrictEqual", () =>
|
|
assert.partialDeepStrictEqual({ a: 1, b: 2 }, { a: 2 }, message),
|
|
);
|
|
report("match", () => assert.match("abc", /x/, message));
|
|
report("doesNotMatch", () => assert.doesNotMatch("abc", /a/, message));
|
|
report("throws none", () => assert.throws(() => {}, message));
|
|
report("throws regex", () =>
|
|
assert.throws(() => {
|
|
throw new Error("e");
|
|
}, /x/, message),
|
|
);
|
|
report("throws class", () =>
|
|
assert.throws(() => {
|
|
throw new TypeError("e");
|
|
}, RangeError, message),
|
|
);
|
|
report("doesNotThrow", () =>
|
|
assert.doesNotThrow(() => {
|
|
throw new Error("e");
|
|
}, message),
|
|
);
|
|
}
|
|
runAll("literal", "");
|
|
runAll("computed", empty);
|
|
|
|
async function reportAsync(label, promise) {
|
|
try {
|
|
await promise;
|
|
console.log(label, "did not reject");
|
|
} catch (e) {
|
|
if (!(e instanceof AssertionError)) throw e;
|
|
console.log(label, e.generatedMessage, e.operator, JSON.stringify(e.message.split("\n")[0]));
|
|
}
|
|
}
|
|
|
|
await reportAsync("rejects none", assert.rejects(Promise.resolve(1), ""));
|
|
await reportAsync("doesNotReject", assert.doesNotReject(Promise.reject(new Error("e")), ""));
|