logo

tape-lite

tape shim based on node:test+node:assert with no dependencies git clone https://anongit.hacktivis.me/git/tape-lite.git/
commit: b98b400ab7874bc2ae7eb9dce0e0580fcaeba176
parent 48cb1951146d12eba4652559f3b2db0f752bff09
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sun, 21 Sep 2025 06:44:32 +0200

Create tape context instead of overwriting node:test

Fixes running tape-lite on NodeJS v22.13.1

Diffstat:

Mindex.js269+++++++++++++++++++++++++++++++++++++++++--------------------------------------
1 file changed, 140 insertions(+), 129 deletions(-)

diff --git a/index.js b/index.js @@ -3,152 +3,161 @@ 'use strict'; -const test = require('node:test'); +const test = require('node:test'); +const assert = require('node:assert/strict'); function notOk(value, msg) { return assert.ok(!value, msg); }; +// TODO: Handle message +function _error(err, msg) { return assert.ifError(err); }; + var onFailure = []; -// test([name], [opts], cb) -module.exports = function(name, opts, cb) { - function setup_cb(t) - { - const assert = require('node:assert/strict'); - - // t.plan(n) - t.plan = (n) => console.log("t.plan called with:", n); - - // t.end(err) - t.end = (err) => console.log("t.end called with:", err); - - // t.teardown(cb) → after([fn][, options]) - t.teardown = test.after; - - // t.fail(msg) - t.fail = assert.fail; - - // t.pass(msg) → context.skip([message]) - // technically not the same thing but close enough - t.pass = t.skip; - - // t.timeoutAfter(ms) - - // t.skip(msg) → context.skip([message]) - - // t.ok(value, msg) → assert.ok(value[, message]) - // Aliases: t.true(), t.assert() - t.ok = assert.ok; - t.true = t.ok; - t.assert = t.ok; - - // t.notOk(value, msg) → assert.ok(!value[, message]) - // Aliases: t.false(), t.notok() - t.notOk = notOk; - t.false = t.notOk; - t.notok = t.notOk; - - // t.error(err, msg) → assert.ifError(value) - // Aliases: t.ifError(), t.ifErr(), t.iferror() - t.error = (err, msg) => assert.ifError(err); - t.ifError = t.error; - t.ifErr = t.error; - t.iferror = t.error; - - // t.equal(actual, expected, msg) → assert.equal(actual, expected[, message]) - // Aliases: t.equals(), t.isEqual(), t.strictEqual(), t.strictEquals(), t.is() - t.equal = assert.strictEqual; - t.equals = t.equal; - t.isEqual = t.equal; - t.strictEqual = t.equal; - t.strictEquals = t.equal; - t.is = t.equal; - - // t.notEqual(actual, expected, msg) → assert.notStrictEqual(actual, expected[, message]) - // Aliases: t.notEquals(), t.isNotEqual(), t.doesNotEqual(), t.isInequal(), t.notStrictEqual(), t.notStrictEquals(), t.isNot(), t.not() - t.notEqual = assert.notStrictEqual; - t.notEquals = t.notEqual; - t.doesNotEqual = t.notEqual; - t.isInequal = t.notEqual; - t.notStrictEqual = t.notEqual; - t.notStrictEquals = t.notEqual; - t.isNot = t.notEqual; - t.not = t.notEqual; - - // t.looseEqual(actual, expected, msg) → assert.Equal(actual, expected[, message]) - // Aliases: t.looseEquals() - t.looseEqual = assert.Equal; - t.looseEquals = t.looseEqual; - - // t.notLooseEqual(actual, expected, msg) → assert.notEqual(actual, expected[, message]) - // Aliases: t.notLooseEquals() - t.notLooseEqual = assert.notEqual; - t.notLooseEquals = t.notLooseEqual; - - // t.deepEqual(actual, expected, msg) → assert.deepStrictEqual(actual, expected[, message]) - // Aliases: t.deepEquals(), t.isEquivalent(), t.same() - t.deepEqual = assert.deepStrictEqual; - t.deepEquals = t.deepEqual; - t.isEquivalent = t.deepEqual; - t.same = t.deepEqual; - - // t.notDeepEqual(actual, expected, msg) → assert.notDeepStrictEqual(actual, expected[, message]) - // Aliases: t.notDeepEquals, t.notEquivalent(), t.notDeeply(), t.notSame(), t.isNotDeepEqual(), t.isNotDeeply(), t.isNotEquivalent(), t.isInequivalent() - t.notDeepEqual = assert.notDeepStrictEqual; - t.notDeepEquals = t.notDeepEqual; - t.notEquivalent = t.notDeepEqual; - t.notDeeply = t.notDeepEqual; - t.notSame = t.notDeepEqual; - t.isNotDeepEqual = t.notDeepEqual; - t.isNotDeeply = t.notDeepEqual; - t.isNotEquivalent = t.notDeepEqual; - t.isInequivalent = t.notDeepEqual; - - // t.deepLooseEqual(actual, expected, msg) → assert.deepEqual(actual, expected[, message]) - t.deepLooseEqual = assert.deepEqual; - - // t.notDeepLooseEqual(actual, expected, msg) → assert.notDeepEqual(actual, expected[, message]) - // Aliases: t.notLooseEqual(), t.notLooseEquals() - t.notDeepLooseEqual = assert.notDeepEqual; - t.notLooseEqual = t.notDeepLooseEqual; - t.notLooseEquals = t.notDeepLooseEqual; - - // t.throws(fn, expected, msg) → assert.throws(fn[, error][, message]) - t.throws = assert.throws; - - // t.doesNotThrow(fn, expected, msg) - - // t.test(name, [opts], cb) - - // t.comment(message) - t.comment = (msg) => console.log("t.comment called with:", msg); - - // t.match(string, regexp, message) → assert.match(string, regexp[, message]) - t.match = assert.match; - - // t.doesNotMatch(string, regexp, message) → assert.doesNotMatch(string, regexp[, message]) - t.doesNotMatch = assert.doesNotMatch; - - // npm:tap compatibility - t.strictSame = t.same; - }; +var tape_t = { + // t.plan(n) + "plan" : (n) => console.log("t.plan called with:", n), + + // t.end(err) + "end" : (err) => console.log("t.end called with:", err), + + // t.teardown(cb) → after([fn][, options]) + "teardown" : test.after, + + // t.fail(msg) + "fail" : assert.fail, + + // t.ok(value, msg) → assert.ok(value[, message]) + // Aliases: t.true(), t.assert() + "ok": assert.ok, + "true": assert.ok, + "assert": assert.ok, + + // t.notOk(value, msg) → assert.ok(!value[, message]) + // Aliases: t.false(), t.notok() + "notOk": notOk, + "false": notOk, + "notok": notOk, + + // t.error(err, msg) → assert.ifError(value) + // Aliases: t.ifError(), t.ifErr(), t.iferror() + "error": _error, + "ifError": _error, + "ifErr": _error, + "iferror": _error, + + // t.equal(actual, expected, msg) → assert.equal(actual, expected[, message]) + // Aliases: t.equals(), t.isEqual(), t.strictEqual(), t.strictEquals(), t.is() + "equal": assert.strictEqual, + "equals": assert.strictEqual, + "isEqual": assert.strictEqual, + "strictEqual": assert.strictEqual, + "strictEquals": assert.strictEqual, + "is": assert.strictEqual, + + // t.notEqual(actual, expected, msg) → assert.notStrictEqual(actual, expected[, message]) + // Aliases: t.notEquals(), t.isNotEqual(), t.doesNotEqual(), t.isInequal(), t.notStrictEqual(), t.notStrictEquals(), t.isNot(), t.not() + "notEqual": assert.notStrictEqual, + "notEquals": assert.notStrictEqual, + "doesNotEqual": assert.notStrictEqual, + "isInequal": assert.notStrictEqual, + "notStrictEqual": assert.notStrictEqual, + "notStrictEquals": assert.notStrictEqual, + "isNot": assert.notStrictEqual, + "not": assert.notStrictEqual, + + // t.looseEqual(actual, expected, msg) → assert.Equal(actual, expected[, message]) + // Aliases: t.looseEquals() + looseEqual: assert.Equal, + looseEquals: assert.Equal, + + // t.notLooseEqual(actual, expected, msg) → assert.notEqual(actual, expected[, message]) + // Aliases: t.notLooseEquals() + notLooseEqual: assert.notEqual, + notLooseEquals: assert.notEqual, + + // t.deepEqual(actual, expected, msg) → assert.deepStrictEqual(actual, expected[, message]) + // Aliases: t.deepEquals(), t.isEquivalent(), t.same() + deepEqual: assert.deepStrictEqual, + deepEquals: assert.deepStrictEqual, + isEquivalent: assert.deepStrictEqual, + same: assert.deepStrictEqual, + + // t.notDeepEqual(actual, expected, msg) → assert.notDeepStrictEqual(actual, expected[, message]) + // Aliases: t.notDeepEquals, t.notEquivalent(), t.notDeeply(), t.notSame(), t.isNotDeepEqual(), t.isNotDeeply(), t.isNotEquivalent(), t.isInequivalent() + notDeepEqual: assert.notDeepStrictEqual, + notDeepEquals: assert.notDeepStrictEqual, + notEquivalent: assert.notDeepStrictEqual, + notDeeply: assert.notDeepStrictEqual, + notSame: assert.notDeepStrictEqual, + isNotDeepEqual: assert.notDeepStrictEqual, + isNotDeeply: assert.notDeepStrictEqual, + isNotEquivalent: assert.notDeepStrictEqual, + isInequivalent: assert.notDeepStrictEqual, + + // t.deepLooseEqual(actual, expected, msg) → assert.deepEqual(actual, expected[, message]) + deepLooseEqual: assert.deepEqual, + + // t.notDeepLooseEqual(actual, expected, msg) → assert.notDeepEqual(actual, expected[, message]) + // Aliases: t.notLooseEqual(), t.notLooseEquals() + notDeepLooseEqual: assert.notDeepEqual, + notLooseEqual: assert.notDeepEqual, + notLooseEquals: assert.notDeepEqual, + + // t.comment(message) + comment: (msg) => console.log("t.comment called with:", msg), + + // t.match(string, regexp, message) → assert.match(string, regexp[, message]) + "match" : assert.match, + + // t.doesNotMatch(string, regexp, message) → assert.doesNotMatch(string, regexp[, message]) + doesNotMatch: assert.doesNotMatch, + + // npm:tap compatibility + strictSame: assert.deepStrictEqual, + + // clang-format off + // t.throws(fn, expected, msg) → assert.throws(fn[, error][, message]) + "throws": assert.throws, + // clang-format on + + // t.doesNotThrow(fn, expected, msg) +}; + +function setup_context(node_t) +{ + var t = tape_t; + // t.pass(msg) → context.skip([message]) + // technically not the same thing but close enough + //"pass": t.skip, + t.pass = node_t.skip; + + // t.skip(msg) → context.skip([message]) + t.pass = node_t.skip; + // t.timeoutAfter(ms) + + return t; +}; + +// test([name], [opts], cb) +tape_t.test = function(name, opts, cb) { switch(arguments.length) { case 1: - test((t) => { - setup_cb(t); + test((node_t) => { + var t = setup_context(node_t); arguments[0](t) }); break; case 2: - test(arguments[0], (t) => { - setup_cb(t); + test(arguments[0], (node_t) => { + var t = setup_context(node_t); arguments[1](t) }); break; case 3: - test(arguments[0], arguments[1], (t) => { - setup_cb(t); + test(arguments[0], arguments[1], (node_t) => { + var t = setup_context(node_t); arguments[2](t) }); break; @@ -157,6 +166,8 @@ module.exports = function(name, opts, cb) { } }; +module.exports = tape_t.test; + // test.skip([name], [opts], cb) // test.onFinish(fn)