Skip to content

Commit 1e738dc

Browse files
authored
Merge pull request #1023 from lightpanda-io/migrate_some_tests_6
migrate more tests to htmlRunner
2 parents b5ffd8d + 15628d9 commit 1e738dc

File tree

8 files changed

+224
-226
lines changed

8 files changed

+224
-226
lines changed

src/browser/dom/event_target.zig

Lines changed: 2 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -154,134 +154,6 @@ pub const EventTarget = struct {
154154
};
155155

156156
const testing = @import("../../testing.zig");
157-
test "Browser.DOM.EventTarget" {
158-
var runner = try testing.jsRunner(testing.tracking_allocator, .{});
159-
defer runner.deinit();
160-
161-
try runner.testCases(&.{
162-
.{ "new EventTarget()", "[object EventTarget]" },
163-
}, .{});
164-
165-
try runner.testCases(&.{
166-
.{ "let content = document.getElementById('content')", "undefined" },
167-
.{ "let para = document.getElementById('para')", "undefined" },
168-
// NOTE: as some event properties will change during the event dispatching phases
169-
// we need to copy thoses values in order to check them afterwards
170-
.{
171-
\\ var nb = 0; var evt; var phase; var cur;
172-
\\ function cbk(event) {
173-
\\ evt = event;
174-
\\ phase = event.eventPhase;
175-
\\ cur = event.currentTarget;
176-
\\ nb ++;
177-
\\ }
178-
,
179-
"undefined",
180-
},
181-
}, .{});
182-
183-
try runner.testCases(&.{
184-
.{ "content.addEventListener('basic', cbk)", "undefined" },
185-
.{ "content.dispatchEvent(new Event('basic'))", "true" },
186-
.{ "nb", "1" },
187-
.{ "evt instanceof Event", "true" },
188-
.{ "evt.type", "basic" },
189-
.{ "phase", "2" },
190-
.{ "cur.getAttribute('id')", "content" },
191-
}, .{});
192-
193-
try runner.testCases(&.{
194-
.{ "nb = 0; evt = undefined; phase = undefined; cur = undefined", "undefined" },
195-
.{ "para.dispatchEvent(new Event('basic'))", "true" },
196-
.{ "nb", "0" }, // handler is not called, no capture, not the target, no bubbling
197-
.{ "evt === undefined", "true" },
198-
}, .{});
199-
200-
try runner.testCases(&.{
201-
.{ "nb = 0", "0" },
202-
.{ "content.addEventListener('basic', cbk)", "undefined" },
203-
.{ "content.dispatchEvent(new Event('basic'))", "true" },
204-
.{ "nb", "1" },
205-
}, .{});
206-
207-
try runner.testCases(&.{
208-
.{ "nb = 0", "0" },
209-
.{ "content.addEventListener('basic', cbk, true)", "undefined" },
210-
.{ "content.dispatchEvent(new Event('basic'))", "true" },
211-
.{ "nb", "2" },
212-
}, .{});
213-
214-
try runner.testCases(&.{
215-
.{ "nb = 0", "0" },
216-
.{ "content.removeEventListener('basic', cbk)", "undefined" },
217-
.{ "content.dispatchEvent(new Event('basic'))", "true" },
218-
.{ "nb", "1" },
219-
}, .{});
220-
221-
try runner.testCases(&.{
222-
.{ "nb = 0", "0" },
223-
.{ "content.removeEventListener('basic', cbk, {capture: true})", "undefined" },
224-
.{ "content.dispatchEvent(new Event('basic'))", "true" },
225-
.{ "nb", "0" },
226-
}, .{});
227-
228-
try runner.testCases(&.{
229-
.{ "nb = 0; evt = undefined; phase = undefined; cur = undefined", "undefined" },
230-
.{ "content.addEventListener('capture', cbk, true)", "undefined" },
231-
.{ "content.dispatchEvent(new Event('capture'))", "true" },
232-
.{ "nb", "1" },
233-
.{ "evt instanceof Event", "true" },
234-
.{ "evt.type", "capture" },
235-
.{ "phase", "2" },
236-
.{ "cur.getAttribute('id')", "content" },
237-
}, .{});
238-
239-
try runner.testCases(&.{
240-
.{ "nb = 0; evt = undefined; phase = undefined; cur = undefined", "undefined" },
241-
.{ "para.dispatchEvent(new Event('capture'))", "true" },
242-
.{ "nb", "1" },
243-
.{ "evt instanceof Event", "true" },
244-
.{ "evt.type", "capture" },
245-
.{ "phase", "1" },
246-
.{ "cur.getAttribute('id')", "content" },
247-
}, .{});
248-
249-
try runner.testCases(&.{
250-
.{ "nb = 0; evt = undefined; phase = undefined; cur = undefined", "undefined" },
251-
.{ "content.addEventListener('bubbles', cbk)", "undefined" },
252-
.{ "content.dispatchEvent(new Event('bubbles', {bubbles: true}))", "true" },
253-
.{ "nb", "1" },
254-
.{ "evt instanceof Event", "true" },
255-
.{ "evt.type", "bubbles" },
256-
.{ "evt.bubbles", "true" },
257-
.{ "phase", "2" },
258-
.{ "cur.getAttribute('id')", "content" },
259-
}, .{});
260-
261-
try runner.testCases(&.{
262-
.{ "nb = 0; evt = undefined; phase = undefined; cur = undefined", "undefined" },
263-
.{ "para.dispatchEvent(new Event('bubbles', {bubbles: true}))", "true" },
264-
.{ "nb", "1" },
265-
.{ "evt instanceof Event", "true" },
266-
.{ "evt.type", "bubbles" },
267-
.{ "phase", "3" },
268-
.{ "cur.getAttribute('id')", "content" },
269-
}, .{});
270-
271-
try runner.testCases(&.{
272-
.{ "const obj1 = {calls: 0, handleEvent: function() { this.calls += 1; } };", null },
273-
.{ "content.addEventListener('he', obj1);", null },
274-
.{ "content.dispatchEvent(new Event('he'));", null },
275-
.{ "obj1.calls", "1" },
276-
277-
.{ "content.removeEventListener('he', obj1);", null },
278-
.{ "content.dispatchEvent(new Event('he'));", null },
279-
.{ "obj1.calls", "1" },
280-
}, .{});
281-
282-
// doesn't crash on null receiver
283-
try runner.testCases(&.{
284-
.{ "content.addEventListener('he2', null);", null },
285-
.{ "content.dispatchEvent(new Event('he2'));", null },
286-
}, .{});
157+
test "Browser: DOM.EventTarget" {
158+
try testing.htmlRunner("dom/event_target.html");
287159
}

src/browser/dom/exceptions.zig

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -219,47 +219,6 @@ pub const DOMException = struct {
219219
};
220220

221221
const testing = @import("../../testing.zig");
222-
test "Browser.DOM.Exception" {
223-
var runner = try testing.jsRunner(testing.tracking_allocator, .{});
224-
defer runner.deinit();
225-
226-
const err = "Failed to execute 'appendChild' on 'Node': The new child element contains the parent.";
227-
try runner.testCases(&.{
228-
.{ "let content = document.getElementById('content')", "undefined" },
229-
.{ "let link = document.getElementById('link')", "undefined" },
230-
// HierarchyRequestError
231-
.{
232-
\\ var he;
233-
\\ try { link.appendChild(content) } catch (error) { he = error}
234-
\\ he.name
235-
,
236-
"HierarchyRequestError",
237-
},
238-
.{ "he.code", "3" },
239-
.{ "he.message", err },
240-
.{ "he.toString()", "HierarchyRequestError: " ++ err },
241-
.{ "he instanceof DOMException", "true" },
242-
.{ "he instanceof Error", "true" },
243-
}, .{});
244-
245-
// Test DOMException constructor
246-
try runner.testCases(&.{
247-
.{ "let exc0 = new DOMException()", "undefined" },
248-
.{ "exc0.name", "Error" },
249-
.{ "exc0.code", "0" },
250-
.{ "exc0.message", "" },
251-
.{ "exc0.toString()", "Error" },
252-
253-
.{ "let exc1 = new DOMException('Sandwich malfunction')", "undefined" },
254-
.{ "exc1.name", "Error" },
255-
.{ "exc1.code", "0" },
256-
.{ "exc1.message", "Sandwich malfunction" },
257-
.{ "exc1.toString()", "Error: Sandwich malfunction" },
258-
259-
.{ "let exc2 = new DOMException('Caterpillar turned into a butterfly', 'NoModificationAllowedError')", "undefined" },
260-
.{ "exc2.name", "NoModificationAllowedError" },
261-
.{ "exc2.code", "7" },
262-
.{ "exc2.message", "Caterpillar turned into a butterfly" },
263-
.{ "exc2.toString()", "NoModificationAllowedError: Caterpillar turned into a butterfly" },
264-
}, .{});
222+
test "Browser: DOM.Exceptions" {
223+
try testing.htmlRunner("dom/exceptions.html");
265224
}

src/browser/dom/html_collection.zig

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -462,52 +462,6 @@ pub const HTMLCollection = struct {
462462
};
463463

464464
const testing = @import("../../testing.zig");
465-
test "Browser.DOM.HTMLCollection" {
466-
var runner = try testing.jsRunner(testing.tracking_allocator, .{});
467-
defer runner.deinit();
468-
469-
try runner.testCases(&.{
470-
.{ "let getElementsByTagName = document.getElementsByTagName('p')", "undefined" },
471-
.{ "getElementsByTagName.length", "2" },
472-
.{ "let getElementsByTagNameCI = document.getElementsByTagName('P')", "undefined" },
473-
.{ "getElementsByTagNameCI.length", "2" },
474-
.{ "getElementsByTagName.item(0).localName", "p" },
475-
.{ "getElementsByTagName.item(1).localName", "p" },
476-
.{ "let getElementsByTagNameAll = document.getElementsByTagName('*')", "undefined" },
477-
.{ "getElementsByTagNameAll.length", "8" },
478-
.{ "getElementsByTagNameAll.item(0).localName", "html" },
479-
.{ "getElementsByTagNameAll.item(0).localName", "html" },
480-
.{ "getElementsByTagNameAll.item(1).localName", "head" },
481-
.{ "getElementsByTagNameAll.item(0).localName", "html" },
482-
.{ "getElementsByTagNameAll.item(2).localName", "body" },
483-
.{ "getElementsByTagNameAll.item(3).localName", "div" },
484-
.{ "getElementsByTagNameAll.item(7).localName", "p" },
485-
.{ "getElementsByTagNameAll.namedItem('para-empty-child').localName", "span" },
486-
487-
// array like
488-
.{ "getElementsByTagNameAll[0].localName", "html" },
489-
.{ "getElementsByTagNameAll[7].localName", "p" },
490-
.{ "getElementsByTagNameAll[8]", "undefined" },
491-
.{ "getElementsByTagNameAll['para-empty-child'].localName", "span" },
492-
.{ "getElementsByTagNameAll['foo']", "undefined" },
493-
494-
.{ "document.getElementById('content').getElementsByTagName('*').length", "4" },
495-
.{ "document.getElementById('content').getElementsByTagName('p').length", "2" },
496-
.{ "document.getElementById('content').getElementsByTagName('div').length", "0" },
497-
498-
.{ "document.children.length", "1" },
499-
.{ "document.getElementById('content').children.length", "3" },
500-
501-
// check liveness
502-
.{ "let content = document.getElementById('content')", "undefined" },
503-
.{ "let pe = document.getElementById('para-empty')", "undefined" },
504-
.{ "let p = document.createElement('p')", "undefined" },
505-
.{ "p.textContent = 'OK live'", "OK live" },
506-
.{ "getElementsByTagName.item(1).textContent", " And" },
507-
.{ "content.appendChild(p) != undefined", "true" },
508-
.{ "getElementsByTagName.length", "3" },
509-
.{ "getElementsByTagName.item(2).textContent", "OK live" },
510-
.{ "content.insertBefore(p, pe) != undefined", "true" },
511-
.{ "getElementsByTagName.item(0).textContent", "OK live" },
512-
}, .{});
465+
test "Browser: DOM.HTMLCollection" {
466+
try testing.htmlRunner("dom/html_collection.html");
513467
}

src/tests/dom/event_target.html

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
<script src="../testing.js"></script>
2+
3+
<div id="content"><p id=para></p></div>
4+
5+
<script id=eventTarget>
6+
testing.expectEqual('[object EventTarget]', new EventTarget().toString());
7+
8+
let content = $('#content');
9+
let para = $('#para');
10+
11+
var nb = 0;
12+
var evt;
13+
var phase;
14+
var cur;
15+
16+
function reset() {
17+
nb = 0;
18+
evt = undefined;
19+
phase = undefined;
20+
cur = undefined;
21+
}
22+
23+
function cbk(event) {
24+
evt = event;
25+
phase = event.eventPhase;
26+
cur = event.currentTarget;
27+
nb++;
28+
}
29+
30+
content.addEventListener('basic', cbk);
31+
content.dispatchEvent(new Event('basic'));
32+
testing.expectEqual(1, nb);
33+
testing.expectEqual(true, evt instanceof Event);
34+
testing.expectEqual('basic', evt.type);
35+
testing.expectEqual(2, phase);
36+
testing.expectEqual('content', cur.getAttribute('id'));
37+
38+
reset();
39+
para.dispatchEvent(new Event('basic'))
40+
41+
// handler is not called, no capture, not the targeno bubbling
42+
testing.expectEqual(0, nb);
43+
testing.expectEqual(undefined, evt);
44+
45+
reset();
46+
content.addEventListener('basic', cbk);
47+
content.dispatchEvent(new Event('basic'))
48+
testing.expectEqual(1, nb);
49+
50+
reset();
51+
content.addEventListener('basic', cbk, true);
52+
content.dispatchEvent(new Event('basic'));
53+
testing.expectEqual(2, nb);
54+
55+
reset()
56+
content.removeEventListener('basic', cbk);
57+
content.dispatchEvent(new Event('basic'));
58+
testing.expectEqual(1, nb);
59+
60+
reset();
61+
content.removeEventListener('basic', cbk, {capture: true});
62+
content.dispatchEvent(new Event('basic'));
63+
testing.expectEqual(0, nb);
64+
65+
reset();
66+
content.addEventListener('capture', cbk, true);
67+
content.dispatchEvent(new Event('capture'));
68+
testing.expectEqual(1, nb);
69+
testing.expectEqual(true, evt instanceof Event);
70+
testing.expectEqual('capture', evt.type);
71+
testing.expectEqual(2, phase);
72+
testing.expectEqual('content', cur.getAttribute('id'));
73+
74+
reset();
75+
para.dispatchEvent(new Event('capture'));
76+
testing.expectEqual(1, nb);
77+
testing.expectEqual(true, evt instanceof Event);
78+
testing.expectEqual('capture', evt.type);
79+
testing.expectEqual(1, phase);
80+
testing.expectEqual('content', cur.getAttribute('id'));
81+
82+
reset();
83+
content.addEventListener('bubbles', cbk);
84+
content.dispatchEvent(new Event('bubbles', {bubbles: true}));
85+
testing.expectEqual(1, nb);
86+
testing.expectEqual(true, evt instanceof Event);
87+
testing.expectEqual('bubbles', evt.type);
88+
testing.expectEqual(2, phase);
89+
testing.expectEqual('content', cur.getAttribute('id'));
90+
91+
reset();
92+
para.dispatchEvent(new Event('bubbles', {bubbles: true}));
93+
testing.expectEqual(1, nb);
94+
testing.expectEqual(true, evt instanceof Event);
95+
testing.expectEqual('bubbles', evt.type);
96+
testing.expectEqual(3, phase);
97+
testing.expectEqual('content', cur.getAttribute('id'));
98+
99+
100+
const obj1 = {
101+
calls: 0,
102+
handleEvent: function() { this.calls += 1 }
103+
};
104+
content.addEventListener('he', obj1);
105+
content.dispatchEvent(new Event('he'));
106+
testing.expectEqual(1, obj1.calls);
107+
108+
content.removeEventListener('he', obj1);
109+
content.dispatchEvent(new Event('he'));
110+
testing.expectEqual(1, obj1.calls);
111+
112+
// doesn't crash on null receiver
113+
content.addEventListener('he2', null);
114+
content.dispatchEvent(new Event('he2'));
115+
</script>

src/tests/dom/exceptions.html

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<script src="../testing.js"></script>
2+
3+
<div id="content">
4+
<a id="link" href="foo" class="ok">OK</a>
5+
</div>
6+
7+
<script id=exceptions>
8+
let content = $('#content');
9+
let link = $('#link');
10+
11+
testing.withError((err) => {
12+
const msg = "Failed to execute 'appendChild' on 'Node': The new child element contains the parent.";
13+
testing.expectEqual(3, err.code);
14+
testing.expectEqual(msg, err.message);
15+
testing.expectEqual('HierarchyRequestError: ' + msg, err.toString());
16+
testing.expectEqual(true, err instanceof DOMException);
17+
testing.expectEqual(true, err instanceof Error);
18+
}, () => link.appendChild(content));
19+
</script>
20+
21+
<script id=constructor>
22+
let exc0 = new DOMException();
23+
testing.expectEqual('Error', exc0.name);
24+
testing.expectEqual(0, exc0.code);
25+
testing.expectEqual('', exc0.message);
26+
testing.expectEqual('Error', exc0.toString());
27+
28+
let exc1 = new DOMException('Sandwich malfunction');
29+
testing.expectEqual('Error', exc1.name);
30+
testing.expectEqual(0, exc1.code);
31+
testing.expectEqual('Sandwich malfunction', exc1.message);
32+
testing.expectEqual('Error: Sandwich malfunction', exc1.toString());
33+
34+
let exc2 = new DOMException('Caterpillar turned into a butterfly', 'NoModificationAllowedError');
35+
testing.expectEqual('NoModificationAllowedError', exc2.name);
36+
testing.expectEqual(7, exc2.code);
37+
testing.expectEqual('Caterpillar turned into a butterfly', exc2.message);
38+
testing.expectEqual('NoModificationAllowedError: Caterpillar turned into a butterfly', exc2.toString());
39+
</script>

0 commit comments

Comments
 (0)