UNPKG

thenavisapp

Version:

This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).

228 lines (203 loc) 6.88 kB
import { parseDOM } from "htmlparser2"; import { append, appendChild, prepend, prependChild, replaceElement, removeElement, } from "./manipulation.js"; import type { Element } from "domhandler"; describe("manipulation", () => { describe("append", () => { it("should not be duplicated when called twice", () => { const dom = parseDOM( "<div><p><img/></p><p><object/></p></div>", )[0] as Element; const child = parseDOM("<span></span>")[0] as Element; const parents = dom.children as Element[]; append(parents[0].children[0], child); expect(dom).toMatchInlineSnapshot(` <div> <p> <img /> <span /> </p> <p> <object /> </p> </div> `); append(parents[1].children[0], child); expect(parents[0].children).toHaveLength(1); expect(parents[1].children).toHaveLength(2); expect(dom).toMatchInlineSnapshot(` <div> <p> <img /> </p> <p> <object /> <span /> </p> </div> `); }); }); describe("appendChild", () => { it("should not be duplicated when called twice", () => { const dom = parseDOM( "<div><p><img/></p><p><object/></p></div>", )[0] as Element; const child = parseDOM("<span></span>")[0] as Element; const parents = dom.children as Element[]; appendChild(parents[0], child); expect(dom).toMatchInlineSnapshot(` <div> <p> <img /> <span /> </p> <p> <object /> </p> </div> `); appendChild(parents[1], child); expect(parents[0].children).toHaveLength(1); expect(parents[1].children).toHaveLength(2); expect(dom).toMatchInlineSnapshot(` <div> <p> <img /> </p> <p> <object /> <span /> </p> </div> `); }); }); describe("removeElement", () => { it("should correctly remove element", () => { const dom = parseDOM( "<div><p><img/><object/></p><p></p></div>", )[0] as Element; const parents = dom.children as Element[]; const image = parents[0].children[0]; removeElement(image); expect(image.next).toBeNull(); expect(image.prev).toBeNull(); expect(image.parent).toBeNull(); expect(dom).toMatchInlineSnapshot(` <div> <p> <object /> </p> <p /> </div> `); appendChild(parents[1], image); expect(parents[0].children).toHaveLength(1); expect(parents[1].children).toHaveLength(1); expect(dom).toMatchInlineSnapshot(` <div> <p> <object /> </p> <p> <img /> </p> </div> `); }); }); describe("prepend", () => { it("should not be duplicated when called twice", () => { const dom = parseDOM( "<div><p><img/></p><p><object/></p></div>", )[0] as Element; const child = parseDOM("<span></span>")[0] as Element; const parents = dom.children as Element[]; prepend(parents[0].children[0], child); expect(dom).toMatchInlineSnapshot(` <div> <p> <span /> <img /> </p> <p> <object /> </p> </div> `); prepend(parents[1].children[0], child); expect(parents[0].children).toHaveLength(1); expect(parents[1].children).toHaveLength(2); expect(dom).toMatchInlineSnapshot(` <div> <p> <img /> </p> <p> <span /> <object /> </p> </div> `); }); }); describe("prependChild", () => { it("should not be duplicated when called twice", () => { const dom = parseDOM( "<div><p><img/></p><p><object/></p></div>", )[0] as Element; const child = parseDOM("<span></span>")[0] as Element; const parents = dom.children as Element[]; prependChild(parents[0], child); expect(dom).toMatchInlineSnapshot(` <div> <p> <span /> <img /> </p> <p> <object /> </p> </div> `); prependChild(parents[1], child); expect(parents[0].children).toHaveLength(1); expect(parents[1].children).toHaveLength(2); expect(dom).toMatchInlineSnapshot(` <div> <p> <img /> </p> <p> <span /> <object /> </p> </div> `); }); }); describe("replaceElement", () => { it("should allow replaced elements to be appended later (#966)", () => { const div = parseDOM("<div><p>")[0] as Element; const template = parseDOM("<template></template>")[0] as Element; const p = div.children[0]; // We want to wrap the inner <p> in a <template> replaceElement(p, template); appendChild(template, p); expect(div).toMatchInlineSnapshot(` <div> <template> <p /> </template> </div> `); }); }); });