import "jest"; import { JSDOM } from "jsdom"; import * as parse from "../parse"; import { buildNode, DovetailNodeFactory } from "./buildEditorState"; import "./expect.toMatchNode"; describe(parse.parseText.name, () => { function test(text: string, expected: DovetailNodeFactory) { expect(parse.parseText(text)).toMatchNode(buildNode(expected).node); } it("empty", () => { test("", ({ doc, p }) => doc(p())); }); it("unicode", () => { test("รผรธรถ๐ŸŽ‰๐ŸŽ๐Ÿ‡ฆ๐Ÿ‡บ", ({ doc, p }) => doc(p("รผรธรถ๐ŸŽ‰๐ŸŽ๐Ÿ‡ฆ๐Ÿ‡บ"))); }); const scenarios = [{ name: "CRLF", EOL: "\r\n" }, { name: "LF", EOL: "\n" }]; for (const { name, EOL } of scenarios) { describe(name, () => { it("single line", () => { test("foo", ({ doc, p }) => doc(p("foo"))); }); it("two paragraphs", () => { test(`foo${EOL}${EOL}bar`, ({ doc, p }) => doc(p("foo"), p("bar"))); }); it("two paragraphs (double blank line separation)", () => { test(`foo${EOL}${EOL}${EOL}bar`, ({ doc, p }) => doc(p("foo"), p("bar"))); }); it("three paragraphs (middle empty)", () => { test(`foo${EOL}${EOL}${EOL}${EOL}${EOL}bar`, ({ doc, p }) => doc(p("foo"), p(), p("bar"))); }); it("two lines", () => { test(`foo${EOL}bar`, ({ doc, br, p }) => doc(p("foo", br(), "bar"))); }); it("trims trailing new lines from paragraphs", () => { test(`foo${EOL}`, ({ doc, p }) => doc(p("foo"))); }); }); } }); describe(parse.parseHtml.name, () => { function test(html: string, expected: DovetailNodeFactory) { expect(parse.parseHtml(new JSDOM(html).window.document.documentElement)).toMatchNode(buildNode(expected).node); } it("bold text", () => { test("foo", ({ doc, b, p }) => doc(p(b("foo")))); }); });