Files
penpot/frontend/text-editor/editor/content/dom/TextNodeIterator.test.js
2024-11-19 17:05:30 +01:00

71 lines
3.1 KiB
JavaScript

import { describe, test, expect } from "vitest";
import TextNodeIterator from "./TextNodeIterator";
import { createInline } from "./Inline";
import { createParagraph } from "./Paragraph";
import { createRoot } from "./Root";
import { createLineBreak } from "./LineBreak";
/* @vitest-environment jsdom */
describe("TextNodeIterator", () => {
test("Create a new TextNodeIterator with an invalid root should throw", () => {
expect(() => new TextNodeIterator(null)).toThrowError("Invalid root node");
expect(() => new TextNodeIterator(Infinity)).toThrowError(
"Invalid root node"
);
expect(() => new TextNodeIterator(1)).toThrowError("Invalid root node");
expect(() => new TextNodeIterator("hola")).toThrowError(
"Invalid root node"
);
});
test("Create a new TextNodeIterator and iterate only over text nodes", () => {
const rootNode = createRoot([
createParagraph([
createInline(new Text("Hello, ")),
createInline(new Text("World!")),
createInline(new Text("Whatever")),
]),
createParagraph([createInline(createLineBreak())]),
createParagraph([createInline(new Text("This is a ")), createInline(new Text("test"))]),
createParagraph([createInline(new Text("Hi!"))]),
]);
const textNodeIterator = new TextNodeIterator(rootNode);
expect(textNodeIterator.currentNode.nodeValue).toBe("Hello, ");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("World!");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("Whatever");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeType).toBe(Node.ELEMENT_NODE);
expect(textNodeIterator.currentNode.nodeName).toBe("BR");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("This is a ");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("test");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("Hi!");
textNodeIterator.previousNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("test");
textNodeIterator.previousNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("This is a ");
textNodeIterator.previousNode();
expect(textNodeIterator.currentNode.nodeType).toBe(Node.ELEMENT_NODE);
expect(textNodeIterator.currentNode.nodeName).toBe("BR");
textNodeIterator.previousNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("Whatever");
textNodeIterator.previousNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("World!");
textNodeIterator.previousNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("Hello, ");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("World!");
textNodeIterator.previousNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("Hello, ");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("World!");
textNodeIterator.nextNode();
expect(textNodeIterator.currentNode.nodeValue).toBe("Whatever");
});
});