62 lines
1.1 KiB
JavaScript
62 lines
1.1 KiB
JavaScript
import {
|
|
findInDoc,
|
|
InvalidDocError,
|
|
traverseDoc,
|
|
} from "../../src/document/index.js";
|
|
|
|
test("traverse", () => {
|
|
const doc = [["a", "b"]];
|
|
|
|
{
|
|
const visited = [];
|
|
traverseDoc(doc, (doc) => {
|
|
visited.push(doc);
|
|
});
|
|
|
|
expect(visited).toStrictEqual([doc, doc[0], doc[0][0], doc[0][1]]);
|
|
}
|
|
|
|
{
|
|
const visited = [];
|
|
traverseDoc(doc, (doc) => {
|
|
visited.push(doc);
|
|
return false;
|
|
});
|
|
|
|
// Should skip children
|
|
expect(visited).toStrictEqual([doc]);
|
|
}
|
|
|
|
{
|
|
const visited = [];
|
|
traverseDoc(doc, (doc) => {
|
|
visited.push(doc);
|
|
if (doc === "a") {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
// Still visiting siblings
|
|
expect(visited).toStrictEqual([doc, doc[0], doc[0][0], doc[0][1]]);
|
|
}
|
|
|
|
{
|
|
const visited = [];
|
|
findInDoc(doc, (doc) => {
|
|
visited.push(doc);
|
|
if (doc === "a") {
|
|
return true;
|
|
}
|
|
});
|
|
|
|
// Should stop visiting siblings when found
|
|
expect(visited).toStrictEqual([doc, doc[0], doc[0][0]]);
|
|
}
|
|
});
|
|
|
|
test("Invalid doc", () => {
|
|
expect(() => {
|
|
traverseDoc({ type: "invalid-type" }, () => {});
|
|
}).toThrow(InvalidDocError);
|
|
});
|