From 29adbb7cd7c8080282bef4a1095effd1a4856424 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sun, 12 Jul 2020 11:51:27 +0200 Subject: [PATCH] Implement unit tests for the `RefSetCache` primitive This primitive did not have unit test coverage yet, which is important for upcoming refactoring of the primitive. --- test/unit/primitives_spec.js | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/test/unit/primitives_spec.js b/test/unit/primitives_spec.js index 5ed82e9a8..fa1c3ab9b 100644 --- a/test/unit/primitives_spec.js +++ b/test/unit/primitives_spec.js @@ -27,6 +27,7 @@ import { Name, Ref, RefSet, + RefSetCache, } from "../../src/core/primitives.js"; import { StringStream } from "../../src/core/stream.js"; import { XRefMock } from "./test_utils.js"; @@ -336,6 +337,64 @@ describe("primitives", function () { }); }); + describe("RefSetCache", function () { + const ref1 = Ref.get(4, 2); + const ref2 = Ref.get(5, 2); + const obj1 = Name.get("foo"); + const obj2 = Name.get("bar"); + let cache; + + beforeEach(function (done) { + cache = new RefSetCache(); + done(); + }); + + afterEach(function () { + cache = null; + }); + + it("should put, have and get a value", function () { + cache.put(ref1, obj1); + expect(cache.has(ref1)).toBeTruthy(); + expect(cache.has(ref2)).toBeFalsy(); + expect(cache.get(ref1)).toBe(obj1); + }); + + it("should put, have and get a value by alias", function () { + cache.put(ref1, obj1); + cache.putAlias(ref2, ref1); + expect(cache.has(ref1)).toBeTruthy(); + expect(cache.has(ref2)).toBeTruthy(); + expect(cache.get(ref1)).toBe(obj1); + expect(cache.get(ref2)).toBe(obj1); + }); + + it("should report the size of the cache", function () { + cache.put(ref1, obj1); + expect(cache.size).toEqual(1); + cache.put(ref2, obj2); + expect(cache.size).toEqual(2); + }); + + it("should clear the cache", function () { + cache.put(ref1, obj1); + expect(cache.size).toEqual(1); + cache.clear(); + expect(cache.size).toEqual(0); + }); + + it("should support iteration", function () { + cache.put(ref1, obj1); + cache.put(ref2, obj2); + + const values = []; + cache.forEach(function (value) { + values.push(value); + }); + expect(values).toEqual([obj1, obj2]); + }); + }); + describe("isEOF", function () { it("handles non-EOF", function () { const nonEOF = "foo";