mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-08 09:49:19 +00:00
52 lines
2.1 KiB
TypeScript
52 lines
2.1 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { createTextFragment, getCursorPosition, getNodeLength, getTextLength, setCursorPosition } from "./editor-dom"
|
|
|
|
describe("prompt-input editor dom", () => {
|
|
test("createTextFragment preserves newlines with br and zero-width placeholders", () => {
|
|
const fragment = createTextFragment("foo\n\nbar")
|
|
const container = document.createElement("div")
|
|
container.appendChild(fragment)
|
|
|
|
expect(container.childNodes.length).toBe(5)
|
|
expect(container.childNodes[0]?.textContent).toBe("foo")
|
|
expect((container.childNodes[1] as HTMLElement).tagName).toBe("BR")
|
|
expect(container.childNodes[2]?.textContent).toBe("\u200B")
|
|
expect((container.childNodes[3] as HTMLElement).tagName).toBe("BR")
|
|
expect(container.childNodes[4]?.textContent).toBe("bar")
|
|
})
|
|
|
|
test("length helpers treat breaks as one char and ignore zero-width chars", () => {
|
|
const container = document.createElement("div")
|
|
container.appendChild(document.createTextNode("ab\u200B"))
|
|
container.appendChild(document.createElement("br"))
|
|
container.appendChild(document.createTextNode("cd"))
|
|
|
|
expect(getNodeLength(container.childNodes[0]!)).toBe(2)
|
|
expect(getNodeLength(container.childNodes[1]!)).toBe(1)
|
|
expect(getTextLength(container)).toBe(5)
|
|
})
|
|
|
|
test("setCursorPosition and getCursorPosition round-trip with pills and breaks", () => {
|
|
const container = document.createElement("div")
|
|
const pill = document.createElement("span")
|
|
pill.dataset.type = "file"
|
|
pill.textContent = "@file"
|
|
container.appendChild(document.createTextNode("ab"))
|
|
container.appendChild(pill)
|
|
container.appendChild(document.createElement("br"))
|
|
container.appendChild(document.createTextNode("cd"))
|
|
document.body.appendChild(container)
|
|
|
|
setCursorPosition(container, 2)
|
|
expect(getCursorPosition(container)).toBe(2)
|
|
|
|
setCursorPosition(container, 7)
|
|
expect(getCursorPosition(container)).toBe(7)
|
|
|
|
setCursorPosition(container, 8)
|
|
expect(getCursorPosition(container)).toBe(8)
|
|
|
|
container.remove()
|
|
})
|
|
})
|