Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .eslintignore

This file was deleted.

27 changes: 0 additions & 27 deletions .eslintrc.yaml

This file was deleted.

45 changes: 45 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
"use strict";

const sinonConfig = require("@sinonjs/eslint-config");

module.exports = [
{
ignores: [
"eslint.config.js",
"coverage/**",
"dist/**",
"docs/**",
"site/**",
],
},
...sinonConfig,
{
rules: {
"jsdoc/require-returns": "off",
},
},
{
files: ["lib/**/*.test.js"],
rules: {
"mocha/consistent-spacing-between-blocks": "off",
"no-unused-vars": [
"error",
{ vars: "all", args: "after-used", caughtErrors: "none" },
],
},
},
{
files: ["lib/assertions/json.js", "lib/assertions/match-json.js"],
rules: {
"no-unused-vars": "off",
},
},
{
languageOptions: {
globals: {
ArrayBuffer: false,
Uint8Array: false,
},
},
},
];
5 changes: 5 additions & 0 deletions lib/actual-and-expected-message-values.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
"use strict";

/**
* @param {unknown} actual
* @param {unknown} expected
* @param {unknown} message
*/
function actualAndExpectedMessageValues(actual, expected, message) {
return {
actual: actual,
Expand Down
4 changes: 4 additions & 0 deletions lib/actual-and-type-of-message-values.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
"use strict";

/**
* @param {unknown} actual
* @param {unknown} message
*/
function actualAndTypeOfMessageValues(actual, message) {
return {
actual: actual,
Expand Down
4 changes: 4 additions & 0 deletions lib/actual-for-match.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

var toString = require("@sinonjs/commons").prototypes.object.toString;

/**
* @param {unknown} actual
* @param {unknown} match
*/
function actualForMatch(actual, match) {
if (
toString(actual) === "[object Object]" &&
Expand Down
4 changes: 4 additions & 0 deletions lib/actual-message-values.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
"use strict";

/**
* @param {unknown} actual
* @param {unknown} message
*/
function actualMessageValues(actual, message) {
return {
actual: actual,
Expand Down
6 changes: 6 additions & 0 deletions lib/assert-arg-num.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

// Internal helper. Used throughout to fail assertions if they receive
// too few arguments. The name is provided for a helpful error message.
/**
* @param {(message: string) => void} fail
* @param {string} name
* @param {{length: number}} args
* @param {number} num
*/
function assertArgNum(fail, name, args, num) {
if (args.length >= num) {
return true;
Expand Down
3 changes: 3 additions & 0 deletions lib/assertions/has-arity.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

var actualAndExpectedMessageValues = require("../actual-and-expected-message-values");

/**
* @param {{add: (name: string, options: unknown) => void}} referee
*/
function addHasArity(referee) {
referee.add("hasArity", {
assert: function assert(actual, expected) {
Expand Down
3 changes: 3 additions & 0 deletions lib/assertions/is-array-like.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ var isArguments = require("lodash.isarguments");
var actualMessageValues = require("../actual-message-values");

module.exports = function (referee) {
/**
* @param {unknown} object
*/
function isArrayLike(object) {
return (
Array.isArray(object) ||
Expand Down
4 changes: 4 additions & 0 deletions lib/assertions/keys.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
"use strict";

module.exports = function (referee) {
/**
* @param {Record<string, unknown>} object
* @param {string[]} keys
*/
function exactKeys(object, keys) {
var keyMap = {};
var keyCnt = 0;
Expand Down
3 changes: 3 additions & 0 deletions lib/assertions/rejects.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ var assertMessage = "${actual} is not equal to ${expected}";
var refuteMessage = "${actual} is equal to ${expected}";

module.exports = function (referee) {
/**
*
*/
function thenCallback() {
this.reject("${0} did not reject, it resolved instead");
}
Expand Down
3 changes: 3 additions & 0 deletions lib/assertions/resolves.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ var assertMessage = "${actual} is not equal to ${expected}";
var refuteMessage = "${actual} is equal to ${expected}";

module.exports = function (referee) {
/**
*
*/
function catchCallback() {
this.reject("${0} did not resolve, it rejected instead");
}
Expand Down
3 changes: 3 additions & 0 deletions lib/capture-exception.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
"use strict";

/**
* @param {() => unknown} callback
*/
function captureException(callback) {
try {
callback();
Expand Down
25 changes: 25 additions & 0 deletions lib/create-add.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ var defineAssertion = require("./define-assertion");
// taken from https://stackoverflow.com/questions/2008279/validate-a-javascript-function-name/2008444#2008444
var validFunctionName = /^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/;

/**
* @param {string} name
* @param {{
* assert: (...args: unknown[]) => unknown,
* refute?: (...args: unknown[]) => unknown,
* assertMessage?: string | ((...args: unknown[]) => unknown),
* refuteMessage?: string | ((...args: unknown[]) => unknown),
* values?: unknown,
* expectation?: string
* }} options
*/
function verifyArguments(name, options) {
if (typeof name !== "string" || !validFunctionName.test(name)) {
throw new TypeError(
Expand Down Expand Up @@ -64,7 +75,21 @@ function isValidMessageOption(message) {
return false;
}

/**
* @param {object} referee
*/
function createAdd(referee) {
/**
* @param {string} name
* @param {{
* assert: (...args: unknown[]) => unknown,
* refute?: (...args: unknown[]) => unknown,
* assertMessage?: string | ((...args: unknown[]) => unknown),
* refuteMessage?: string | ((...args: unknown[]) => unknown),
* values?: unknown,
* expectation?: string
* }} options
*/
function add(name, options) {
verifyArguments(name, options);

Expand Down
7 changes: 7 additions & 0 deletions lib/create-assert.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@

var assertArgNum = require("./assert-arg-num");

/**
* @param {{emit: (eventName: string, ...args: unknown[]) => void, fail: (message: string) => never}} referee
*/
function createAssert(referee) {
/**
* @param {unknown} actual
* @param {string} message
*/
function assert(actual, message) {
assertArgNum(referee.fail, "assert", arguments, 1);

Expand Down
11 changes: 11 additions & 0 deletions lib/create-async-assertion.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,21 @@

var samsam = require("@sinonjs/samsam");

/**
* @param {(actual: unknown, expected: unknown) => void} thenFunc
* @param {(actual: unknown, expected: unknown) => void} catchFunc
*/
function createAsyncAssertion(thenFunc, catchFunc) {
/**
* @param {Promise<unknown>} promise
*/
function asyncAssertion(promise) {
var self = this;
this.expected = arguments.length === 1 ? samsam.match.any : arguments[1];
/**
* @param {(actual: unknown, expected: unknown) => void} callback
* @param {{reject: (message: unknown) => void, resolve: (value: unknown) => void}} context
*/
function applyCallback(callback, context) {
return function (actual) {
self.actual = actual;
Expand Down
6 changes: 6 additions & 0 deletions lib/create-expect.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

var expectImpl = require("./expect");

/**
* @param {object} referee
*/
function createExpect(referee) {
/**
*
*/
function expect() {
expectImpl.init(referee);
return expectImpl.apply(referee, arguments);
Expand Down
7 changes: 7 additions & 0 deletions lib/create-fail.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
"use strict";

/**
* @param {{emit: (eventName: string, error: unknown) => void, throwOnFailure?: boolean}} referee
*/
function createFail(referee) {
/**
* @param {string} message
* @param {Record<string, unknown>} [errorProperties]
*/
function fail(message, errorProperties) {
var exception = new Error(message);
exception.name = "AssertionError";
Expand Down
10 changes: 8 additions & 2 deletions lib/create-pass.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
"use strict";

/**
* @param {{emit: (...args: unknown[]) => void}} referee
*/
function createPass(referee) {
function pass(message) {
referee.emit.apply(referee, message);
/**
* @param {unknown[]} args
*/
function pass(args) {
referee.emit.apply(referee, args);
}

return pass;
Expand Down
7 changes: 7 additions & 0 deletions lib/create-refute.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@

var assertArgNum = require("./assert-arg-num");

/**
* @param {{emit: (eventName: string, ...args: unknown[]) => void, fail: (message: string) => never}} referee
*/
function createRefute(referee) {
/**
* @param {unknown} actual
* @param {string} message
*/
function refute(actual, message) {
assertArgNum(referee.fail, "refute", arguments, 1);

Expand Down
12 changes: 12 additions & 0 deletions lib/create-verifier.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,28 @@
"use strict";

/**
* @param {{on: (eventName: string, listener: () => void) => void, off: (eventName: string, listener: () => void) => void}} referee
*/
function createVerifier(referee) {
/**
*
*/
function verifier() {
var count = 0;

/**
* @returns {void}
*/
function incrementCount() {
count += 1;
}

referee.on("pass", incrementCount);
referee.on("failure", incrementCount);

/**
* @param {number} expected
*/
function verify(expected) {
referee.off("pass", incrementCount);
referee.off("failure", incrementCount);
Expand Down
1 change: 0 additions & 1 deletion lib/custom-assertions.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ describe("custom assertions", function () {

try {
referee.assert.custom(2, 3);
// eslint-disable-next-line no-empty
} catch (e) {
actualMessage = e.message;
}
Expand Down
14 changes: 13 additions & 1 deletion lib/define-assertion/format.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,24 @@

var inspect = require("util").inspect;

/**
* @param {unknown} object
*/
function format(object) {
if (object instanceof Error) {
return object.name;
}

return inspect(object);
var formatted = inspect(object);

if (object instanceof ArrayBuffer || object instanceof DataView) {
return formatted
.replace(/\[byteLength\]:/g, "byteLength:")
.replace(/\[byteOffset\]:/g, "byteOffset:")
.replace(/\[buffer\]:/g, "buffer:");
}

return formatted;
}

module.exports = format;
Loading
Loading