[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/keybase/msgpack-javascript/master/test/CachedKeyDecoder.test.ts [Back]  [Original]

import assert from "assert";
import { CachedKeyDecoder } from "../src/CachedKeyDecoder";
import { utf8EncodeJs, utf8Count } from "../src/utils/utf8";

function tryDecode(decoder: CachedKeyDecoder, str: string): string {
  const byteLength = utf8Count(str);
  const bytes = new Uint8Array(byteLength);
  utf8EncodeJs(str, bytes, 0);
  if (!decoder.canBeCached(byteLength)) {
    throw new Error("Unexpected precondition");
  }
  return decoder.decode(bytes, 0, byteLength);
}

describe("CachedKeyDecoder", () => {
  context("basic behavior", () => {
    it("decodes a string", () => {
      const decoder = new CachedKeyDecoder();

      assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo");
      assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo");
      assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo");

      // console.dir(decoder, { depth: 100 });
    });

    it("decodes strings", () => {
      const decoder = new CachedKeyDecoder();

      assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo");
      assert.deepStrictEqual(tryDecode(decoder, "bar"), "bar");
      assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo");

      // console.dir(decoder, { depth: 100 });
    });

    it("decodes strings with purging records", () => {
      const decoder = new CachedKeyDecoder(16, 4);

      for (let i = 0; i < 100; i++) {
        assert.deepStrictEqual(tryDecode(decoder, "foo1"), "foo1");
        assert.deepStrictEqual(tryDecode(decoder, "foo2"), "foo2");
        assert.deepStrictEqual(tryDecode(decoder, "foo3"), "foo3");
        assert.deepStrictEqual(tryDecode(decoder, "foo4"), "foo4");
        assert.deepStrictEqual(tryDecode(decoder, "foo5"), "foo5");
      }

      // console.dir(decoder, { depth: 100 });
    });
  });

  context("edge cases", () => {
    // len=0 is not supported because it is just an empty string
    it("decodes str with len=1", () => {
      const decoder = new CachedKeyDecoder();

      assert.deepStrictEqual(tryDecode(decoder, "f"), "f");
      assert.deepStrictEqual(tryDecode(decoder, "a"), "a");
      assert.deepStrictEqual(tryDecode(decoder, "f"), "f");
      assert.deepStrictEqual(tryDecode(decoder, "a"), "a");

      // console.dir(decoder, { depth: 100 });
    });

    it("decodes str with len=maxKeyLength", () => {
      const decoder = new CachedKeyDecoder(1);

      assert.deepStrictEqual(tryDecode(decoder, "f"), "f");
      assert.deepStrictEqual(tryDecode(decoder, "a"), "a");
      assert.deepStrictEqual(tryDecode(decoder, "f"), "f");
      assert.deepStrictEqual(tryDecode(decoder, "a"), "a");

      //console.dir(decoder, { depth: 100 });
    });
  });
});

Web Proxy Viewer  |  New URL  |  Original Page