2025-11-03 01:52:26 +08:00
|
|
|
import {
|
|
|
|
|
findInDoc,
|
|
|
|
|
InvalidDocError,
|
|
|
|
|
traverseDoc,
|
|
|
|
|
} from "../../src/document/index.js";
|
2022-08-25 06:12:41 +08:00
|
|
|
|
|
|
|
|
test("traverse", () => {
|
|
|
|
|
const doc = [["a", "b"]];
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const visited = [];
|
|
|
|
|
traverseDoc(doc, (doc) => {
|
|
|
|
|
visited.push(doc);
|
|
|
|
|
});
|
|
|
|
|
|
2026-01-22 23:53:24 +08:00
|
|
|
expect(visited).toStrictEqual([doc, doc[0], doc[0][0], doc[0][1]]);
|
2022-08-25 06:12:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const visited = [];
|
|
|
|
|
traverseDoc(doc, (doc) => {
|
|
|
|
|
visited.push(doc);
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Should skip children
|
2026-01-22 23:53:24 +08:00
|
|
|
expect(visited).toStrictEqual([doc]);
|
2022-08-25 06:12:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const visited = [];
|
|
|
|
|
traverseDoc(doc, (doc) => {
|
|
|
|
|
visited.push(doc);
|
|
|
|
|
if (doc === "a") {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Still visiting siblings
|
2026-01-22 23:53:24 +08:00
|
|
|
expect(visited).toStrictEqual([doc, doc[0], doc[0][0], doc[0][1]]);
|
2022-08-25 06:12:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const visited = [];
|
|
|
|
|
findInDoc(doc, (doc) => {
|
|
|
|
|
visited.push(doc);
|
|
|
|
|
if (doc === "a") {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Should stop visiting siblings when found
|
2026-01-22 23:53:24 +08:00
|
|
|
expect(visited).toStrictEqual([doc, doc[0], doc[0][0]]);
|
2022-08-25 06:12:41 +08:00
|
|
|
}
|
|
|
|
|
});
|
2022-08-27 18:41:33 +08:00
|
|
|
|
|
|
|
|
test("Invalid doc", () => {
|
|
|
|
|
expect(() => {
|
|
|
|
|
traverseDoc({ type: "invalid-type" }, () => {});
|
|
|
|
|
}).toThrow(InvalidDocError);
|
|
|
|
|
});
|