import {
cssCallback,
didPaintCallback,
htmlCallback,
isPainted,
willPaintCallback,
} from "@dom/interfaces";
import { describe, expect, it } from "vitest";
import repaint from "./repaint";
describe("repaint", () => {
it("deve funcionar corretamente em um setter", async () => {
const steps = [];
class MyElement {
[isPainted] = true;
[willPaintCallback]() {
steps.push("will");
}
[htmlCallback](resolve) {
steps.push("html");
resolve();
}
[cssCallback](resolve) {
steps.push("css");
resolve();
}
[didPaintCallback]() {
steps.push("did");
}
@repaint
set value(_) {
steps.push("set");
}
}
const element = new MyElement();
element.value = 42;
await new Promise((r) => setTimeout(r, 100));
expect(steps).toEqual(["set", "will", "html", "css", "did"]);
});
it("deve funcionar corretamente em um método", async () => {
const steps = [];
class MyElement {
[isPainted] = true;
[willPaintCallback]() {
steps.push("will");
}
[htmlCallback](resolve) {
steps.push("html");
resolve();
}
[cssCallback](resolve) {
steps.push("css");
resolve();
}
[didPaintCallback]() {
steps.push("did");
}
@repaint
trigger() {
steps.push("method");
}
}
const element = new MyElement();
element.trigger();
await new Promise((r) => setTimeout(r, 10));
expect(steps).toEqual(["method", "will", "html", "css", "did"]);
});
it("não deve disparar os callbacks de render se isPainted = false", async () => {
const steps = [];
class MyElement {
[isPainted] = false;
[willPaintCallback]() {
steps.push("will");
}
[htmlCallback](resolve) {
steps.push("html");
resolve();
}
[cssCallback](resolve) {
steps.push("css");
resolve();
}
[didPaintCallback]() {
steps.push("did");
}
@repaint
trigger() {
steps.push("method");
}
}
const element = new MyElement();
element.trigger();
await new Promise((r) => setTimeout(r, 100));
expect(steps).toEqual(["method"]);
});
});