/** * @jsxImportSource solid-js * @jest-environment jsdom */ import { render, Switch, Match, For } from "../src"; import { createRoot, createSignal } from "../../src"; import { createStore } from "../../store/src"; describe("Testing a single match switch control flow", () => { let div: HTMLDivElement, disposer: () => void; const [count, setCount] = createSignal(0); const Component = () => (
1
); test("Create Switch control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe("fallback"); }); test("Toggle Switch control flow", () => { setCount(1); expect(div.innerHTML).toBe("1"); setCount(3); expect(div.innerHTML).toBe("fallback"); }); test("dispose", () => disposer()); }); describe("Testing an only child Switch control flow", () => { let div: HTMLDivElement, disposer: () => void; const [count, setCount] = createSignal(0); const Component = () => (
1 2 3
); test("Create Switch control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe("fallback"); }); test("Toggle Switch control flow", () => { setCount(1); expect(div.innerHTML).toBe("1"); setCount(4); expect(div.innerHTML).toBe("2"); setCount(7); expect(div.innerHTML).toBe("3"); setCount(9); expect(div.innerHTML).toBe("fallback"); }); test("doesn't re-render on same option", () => { setCount(4); expect(div.innerHTML).toBe("2"); const c = div.firstChild; setCount(4); expect(div.innerHTML).toBe("2"); expect(div.firstChild).toBe(c); }); test("dispose", () => disposer()); }); describe("Testing keyed Switch control flow", () => { let div: HTMLDivElement, disposer: () => void; const [a, setA] = createSignal(0), [b, setB] = createSignal(0), [c, setC] = createSignal(0); const Component = () => (
{a()} {b()} {c()}
); test("Create Switch control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe("fallback"); }); test("Toggle Switch control flow", () => { setC(1); expect(div.innerHTML).toBe("1"); setB(2); expect(div.innerHTML).toBe("2"); setA(3); expect(div.innerHTML).toBe("3"); setA(0); expect(div.innerHTML).toBe("2"); }); test("dispose", () => disposer()); }); describe("Testing function handler Switch control flow", () => { let div: HTMLDivElement, disposer: () => void; const [a, setA] = createSignal(0), [b, setB] = createSignal(0), [c, setC] = createSignal(0); const Component = () => (
{a => a} {b => b} {c => c}
); test("Create Switch control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe("fallback"); }); test("Toggle Switch control flow", () => { setC(1); expect(div.innerHTML).toBe("1"); setB(2); expect(div.innerHTML).toBe("2"); setA(3); expect(div.innerHTML).toBe("3"); setA(0); expect(div.innerHTML).toBe("2"); }); test("dispose", () => disposer()); }); describe("Testing a For in a Switch control flow", () => { let div: HTMLDivElement, disposer: () => void; const [state, setState] = createStore({ users: [ { firstName: "Jerry", certified: false }, { firstName: "Janice", certified: false } ] }); const Component = () => (
{user => {user.firstName}}
); test("Create Switch control flow", () => { createRoot(dispose => { disposer = dispose; ; }); expect(div.innerHTML).toBe("fallback"); }); test("Toggle Switch control flow", () => { setState("users", 1, "certified", true); expect(div.innerHTML).toBe("Janice"); setState("users", 0, "certified", true); expect(div.innerHTML).toBe("Jerry"); setState("users", u => [{ firstName: "Gordy", certified: true }, ...u]); expect(div.innerHTML).toBe("Gordy"); }); test("dispose", () => disposer()); }); describe("Test top level switch control flow", () => { let div = document.createElement("div"), disposer: () => void; const [count, setCount] = createSignal(0); const Component = () => ( 1 ); test("Create switch control flow", () => { disposer = render(Component, div); expect(div.innerHTML).toBe("fallback"); setCount(1); expect(div.innerHTML).toBe("1"); }); test("dispose", () => disposer()); });