mirror of
https://github.com/penpot/penpot.git
synced 2025-12-12 06:24:17 +01:00
✨ Import text-editor code into the repository
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user