/**
* @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());
});