logo

tape-lite

tape shim based on node:test+node:assert with no dependencies git clone https://anongit.hacktivis.me/git/tape-lite.git/

index.js (5392B)


  1. // SPDX-FileCopyrightText: 2023 Haelwenn (lanodan) Monnier <contact+tape-lite@hacktivis.me>
  2. // SPDX-License-Identifier: MIT
  3. 'use strict';
  4. const test = require('node:test');
  5. const assert = require('node:assert/strict');
  6. function notOk(value, msg) { return assert.ok(!value, msg); };
  7. // TODO: Handle message
  8. function _error(err, msg) { return assert.ifError(err); };
  9. var onFailure = [];
  10. var tape_t = {
  11. // t.plan(n)
  12. "plan" : (n) => console.log("t.plan called with:", n),
  13. // t.end(err)
  14. "end" : (err) => console.log("t.end called with:", err),
  15. // t.teardown(cb) → after([fn][, options])
  16. "teardown" : test.after,
  17. // t.fail(msg)
  18. "fail" : assert.fail,
  19. // t.ok(value, msg) → assert.ok(value[, message])
  20. // Aliases: t.true(), t.assert()
  21. "ok": assert.ok,
  22. "true": assert.ok,
  23. "assert": assert.ok,
  24. // t.notOk(value, msg) → assert.ok(!value[, message])
  25. // Aliases: t.false(), t.notok()
  26. "notOk": notOk,
  27. "false": notOk,
  28. "notok": notOk,
  29. // t.error(err, msg) → assert.ifError(value)
  30. // Aliases: t.ifError(), t.ifErr(), t.iferror()
  31. "error": _error,
  32. "ifError": _error,
  33. "ifErr": _error,
  34. "iferror": _error,
  35. // t.equal(actual, expected, msg) → assert.equal(actual, expected[, message])
  36. // Aliases: t.equals(), t.isEqual(), t.strictEqual(), t.strictEquals(), t.is()
  37. "equal": assert.strictEqual,
  38. "equals": assert.strictEqual,
  39. "isEqual": assert.strictEqual,
  40. "strictEqual": assert.strictEqual,
  41. "strictEquals": assert.strictEqual,
  42. "is": assert.strictEqual,
  43. // t.notEqual(actual, expected, msg) → assert.notStrictEqual(actual, expected[, message])
  44. // Aliases: t.notEquals(), t.isNotEqual(), t.doesNotEqual(), t.isInequal(), t.notStrictEqual(), t.notStrictEquals(), t.isNot(), t.not()
  45. "notEqual": assert.notStrictEqual,
  46. "notEquals": assert.notStrictEqual,
  47. "doesNotEqual": assert.notStrictEqual,
  48. "isInequal": assert.notStrictEqual,
  49. "notStrictEqual": assert.notStrictEqual,
  50. "notStrictEquals": assert.notStrictEqual,
  51. "isNot": assert.notStrictEqual,
  52. "not": assert.notStrictEqual,
  53. // t.looseEqual(actual, expected, msg) → assert.Equal(actual, expected[, message])
  54. // Aliases: t.looseEquals()
  55. looseEqual: assert.Equal,
  56. looseEquals: assert.Equal,
  57. // t.notLooseEqual(actual, expected, msg) → assert.notEqual(actual, expected[, message])
  58. // Aliases: t.notLooseEquals()
  59. notLooseEqual: assert.notEqual,
  60. notLooseEquals: assert.notEqual,
  61. // t.deepEqual(actual, expected, msg) → assert.deepStrictEqual(actual, expected[, message])
  62. // Aliases: t.deepEquals(), t.isEquivalent(), t.same()
  63. deepEqual: assert.deepStrictEqual,
  64. deepEquals: assert.deepStrictEqual,
  65. isEquivalent: assert.deepStrictEqual,
  66. same: assert.deepStrictEqual,
  67. // t.notDeepEqual(actual, expected, msg) → assert.notDeepStrictEqual(actual, expected[, message])
  68. // Aliases: t.notDeepEquals, t.notEquivalent(), t.notDeeply(), t.notSame(), t.isNotDeepEqual(), t.isNotDeeply(), t.isNotEquivalent(), t.isInequivalent()
  69. notDeepEqual: assert.notDeepStrictEqual,
  70. notDeepEquals: assert.notDeepStrictEqual,
  71. notEquivalent: assert.notDeepStrictEqual,
  72. notDeeply: assert.notDeepStrictEqual,
  73. notSame: assert.notDeepStrictEqual,
  74. isNotDeepEqual: assert.notDeepStrictEqual,
  75. isNotDeeply: assert.notDeepStrictEqual,
  76. isNotEquivalent: assert.notDeepStrictEqual,
  77. isInequivalent: assert.notDeepStrictEqual,
  78. // t.deepLooseEqual(actual, expected, msg) → assert.deepEqual(actual, expected[, message])
  79. deepLooseEqual: assert.deepEqual,
  80. // t.notDeepLooseEqual(actual, expected, msg) → assert.notDeepEqual(actual, expected[, message])
  81. // Aliases: t.notLooseEqual(), t.notLooseEquals()
  82. notDeepLooseEqual: assert.notDeepEqual,
  83. notLooseEqual: assert.notDeepEqual,
  84. notLooseEquals: assert.notDeepEqual,
  85. // t.comment(message)
  86. comment: (msg) => console.log("t.comment called with:", msg),
  87. // t.match(string, regexp, message) → assert.match(string, regexp[, message])
  88. "match" : assert.match,
  89. // t.doesNotMatch(string, regexp, message) → assert.doesNotMatch(string, regexp[, message])
  90. doesNotMatch: assert.doesNotMatch,
  91. // npm:tap compatibility
  92. strictSame: assert.deepStrictEqual,
  93. // clang-format off
  94. // t.throws(fn, expected, msg) → assert.throws(fn[, error][, message])
  95. "throws": assert.throws,
  96. // clang-format on
  97. // t.doesNotThrow(fn, expected, msg)
  98. };
  99. function setup_context(node_t)
  100. {
  101. var t = tape_t;
  102. // t.pass(msg) → context.skip([message])
  103. // technically not the same thing but close enough
  104. //"pass": t.skip,
  105. t.pass = node_t.skip;
  106. // t.skip(msg) → context.skip([message])
  107. t.pass = node_t.skip;
  108. // t.timeoutAfter(ms)
  109. return t;
  110. };
  111. // test([name], [opts], cb)
  112. tape_t.test = function(name, opts, cb) {
  113. switch(arguments.length)
  114. {
  115. case 1:
  116. test((node_t) => {
  117. var t = setup_context(node_t);
  118. arguments[0](t)
  119. });
  120. break;
  121. case 2:
  122. test(arguments[0], (node_t) => {
  123. var t = setup_context(node_t);
  124. arguments[1](t)
  125. });
  126. break;
  127. case 3:
  128. test(arguments[0], arguments[1], (node_t) => {
  129. var t = setup_context(node_t);
  130. arguments[2](t)
  131. });
  132. break;
  133. default:
  134. abort();
  135. }
  136. };
  137. module.exports = tape_t.test;
  138. // test.skip([name], [opts], cb)
  139. // test.onFinish(fn)
  140. module.exports.onFinish = test.after;
  141. // test.onFailure(fn)
  142. module.exports.onFailure = (fn) => {
  143. onFailure.push(fn);
  144. // TODO: Call each on event:fail
  145. };
  146. // var htest = test.createHarness()
  147. // test.only([name], [opts], cb)
  148. // var stream = test.createStream(opts)