import { Component, mount, useState } from "../../src"; import { Memo } from "../../src/"; import { xml } from "../../src/tags"; import { makeTestFixture, nextTick, snapshotEverything } from "../helpers"; let fixture: HTMLElement; snapshotEverything(); beforeEach(() => { fixture = makeTestFixture(); }); describe("Memo", () => { test("if no props, prevent renderings from above ", async () => { class Child extends Component { static template = xml``; } class Test extends Component { static template = xml` `; static components = { Memo, Child }; state = useState({ value: 1 }); } const component = await mount(Test, fixture); expect(fixture.innerHTML).toBe("11"); component.state.value = 2; await nextTick(); expect(fixture.innerHTML).toBe("21"); }); test("if no props, prevent renderings from above (work with simple html) ", async () => { class Test extends Component { static template = xml` `; static components = { Memo }; state = useState({ value: 1 }); } const component = await mount(Test, fixture); expect(fixture.innerHTML).toBe("11"); component.state.value = 2; await nextTick(); expect(fixture.innerHTML).toBe("21"); }); test("if no prop change, prevent renderings from above ", async () => { class Child extends Component { static template = xml``; } class Test extends Component { static template = xml` `; static components = { Memo, Child }; state = useState({ a: "a", b: "b", c: "c" }); } const component = await mount(Test, fixture); expect(fixture.innerHTML).toBe("abcabc"); component.state.c = "C"; await nextTick(); expect(fixture.innerHTML).toBe("abCabc"); component.state.a = "A"; await nextTick(); expect(fixture.innerHTML).toBe("AbCAbC"); }); });