rescribet/link-lib

View on GitHub
src/__tests__/TypedRecord.spec.ts

Summary

Maintainability
A
0 mins
Test Coverage
import "./useFactory";

import "jest";
import { AttributeKey, TypedRecord } from "../TypedRecord";

describe("TypedRecord", () => {
    const keya = new AttributeKey("a");
    const keyb = new AttributeKey("b");
    const keyc = new AttributeKey("c");

    it("gets nonexisting key", () => {
        const record = new TypedRecord();

        expect(record.get(keya)).toBeUndefined();
    });

    it("gets the size", () => {
        const record = new TypedRecord();
        expect(record.size).toBe(0);

        record.set(keya, "");
        expect(record.size).toBe(1);
    });

    it("pretty prints toString", () => {
        const record = new TypedRecord();
        expect(record.size).toBe(0);

        record.set(keya, "");
        expect(record.toString()).toBe("[object Map]");
    });

    it("pretty prints AttributeKey toString", () => {
        expect(keya.toString()).toBe("a");
    });

    it("clears the map", () => {
        const record = new TypedRecord();
        expect(record.size).toBe(0);

        record.set(keya, "");
        expect(record.size).toBe(1);

        record.clear();
        expect(record.size).toBe(0);
    });

    it("deletes the key", () => {
        const record = new TypedRecord();
        expect(record.size).toBe(0);

        record.set(keya, "");
        record.set(keyb, "");
        record.set(keyc, "");
        expect(record.size).toBe(3);

        record.delete(keya);
        expect(record.size).toBe(2);
    });

    it("returns the keys", () => {
        const record = new TypedRecord();

        record.set(keya, "");
        record.set(keyb, "");
        record.set(keyc, "");
        expect(Array.from(record.keys())).toEqual([
            keya,
            keyb,
            keyc,
        ]);
    });

    it("returns the values", () => {
        const record = new TypedRecord();

        record.set(keya, "value key");
        record.set(keyb, "value keyb");
        record.set(keyc, "value keyc");
        expect(Array.from(record.values())).toEqual([
            "value key",
            "value keyb",
            "value keyc",
        ]);
    });

    it("handles forEach", () => {
        const record = new TypedRecord();

        record.set(keya, "value key");
        record.set(keyb, "value keyb");
        record.set(keyc, "value keyc");

        const processed: unknown[] = [];

        record.forEach((item) => {
            processed.push(item);
        });

        expect(processed).toEqual([
            "value key",
            "value keyb",
            "value keyc",
        ]);
    });

    it("handles entries", () => {
        const record = new TypedRecord();

        record.set(keya, "value key");
        record.set(keyb, "value keyb");
        record.set(keyc, "value keyc");

        expect(Array.from(record.entries())).toEqual([
            [keya, "value key"],
            [keyb, "value keyb"],
            [keyc, "value keyc"],
        ]);
    });

    it("handles iterators", () => {
        const record = new TypedRecord();

        record.set(keya, "value key");
        record.set(keyb, "value keyb");
        record.set(keyc, "value keyc");

        const keys = [];
        const values = [];

        for (const [key, item] of record) {
            keys.push(key);
            values.push(item);
        }

        expect(keys).toEqual([
            keya,
            keyb,
            keyc,
        ]);
        expect(values).toEqual([
            "value key",
            "value keyb",
            "value keyc",
        ]);
    });

    it("has key existence", () => {
        const record = new TypedRecord();
        expect(record.has(keya)).toBe(false);

        record.set(keya, "");
        expect(record.has(keya)).toBe(true);
    });
});