forked from sashin/sashinexists
83 lines
2.9 KiB
JavaScript
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",
|
|
});
|
|
});
|
|
});
|