From 15bca84c6959eb6a96a251417a3e9df248ea3fa8 Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Mon, 5 Feb 2024 12:23:07 -0500 Subject: [PATCH] feat: assertion refactors --- .../src/mousehandlers/IrisGridContextMenuHandler.tsx | 10 ++++------ packages/utils/src/Asserts.test.ts | 6 ++++++ packages/utils/src/Asserts.ts | 4 ++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/iris-grid/src/mousehandlers/IrisGridContextMenuHandler.tsx b/packages/iris-grid/src/mousehandlers/IrisGridContextMenuHandler.tsx index e103ca6f35..48494089ca 100644 --- a/packages/iris-grid/src/mousehandlers/IrisGridContextMenuHandler.tsx +++ b/packages/iris-grid/src/mousehandlers/IrisGridContextMenuHandler.tsx @@ -47,6 +47,7 @@ import type { DebouncedFunc } from 'lodash'; import { TextUtils, assertNotEmpty, + assertNotNaN, assertNotNull, copyToClipboard, } from '@deephaven/utils'; @@ -550,14 +551,11 @@ class IrisGridContextMenuHandler extends GridMouseHandler { while (rowCount > MAX_MULTISELECT_ROWS) { const lastRow = selectedRanges.pop(); // should never occur, sanity check - if (lastRow === undefined) { - throw Error('Selected ranges should not be empty'); - } + assertNotNull(lastRow, 'Selected ranges should not be empty'); + const lastRowSize = GridRange.rowCount([lastRow]); // should never occur, sanity check - if (Number.isNaN(lastRowSize)) { - throw Error('Selected ranges should not be unbounded'); - } + assertNotNaN(lastRowSize, 'Selected ranges should not be unbounded'); // if removing the last rows makes it dip below the max, then need to // bring it back but truncated diff --git a/packages/utils/src/Asserts.test.ts b/packages/utils/src/Asserts.test.ts index 64f30af827..de285fc87b 100644 --- a/packages/utils/src/Asserts.test.ts +++ b/packages/utils/src/Asserts.test.ts @@ -1,6 +1,7 @@ import { assertNever, assertNotEmpty, + assertNotNaN, assertNotNull, getOrThrow, } from './Asserts'; @@ -33,6 +34,11 @@ describe('assertNotEmpty', () => { expect(() => assertNotEmpty([1, 2])).not.toThrowError('Size of value is 0'); }); +describe('assertNotNaN', () => { + expect(() => assertNotNaN(NaN)).toThrowError('Value is NaN'); + expect(() => assertNotNaN(0)).not.toThrowError('Value is NaN'); +}); + describe('getOrThrow', () => { const MAP = new Map([ [5, 10], diff --git a/packages/utils/src/Asserts.ts b/packages/utils/src/Asserts.ts index 4c4bd954c6..2d76f4c320 100644 --- a/packages/utils/src/Asserts.ts +++ b/packages/utils/src/Asserts.ts @@ -47,6 +47,10 @@ export function assertNotEmpty( } } +export function assertNotNaN(value: number, message = 'Value is NaN'): void { + if (Number.isNaN(value)) throw new Error(message); +} + /** * Retrieve a value from a map. If the value is not found and no default value is provided, throw. * Use when the value _must_ be present