55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
/**
|
|
* A simple test runner for the browser to run the subset of the Node.s test
|
|
* runner used by the project.
|
|
*/
|
|
|
|
export default function assert(condition) {
|
|
if (!condition) {
|
|
throw new Error("Assertion failed");
|
|
}
|
|
}
|
|
|
|
assert.equal = (actual, expected) => {
|
|
if (Number.isNaN(actual) && Number.isNaN(expected)) {
|
|
return;
|
|
} else if (actual == expected) {
|
|
return;
|
|
} else {
|
|
throw new Error(`Expected ${expected} but got ${actual}`);
|
|
}
|
|
};
|
|
|
|
// This is a simplified deepEqual test that examines the conditions we care
|
|
// about. For reference, the actual Node assert.deepEqual is much more complex:
|
|
// see https://github.com/nodejs/node/blob/main/lib/internal/util/comparisons.js
|
|
assert.deepEqual = (actual, expected) => {
|
|
if (actual === expected) {
|
|
return;
|
|
} else if (
|
|
typeof actual === "object" &&
|
|
actual != null &&
|
|
typeof expected === "object" &&
|
|
expected != null &&
|
|
Object.keys(actual).length === Object.keys(expected).length
|
|
) {
|
|
for (const prop in actual) {
|
|
if (!expected.hasOwnProperty(prop)) {
|
|
break;
|
|
}
|
|
assert.deepEqual(actual[prop], expected[prop]);
|
|
}
|
|
return;
|
|
}
|
|
|
|
throw new Error(`Expected ${expected} but got ${actual}`);
|
|
};
|
|
|
|
assert.rejects = async (promise) => {
|
|
try {
|
|
await promise;
|
|
throw new Error("Expected promise to reject but it resolved");
|
|
} catch (error) {
|
|
return;
|
|
}
|
|
};
|