Skip to content

Commit b50f5fd

Browse files
Add more tests cases for event capture/target/bubbles phases
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
1 parent 91ddc66 commit b50f5fd

File tree

1 file changed

+67
-12
lines changed

1 file changed

+67
-12
lines changed

src/dom/event_target.zig

Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,28 +57,83 @@ pub fn testExecFn(
5757
_: std.mem.Allocator,
5858
js_env: *jsruntime.Env,
5959
) anyerror!void {
60-
var basic = [_]Case{
61-
.{ .src = "let event = new Event('myEvent')", .ex = "undefined" },
60+
var common = [_]Case{
6261
.{ .src = "let content = document.getElementById('content')", .ex = "undefined" },
62+
.{ .src = "let para = document.getElementById('para')", .ex = "undefined" },
6363
.{ .src =
64-
\\var nb = 0;
65-
\\var evt = undefined;
66-
\\var phase = undefined;
67-
\\var cur = undefined;
68-
\\content.addEventListener('myEvent',
69-
\\function(event) {
64+
\\var nb = 0; var evt; var phase; var cur;
65+
\\function cbk(event) {
7066
\\evt = event;
7167
\\phase = event.eventPhase;
7268
\\cur = event.currentTarget;
7369
\\nb ++;
74-
\\})
70+
\\}
7571
, .ex = "undefined" },
76-
.{ .src = "content.dispatchEvent(event)", .ex = "true" },
72+
};
73+
try checkCases(js_env, &common);
74+
75+
var basic = [_]Case{
76+
.{ .src = "content.addEventListener('basic', cbk)", .ex = "undefined" },
77+
.{ .src = "content.dispatchEvent(new Event('basic'))", .ex = "true" },
7778
.{ .src = "nb", .ex = "1" },
7879
.{ .src = "evt instanceof Event", .ex = "true" },
79-
.{ .src = "evt.type", .ex = "myEvent" },
80+
.{ .src = "evt.type", .ex = "basic" },
8081
.{ .src = "phase", .ex = "2" },
81-
.{ .src = "cur.localName", .ex = "div" },
82+
.{ .src = "cur.getAttribute('id')", .ex = "content" },
8283
};
8384
try checkCases(js_env, &basic);
85+
86+
var basic_child = [_]Case{
87+
.{ .src = "nb = 0; evt = undefined; phase = undefined; cur = undefined", .ex = "undefined" },
88+
.{ .src = "para.dispatchEvent(new Event('basic'))", .ex = "true" },
89+
.{ .src = "nb", .ex = "0" }, // handler is not called, no capture, not the target, no bubbling
90+
.{ .src = "evt === undefined", .ex = "true" },
91+
};
92+
try checkCases(js_env, &basic_child);
93+
94+
var capture = [_]Case{
95+
.{ .src = "nb = 0; evt = undefined; phase = undefined; cur = undefined", .ex = "undefined" },
96+
.{ .src = "content.addEventListener('capture', cbk, true)", .ex = "undefined" },
97+
.{ .src = "content.dispatchEvent(new Event('capture'))", .ex = "true" },
98+
.{ .src = "nb", .ex = "1" },
99+
.{ .src = "evt instanceof Event", .ex = "true" },
100+
.{ .src = "evt.type", .ex = "capture" },
101+
.{ .src = "phase", .ex = "2" },
102+
.{ .src = "cur.getAttribute('id')", .ex = "content" },
103+
};
104+
try checkCases(js_env, &capture);
105+
106+
var capture_child = [_]Case{
107+
.{ .src = "nb = 0; evt = undefined; phase = undefined; cur = undefined", .ex = "undefined" },
108+
.{ .src = "para.dispatchEvent(new Event('capture'))", .ex = "true" },
109+
.{ .src = "nb", .ex = "1" },
110+
.{ .src = "evt instanceof Event", .ex = "true" },
111+
.{ .src = "evt.type", .ex = "capture" },
112+
.{ .src = "phase", .ex = "1" },
113+
.{ .src = "cur.getAttribute('id')", .ex = "content" },
114+
};
115+
try checkCases(js_env, &capture_child);
116+
117+
var bubbles = [_]Case{
118+
.{ .src = "nb = 0; evt = undefined; phase = undefined; cur = undefined", .ex = "undefined" },
119+
.{ .src = "content.addEventListener('bubbles', cbk)", .ex = "undefined" },
120+
.{ .src = "content.dispatchEvent(new Event('bubbles', {bubbles: true}))", .ex = "true" },
121+
.{ .src = "nb", .ex = "1" },
122+
.{ .src = "evt instanceof Event", .ex = "true" },
123+
.{ .src = "evt.type", .ex = "bubbles" },
124+
.{ .src = "phase", .ex = "2" },
125+
.{ .src = "cur.getAttribute('id')", .ex = "content" },
126+
};
127+
try checkCases(js_env, &bubbles);
128+
129+
var bubbles_child = [_]Case{
130+
.{ .src = "nb = 0; evt = undefined; phase = undefined; cur = undefined", .ex = "undefined" },
131+
.{ .src = "para.dispatchEvent(new Event('bubbles', {bubbles: true}))", .ex = "true" },
132+
.{ .src = "nb", .ex = "1" },
133+
.{ .src = "evt instanceof Event", .ex = "true" },
134+
.{ .src = "evt.type", .ex = "bubbles" },
135+
.{ .src = "phase", .ex = "3" },
136+
.{ .src = "cur.getAttribute('id')", .ex = "content" },
137+
};
138+
try checkCases(js_env, &bubbles_child);
84139
}

0 commit comments

Comments
 (0)