60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
import assert from "node:assert";
|
|
import { describe, test } from "node:test";
|
|
import MapTree from "../../src/drivers/MapTree.js";
|
|
import * as symbols from "../../src/symbols.js";
|
|
|
|
describe("MapTree", () => {
|
|
test("can get the keys of the tree", async () => {
|
|
const fixture = createFixture();
|
|
assert.deepEqual(Array.from(await fixture.keys()), ["a", "b", "c"]);
|
|
});
|
|
|
|
test("can get the value for a key", async () => {
|
|
const fixture = createFixture();
|
|
const a = await fixture.get("a");
|
|
assert.equal(a, 1);
|
|
});
|
|
|
|
test("sets parent on subtrees", async () => {
|
|
const map = new Map([["more", new Map([["a", 1]])]]);
|
|
const fixture = new MapTree(map);
|
|
const more = await fixture.get("more");
|
|
assert.equal(more[symbols.parent], fixture);
|
|
});
|
|
|
|
test("adds trailing slashes to keys for subtrees", async () => {
|
|
const tree = new MapTree([
|
|
["a", 1],
|
|
["subtree", new MapTree([["b", 2]])],
|
|
]);
|
|
const keys = Array.from(await tree.keys());
|
|
assert.deepEqual(keys, ["a", "subtree/"]);
|
|
});
|
|
|
|
test("can retrieve values with optional trailing slash", async () => {
|
|
const subtree = new MapTree([["b", 2]]);
|
|
const tree = new MapTree([
|
|
["a", 1],
|
|
["subtree", subtree],
|
|
]);
|
|
assert.equal(await tree.get("a"), 1);
|
|
assert.equal(await tree.get("a/"), 1);
|
|
assert.equal(await tree.get("subtree"), subtree);
|
|
assert.equal(await tree.get("subtree/"), subtree);
|
|
});
|
|
|
|
test("getting an unsupported key returns undefined", async () => {
|
|
const fixture = createFixture();
|
|
assert.equal(await fixture.get("d"), undefined);
|
|
});
|
|
});
|
|
|
|
function createFixture() {
|
|
const map = new Map([
|
|
["a", 1],
|
|
["b", 2],
|
|
["c", 3],
|
|
]);
|
|
return new MapTree(map);
|
|
}
|