import { renderToString, renderToBdom, snapshotEverything, makeTestFixture } from "../helpers"; import { mount } from "../../src/runtime/blockdom"; import { mount as mountComponent, Component, xml } from "../../src/index"; // NB: check the snapshots to see where the SVG namespaces are added snapshotEverything(); describe("properly support svg", () => { test("add proper namespace to svg", () => { const template = ` `; expect(renderToString(template)).toBe( ` ` ); }); test("add proper namespace to g tags", () => { const template = ` `; expect(renderToString(template)).toBe( ` ` ); }); test("namespace to g tags not added if already in svg namespace", () => { const template = ``; expect(renderToString(template)).toBe(``); }); test("namespace to svg tags added even if already in svg namespace", () => { const template = ``; const bdom = renderToBdom(template); const fixture = makeTestFixture(); mount(bdom, fixture); const elems = fixture.querySelectorAll("svg"); expect(elems.length).toEqual(2); for (const el of elems) { expect(el.namespaceURI).toBe("http://www.w3.org/2000/svg"); } }); test("svg namespace added to sub-blocks", () => { const template = ``; expect(renderToString(template, { path: false })).toBe( `` ); // Because the path is its own block, it has its own xmlns attribute expect(renderToString(template, { path: true })).toBe( `` ); const bdom = renderToBdom(template, { path: true }); const fixture = makeTestFixture(); mount(bdom, fixture); const elems = fixture.querySelectorAll("svg, path"); expect(elems.length).toEqual(2); for (const el of elems) { expect(el.namespaceURI).toBe("http://www.w3.org/2000/svg"); } }); test("svg namespace added to sub templates if root tag is path", async () => { const templates = ` `; const fixture = makeTestFixture(); class Svg extends Component { static template = "svg"; } await mountComponent(Svg, fixture, { templates }); const elems = fixture.querySelectorAll("svg, path"); expect(elems.length).toEqual(2); for (const el of elems) { expect(el.namespaceURI).toBe("http://www.w3.org/2000/svg"); } }); test("svg creates new block if it is within html", async () => { class Test extends Component { static template = xml`
`; } const fixture = makeTestFixture(); await mountComponent(Test, fixture); const elems = fixture.querySelectorAll("svg, polygon"); expect(elems.length).toEqual(2); for (const el of elems) { expect(el.namespaceURI).toBe("http://www.w3.org/2000/svg"); } }); test("svg creates new block if it is within html -- 2", async () => { class Test extends Component { static template = xml`
`; hasPath = true; } const fixture = makeTestFixture(); await mountComponent(Test, fixture); const elems = fixture.querySelectorAll("svg, polygon, path"); expect(elems.length).toEqual(3); for (const el of elems) { expect(el.namespaceURI).toBe("http://www.w3.org/2000/svg"); } }); });