-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
import { GlobalRegistrator } from "@happy-dom/global-registrator";
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import { el } from "../src/dom.js";
import { classList, style } from "../src/setups.js";
import { signal } from "../src/signals.js";
beforeAll(() => {
GlobalRegistrator.register();
});
afterAll(() => {
GlobalRegistrator.unregister();
});
describe("classList", () => {
test("should add a list of class to an element", () => {
const div = el("div", [classList("foo", "bar", "baz")]);
expect(div.getAttribute("class")).toBe("foo bar baz");
});
test("should cleanup previous class", () => {
const $class = signal<string | null>("foo");
const div = el("div", [classList($class)]);
expect(div.getAttribute("class")).toBe("foo");
$class.set("bar");
expect(div.getAttribute("class")).toBe("bar");
$class.set(null);
expect(div.getAttribute("class")).toBeEmpty();
});
});
describe("style", () => {
test("should set styles", () => {
const div = el("div", [
style("display", "none"),
style("background-color", "tomato"),
]);
expect(div.style.display).toBe("none");
expect(div.style.backgroundColor).toBe("tomato");
});
test("should set custom properties", () => {
const div = el("div", [
style("--foo", "color(display-p3 0.8 1 0.9 / 0.5)"),
style("--_bar", "t, o, k, e, n"),
style("--baz", null),
]);
expect(div.style.getPropertyValue("--foo")).toBe(
"color(display-p3 0.8 1 0.9 / 0.5)",
);
expect(div.style.getPropertyValue("--_bar")).toBe("t, o, k, e, n");
expect(div.style.getPropertyValue("--baz")).toBeEmpty();
});
test("should react to Signal changes", () => {
const $display = signal<string | null>("block");
const div = el("div", [style("display", $display)]);
expect(div.style.display).toBe("block");
$display.set("none");
expect(div.style.display).toBe("none");
$display.set(null);
expect(div.style.display).toBeEmpty();
});
});