/** * @jsxImportSource solid-js * @jest-environment jsdom */ import { createRoot, createSignal, Component, JSX } from "../../src"; import { createStore } from "../../store/src"; import { Dynamic } from "../src"; describe("Testing Dynamic control flow", () => { let div: HTMLDivElement, disposer: () => void; interface ExampleProps { id: string; } const [comp, setComp] = createSignal | keyof JSX.IntrinsicElements>(), [name, setName] = createSignal("Smith"); const Component = () => (
), CompA: Component = props =>
Hi {props.id}
, CompB: Component = props => Yo {props.id}; beforeEach(() => { createRoot(dispose => { disposer = dispose; ; }); }) afterEach(() => disposer()); test("Toggle Dynamic control flow", () => { expect(div.innerHTML).toBe(""); setComp(() => CompA); expect(div.innerHTML).toBe("
Hi Smith
"); setName("Smithers"); expect(div.innerHTML).toBe("
Hi Smithers
"); setComp(() => CompB); expect(div.innerHTML).toBe("Yo Smithers"); setComp("h1"); expect(div.innerHTML).toBe(`

`); setName("Sunny") expect(div.innerHTML).toBe(`

`); expect(div.querySelector('h1')).toBeInstanceOf(HTMLElement); }); test("Renders SVG elements", () => { setComp("svg") expect(div.querySelector('svg')).toBeInstanceOf(SVGSVGElement); setComp("path") expect(div.querySelector('path')).toBeInstanceOf(SVGElement); }); }); describe("Testing Dynamic with state spread", () => { let div: HTMLDivElement, disposer: () => void; interface ExampleProps { id: string; } const [comp, setComp] = createSignal | keyof JSX.IntrinsicElements>(), [state, setState] = createStore({ id: "Smith" }); const Component = () => (
), CompA: Component = props =>
Hi {props.id}
, CompB: Component = props => Yo {props.id}; beforeEach(() => { createRoot(dispose => { disposer = dispose; ; }); }) afterEach(() => disposer()); test("Toggle Dynamic control flow", () => { expect(div.innerHTML).toBe(""); setComp(() => CompA); expect(div.innerHTML).toBe("
Hi Smith
"); setState("id", "Smithers"); expect(div.innerHTML).toBe("
Hi Smithers
"); setComp(() => CompB); expect(div.innerHTML).toBe("Yo Smithers"); setComp("h1"); expect(div.innerHTML).toBe(`

`); setState("id", "Sunny") expect(div.innerHTML).toBe(`

`); expect(div.querySelector('h1')).toBeInstanceOf(HTMLElement); }); });