mirror of
https://github.com/penpot/penpot.git
synced 2025-12-11 22:14:05 +01:00
71 lines
3.1 KiB
JavaScript
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");
|
|
});
|
|
});
|