/** * @jsxImportSource solid-js * @jest-environment jsdom */ import { createRoot, createSignal } from "../../src"; import { Show } from "../src"; describe("Testing an only child show control flow", () => { let div: HTMLDivElement, disposer: () => void; const [count, setCount] = createSignal(0); const Component = () => (
= 5}>{count()}
); test("Create show control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe(""); }); test("Toggle show control flow", () => { setCount(7); expect(div.innerHTML).toBe("7"); setCount(5); expect(div.innerHTML).toBe("5"); setCount(2); expect(div.innerHTML).toBe(""); }); test("dispose", () => disposer()); }); describe("Testing an only child show control flow with DOM children", () => { let div: HTMLDivElement, disposer: () => void; const [count, setCount] = createSignal(0); const Component = () => (
= 5}> {count()} counted
); test("Create show control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe(""); }); test("Toggle show control flow", () => { setCount(7); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("7"); setCount(5); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("5"); setCount(2); expect(div.innerHTML).toBe(""); }); test("dispose", () => disposer()); }); describe("Testing nonkeyed show control flow", () => { let div: HTMLDivElement, disposer: () => void; const [count, setCount] = createSignal(0); let executed = 0; const Component = () => (
{count()} {executed++}
); test("Create show control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe(""); expect(executed).toBe(0); }); test("Toggle show control flow", () => { setCount(7); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("7"); expect(executed).toBe(1); setCount(5); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("5"); expect(executed).toBe(1); setCount(0); expect(div.innerHTML).toBe(""); expect(executed).toBe(1); }); test("dispose", () => disposer()); }) describe("Testing keyed show control flow", () => { let div: HTMLDivElement, disposer: () => void; const [count, setCount] = createSignal(0); let executed = 0; const Component = () => (
{count()} {executed++}
); test("Create show control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe(""); expect(executed).toBe(0); }); test("Toggle show control flow", () => { setCount(7); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("7"); expect(executed).toBe(1); setCount(5); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("5"); expect(executed).toBe(2); setCount(0); expect(div.innerHTML).toBe(""); expect(executed).toBe(2); }); test("dispose", () => disposer()); }) describe("Testing an only child show control flow with keyed function", () => { let div: HTMLDivElement, disposer: () => void; const [data, setData] = createSignal<{ count: number }>(); const Component = () => (
{({count}) => ( <> {count} counted )}
); test("Create show control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe(""); }); test("Toggle show control flow", () => { setData({count: 7}); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("7"); setData({count: 5}); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("5"); setData({count: 2}); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("2"); }); test("dispose", () => disposer()); }); describe("Testing an only child show control flow with DOM children and fallback", () => { let div: HTMLDivElement, disposer: () => void; const [count, setCount] = createSignal(0); const Component = () => (
= 5} fallback={Too Low}> {count}
); test("Create when control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe("Too Low"); }); test("Toggle show control flow", () => { setCount(7); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("7"); setCount(5); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("5"); setCount(2); expect((div.firstChild as HTMLSpanElement).innerHTML).toBe("Too Low"); }); test("dispose", () => disposer()); });