From 1e03ea78b2fab14af89cfb7bd43ed9f384e513c6 Mon Sep 17 00:00:00 2001 From: rowan Date: Wed, 26 Mar 2025 20:52:02 -0500 Subject: [PATCH] add object handling for assertEq --- src/index.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index d98713b..d9910f0 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,19 @@ export class AssertionError extends Error { } } +/** + * @template T + * @param {T} obj + * @returns {obj is Exclude} + */ +function isObject(obj) { + return ( + obj !== null && + typeof obj === 'object' && + [null, Object.prototype].includes(Object.getPrototypeOf(obj)) + ) +} + export const assert = (value, message = `assertion error: ${value} is not true`) => { assertEq(value, true, message) } @@ -11,10 +24,10 @@ export const assert = (value, message = `assertion error: ${value} is not true`) export const assertEq = (a, b, message = `assertion error: ${a} !== ${b}`) => { if (a === b) { return - } - else if (Array.isArray(b) && a.length === b.length) { - b.forEach((n, i) => assertEq(a[i], n)) - return + } else if (Array.isArray(b) && a.length === b.length) { + b.forEach((n, i) => assertEq(a[i], n, message)) + } else if (isObject(b) && isObject(a)) { + assertEq(JSON.stringify(a), JSON.stringify(b), message) } else { throw new AssertionError(message) }