1
0
Files
sashinexists/node_modules/@weborigami/async-tree/test/operations/keyFunctionsForExtensions.test.js
2024-12-07 13:18:31 +11:00

83 lines
2.9 KiB
JavaScript

import assert from "node:assert";
import { describe, test } from "node:test";
import { ObjectTree, Tree } from "../../src/internal.js";
import keyFunctionsForExtensions from "../../src/operations/keyFunctionsForExtensions.js";
import map from "../../src/operations/map.js";
describe("keyMapsForExtensions", () => {
test("returns key functions that pass a matching key through", async () => {
const { inverseKey, key } = keyFunctionsForExtensions({
sourceExtension: ".txt",
});
assert.equal(await inverseKey("file.txt"), "file.txt");
assert.equal(await inverseKey("file.txt/"), "file.txt");
assert.equal(await key("file.txt"), "file.txt");
assert.equal(await key("file.txt/"), "file.txt/");
assert.equal(await inverseKey("file.foo"), undefined);
assert.equal(await key("file.foo"), undefined);
});
test("returns key functions that can map extensions", async () => {
const { inverseKey, key } = keyFunctionsForExtensions({
resultExtension: ".json",
sourceExtension: ".md",
});
assert.equal(await inverseKey("file.json"), "file.md");
assert.equal(await inverseKey("file.json/"), "file.md");
assert.equal(await key("file.md"), "file.json");
assert.equal(await key("file.md/"), "file.json/");
assert.equal(await inverseKey("file.foo"), undefined);
assert.equal(await key("file.foo"), undefined);
});
test("key functions can handle a slash as an explicit extension", async () => {
const { inverseKey, key } = keyFunctionsForExtensions({
resultExtension: ".html",
sourceExtension: "/",
});
assert.equal(await inverseKey("file.html"), "file/");
assert.equal(await inverseKey("file.html/"), "file/");
assert.equal(await key("file"), undefined);
assert.equal(await key("file/"), "file.html");
});
test("works with map to handle keys that end in a given resultExtension", async () => {
const files = new ObjectTree({
"file1.txt": "will be mapped",
file2: "won't be mapped",
"file3.foo": "won't be mapped",
});
const { inverseKey, key } = keyFunctionsForExtensions({
sourceExtension: ".txt",
});
const fixture = map(files, {
inverseKey,
key,
value: (sourceValue, sourceKey, tree) => sourceValue.toUpperCase(),
});
assert.deepEqual(await Tree.plain(fixture), {
"file1.txt": "WILL BE MAPPED",
});
});
test("works with map to change a key's resultExtension", async () => {
const files = new ObjectTree({
"file1.txt": "will be mapped",
file2: "won't be mapped",
"file3.foo": "won't be mapped",
});
const { inverseKey, key } = keyFunctionsForExtensions({
resultExtension: ".upper",
sourceExtension: ".txt",
});
const fixture = map(files, {
inverseKey,
key,
value: (sourceValue, sourceKey, tree) => sourceValue.toUpperCase(),
});
assert.deepEqual(await Tree.plain(fixture), {
"file1.upper": "WILL BE MAPPED",
});
});
});