55 lines
2.0 KiB
JavaScript
55 lines
2.0 KiB
JavaScript
import assert from "node:assert";
|
|
import { describe, test } from "node:test";
|
|
import { Tree } from "../../src/internal.js";
|
|
import group from "../../src/operations/group.js";
|
|
|
|
describe("group transform", () => {
|
|
test("groups an array using a group key function", async () => {
|
|
const fonts = [
|
|
{ name: "Aboreto", tags: ["Sans Serif"] },
|
|
{ name: "Albert Sans", tags: ["Geometric", "Sans Serif"] },
|
|
{ name: "Alegreya", tags: ["Serif"] },
|
|
{ name: "Work Sans", tags: ["Grotesque", "Sans Serif"] },
|
|
];
|
|
const tree = Tree.from(fonts);
|
|
const grouped = await group(tree, (value, key, tree) => value.tags);
|
|
assert.deepEqual(await Tree.plain(grouped), {
|
|
Geometric: [{ name: "Albert Sans", tags: ["Geometric", "Sans Serif"] }],
|
|
Grotesque: [{ name: "Work Sans", tags: ["Grotesque", "Sans Serif"] }],
|
|
"Sans Serif": [
|
|
{ name: "Aboreto", tags: ["Sans Serif"] },
|
|
{ name: "Albert Sans", tags: ["Geometric", "Sans Serif"] },
|
|
{ name: "Work Sans", tags: ["Grotesque", "Sans Serif"] },
|
|
],
|
|
Serif: [{ name: "Alegreya", tags: ["Serif"] }],
|
|
});
|
|
});
|
|
|
|
test("groups an object using a group key function", async () => {
|
|
const fonts = {
|
|
Aboreto: { tags: ["Sans Serif"] },
|
|
"Albert Sans": { tags: ["Geometric", "Sans Serif"] },
|
|
Alegreya: { tags: ["Serif"] },
|
|
"Work Sans": { tags: ["Grotesque", "Sans Serif"] },
|
|
};
|
|
const tree = Tree.from(fonts);
|
|
const grouped = await group(tree, (value, key, tree) => value.tags);
|
|
assert.deepEqual(await Tree.plain(grouped), {
|
|
Geometric: {
|
|
"Albert Sans": { tags: ["Geometric", "Sans Serif"] },
|
|
},
|
|
Grotesque: {
|
|
"Work Sans": { tags: ["Grotesque", "Sans Serif"] },
|
|
},
|
|
"Sans Serif": {
|
|
Aboreto: { tags: ["Sans Serif"] },
|
|
"Albert Sans": { tags: ["Geometric", "Sans Serif"] },
|
|
"Work Sans": { tags: ["Grotesque", "Sans Serif"] },
|
|
},
|
|
Serif: {
|
|
Alegreya: { tags: ["Serif"] },
|
|
},
|
|
});
|
|
});
|
|
});
|