utils: Replace assertDefined with assertDefinedAndNotNull

This commit is contained in:
willclarktech 2021-01-13 16:17:56 +00:00
parent 9e2f2d3168
commit 76a3f55350
No known key found for this signature in database
GPG Key ID: 551A86E2E398ADF7
5 changed files with 31 additions and 26 deletions

View File

@ -1,52 +1,54 @@
import { assertDefined } from "./assert";
import { assertDefinedAndNotNull } from "./assert";
describe("assert", () => {
describe("assertDefined", () => {
describe("assertDefinedAndNotNull", () => {
it("passes for simple values", () => {
{
const value: number | undefined = 123;
assertDefined(value);
const value: number | undefined | null = 123;
assertDefinedAndNotNull(value);
expect(value).toEqual(123);
}
{
const value: string | undefined = "abc";
assertDefined(value);
const value: string | undefined | null = "abc";
assertDefinedAndNotNull(value);
expect(value).toEqual("abc");
}
});
it("passes for falsy values", () => {
{
const value: number | undefined = 0;
assertDefined(value);
const value: number | undefined | null = 0;
assertDefinedAndNotNull(value);
expect(value).toEqual(0);
}
{
const value: string | undefined = "";
assertDefined(value);
const value: string | undefined | null = "";
assertDefinedAndNotNull(value);
expect(value).toEqual("");
}
{
const value: null | undefined = null;
assertDefined(value);
expect(value).toEqual(null);
}
});
it("throws for undefined values", () => {
{
const value: number | undefined = undefined;
expect(() => assertDefined(value)).toThrowError("value is undefined");
const value: number | undefined | null = undefined;
expect(() => assertDefinedAndNotNull(value)).toThrowError("value is undefined or null");
}
{
let value: string | undefined;
expect(() => assertDefined(value)).toThrowError("value is undefined");
let value: string | undefined | null;
expect(() => assertDefinedAndNotNull(value)).toThrowError("value is undefined or null");
}
});
it("throws for null values", () => {
const value: number | undefined | null = null;
expect(() => assertDefinedAndNotNull(value)).toThrowError("value is undefined or null");
});
it("throws with custom message", () => {
const value: number | undefined = undefined;
expect(() => assertDefined(value, "Bug in the data source")).toThrowError("Bug in the data source");
expect(() => assertDefinedAndNotNull(value, "Bug in the data source")).toThrowError(
"Bug in the data source",
);
});
});
});

View File

@ -5,8 +5,8 @@ export function assert(condition: any, msg?: string): asserts condition {
}
}
export function assertDefined<T>(value: T | undefined, msg?: string): asserts value is T {
if (value === undefined) {
throw new Error(msg || "value is undefined");
export function assertDefinedAndNotNull<T>(value: T | undefined | null, msg?: string): asserts value is T {
if (value === undefined || value === null) {
throw new Error(msg ?? "value is undefined or null");
}
}

View File

@ -1,4 +1,4 @@
export { arrayContentEquals } from "./arrays";
export { assert, assertDefined } from "./assert";
export { assert, assertDefinedAndNotNull } from "./assert";
export { sleep } from "./sleep";
export { isNonNullObject, isUint8Array } from "./typechecks";

View File

@ -1,2 +1,5 @@
export declare function assert(condition: any, msg?: string): asserts condition;
export declare function assertDefined<T>(value: T | undefined, msg?: string): asserts value is T;
export declare function assertDefinedAndNotNull<T>(
value: T | undefined | null,
msg?: string,
): asserts value is T;

View File

@ -1,4 +1,4 @@
export { arrayContentEquals } from "./arrays";
export { assert, assertDefined } from "./assert";
export { assert, assertDefinedAndNotNull } from "./assert";
export { sleep } from "./sleep";
export { isNonNullObject, isUint8Array } from "./typechecks";