Skip to content

Commit 85d1488

Browse files
committed
migrate more tests to htmlRunner
1 parent 1e738dc commit 85d1488

File tree

11 files changed

+264
-299
lines changed

11 files changed

+264
-299
lines changed

src/browser/dom/MessageChannel.zig

Lines changed: 2 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -286,76 +286,6 @@ pub const MessageEvent = struct {
286286
};
287287

288288
const testing = @import("../../testing.zig");
289-
test "Browser.MessageChannel" {
290-
var runner = try testing.jsRunner(testing.tracking_allocator, .{
291-
.html = "",
292-
});
293-
defer runner.deinit();
294-
295-
try runner.testCases(&.{
296-
.{ "const mc1 = new MessageChannel()", null },
297-
.{ "mc1.port1 == mc1.port1", "true" },
298-
.{ "mc1.port2 == mc1.port2", "true" },
299-
.{ "mc1.port1 != mc1.port2", "true" },
300-
.{ "mc1.port1.postMessage('msg1');", "undefined" },
301-
.{
302-
\\ let message = null;
303-
\\ let target = null;
304-
\\ let currentTarget = null;
305-
\\ mc1.port2.onmessage = (e) => {
306-
\\ message = e.data;
307-
\\ target = e.target;
308-
\\ currentTarget = e.currentTarget;
309-
\\ };
310-
,
311-
null,
312-
},
313-
// as soon as onmessage is called, queued messages are delivered
314-
.{ "message", "msg1" },
315-
.{ "target == mc1.port2", "true" },
316-
.{ "currentTarget == mc1.port2", "true" },
317-
318-
.{ "mc1.port1.postMessage('msg2');", "undefined" },
319-
.{ "message", "msg2" },
320-
.{ "target == mc1.port2", "true" },
321-
.{ "currentTarget == mc1.port2", "true" },
322-
323-
.{ "message = null", null },
324-
.{ "mc1.port1.close();", null },
325-
.{ "mc1.port1.postMessage('msg3');", "undefined" },
326-
.{ "message", "null" },
327-
}, .{});
328-
329-
try runner.testCases(&.{
330-
.{ "const mc2 = new MessageChannel()", null },
331-
.{ "mc2.port2.postMessage('msg1');", "undefined" },
332-
.{ "mc2.port1.postMessage('msg2');", "undefined" },
333-
.{
334-
\\ let message1 = null;
335-
\\ mc2.port1.addEventListener('message', (e) => {
336-
\\ message1 = e.data;
337-
\\ });
338-
,
339-
null,
340-
},
341-
.{
342-
\\ let message2 = null;
343-
\\ mc2.port2.addEventListener('message', (e) => {
344-
\\ message2 = e.data;
345-
\\ });
346-
,
347-
null,
348-
},
349-
.{ "message1", "null" },
350-
.{ "message2", "null" },
351-
.{ "mc2.port2.start()", null },
352-
353-
.{ "message1", "null" },
354-
.{ "message2", "msg2" },
355-
.{ "message2 = null", null },
356-
357-
.{ "mc2.port1.start()", null },
358-
.{ "message1", "msg1" },
359-
.{ "message2", "null" },
360-
}, .{});
289+
test "Browser: DOM.MessageChannel" {
290+
try testing.htmlRunner("dom/message_channel.html");
361291
}

src/browser/dom/implementation.zig

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,7 @@ pub const DOMImplementation = struct {
5050
}
5151
};
5252

53-
// Tests
54-
// -----
55-
5653
const testing = @import("../../testing.zig");
57-
test "Browser.DOM.Implementation" {
58-
var runner = try testing.jsRunner(testing.tracking_allocator, .{});
59-
defer runner.deinit();
60-
61-
try runner.testCases(&.{
62-
.{ "let impl = document.implementation", "undefined" },
63-
.{ "impl.createHTMLDocument();", "[object HTMLDocument]" },
64-
.{ "const doc = impl.createHTMLDocument('foo');", "undefined" },
65-
.{ "doc", "[object HTMLDocument]" },
66-
.{ "doc.title", "foo" },
67-
.{ "doc.body", "[object HTMLBodyElement]" },
68-
.{ "impl.createDocument(null, 'foo');", "[object Document]" },
69-
.{ "impl.createDocumentType('foo', 'bar', 'baz')", "[object DocumentType]" },
70-
.{ "impl.hasFeature()", "true" },
71-
}, .{});
54+
test "Browser: DOM.Implementation" {
55+
try testing.htmlRunner("dom/implementation.html");
7256
}

src/browser/dom/intersection_observer.zig

Lines changed: 2 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -181,110 +181,6 @@ pub const IntersectionObserverEntry = struct {
181181
};
182182

183183
const testing = @import("../../testing.zig");
184-
test "Browser.DOM.IntersectionObserver" {
185-
var runner = try testing.jsRunner(testing.tracking_allocator, .{});
186-
defer runner.deinit();
187-
188-
try runner.testCases(&.{
189-
.{ "new IntersectionObserver(() => {}).observe(document.documentElement);", "undefined" },
190-
}, .{});
191-
192-
try runner.testCases(&.{
193-
.{ "let count_a = 0;", "undefined" },
194-
.{ "const a1 = document.createElement('div');", "undefined" },
195-
.{ "new IntersectionObserver(entries => {count_a += 1;}).observe(a1);", "undefined" },
196-
.{ "count_a;", "1" },
197-
}, .{});
198-
199-
// This test is documenting current behavior, not correct behavior.
200-
// Currently every time observe is called, the callback is called with all entries.
201-
try runner.testCases(&.{
202-
.{ "let count_b = 0;", "undefined" },
203-
.{ "let observer_b = new IntersectionObserver(entries => {count_b = entries.length;});", "undefined" },
204-
.{ "const b1 = document.createElement('div');", "undefined" },
205-
.{ "observer_b.observe(b1);", "undefined" },
206-
.{ "count_b;", "1" },
207-
.{ "const b2 = document.createElement('div');", "undefined" },
208-
.{ "observer_b.observe(b2);", "undefined" },
209-
.{ "count_b;", "2" },
210-
}, .{});
211-
212-
// Re-observing is a no-op
213-
try runner.testCases(&.{
214-
.{ "let count_bb = 0;", "undefined" },
215-
.{ "let observer_bb = new IntersectionObserver(entries => {count_bb = entries.length;});", "undefined" },
216-
.{ "const bb1 = document.createElement('div');", "undefined" },
217-
.{ "observer_bb.observe(bb1);", "undefined" },
218-
.{ "count_bb;", "1" },
219-
.{ "observer_bb.observe(bb1);", "undefined" },
220-
.{ "count_bb;", "1" }, // Still 1, not 2
221-
}, .{});
222-
223-
// Unobserve
224-
try runner.testCases(&.{
225-
.{ "let count_c = 0;", "undefined" },
226-
.{ "let observer_c = new IntersectionObserver(entries => { count_c = entries.length;});", "undefined" },
227-
.{ "const c1 = document.createElement('div');", "undefined" },
228-
.{ "observer_c.observe(c1);", "undefined" },
229-
.{ "count_c;", "1" },
230-
.{ "observer_c.unobserve(c1);", "undefined" },
231-
.{ "const c2 = document.createElement('div');", "undefined" },
232-
.{ "observer_c.observe(c2);", "undefined" },
233-
.{ "count_c;", "1" },
234-
}, .{});
235-
236-
// Disconnect
237-
try runner.testCases(&.{
238-
.{ "let observer_d = new IntersectionObserver(entries => {});", "undefined" },
239-
.{ "let d1 = document.createElement('div');", "undefined" },
240-
.{ "observer_d.observe(d1);", "undefined" },
241-
.{ "observer_d.disconnect();", "undefined" },
242-
.{ "observer_d.takeRecords().length;", "0" },
243-
}, .{});
244-
245-
// takeRecords
246-
try runner.testCases(&.{
247-
.{ "let observer_e = new IntersectionObserver(entries => {});", "undefined" },
248-
.{ "let e1 = document.createElement('div');", "undefined" },
249-
.{ "observer_e.observe(e1);", "undefined" },
250-
.{ "const e2 = document.createElement('div');", "undefined" },
251-
.{ "observer_e.observe(e2);", "undefined" },
252-
.{ "observer_e.takeRecords().length;", "2" },
253-
}, .{});
254-
255-
// Entry
256-
try runner.testCases(&.{
257-
.{ "let entry;", "undefined" },
258-
.{ "let div1 = document.createElement('div')", null },
259-
.{ "document.body.appendChild(div1);", null },
260-
.{ "new IntersectionObserver(entries => { entry = entries[0]; }).observe(div1);", null },
261-
.{ "entry.boundingClientRect.x;", "0" },
262-
.{ "entry.intersectionRatio;", "1" },
263-
.{ "entry.intersectionRect.x;", "0" },
264-
.{ "entry.intersectionRect.y;", "0" },
265-
.{ "entry.intersectionRect.width;", "1" },
266-
.{ "entry.intersectionRect.height;", "1" },
267-
.{ "entry.isIntersecting;", "true" },
268-
.{ "entry.rootBounds.x;", "0" },
269-
.{ "entry.rootBounds.y;", "0" },
270-
.{ "entry.rootBounds.width;", "1" },
271-
.{ "entry.rootBounds.height;", "1" },
272-
.{ "entry.target;", "[object HTMLDivElement]" },
273-
}, .{});
274-
275-
// Options
276-
try runner.testCases(&.{
277-
.{ "const new_root = document.createElement('span');", null },
278-
.{ "document.body.appendChild(new_root);", null },
279-
.{ "let new_entry;", "undefined" },
280-
.{
281-
\\ const new_observer = new IntersectionObserver(
282-
\\ entries => { new_entry = entries[0]; },
283-
\\ {root: new_root, rootMargin: '0px 0px 0px 0px', threshold: [0]});
284-
,
285-
"undefined",
286-
},
287-
.{ "new_observer.observe(document.createElement('div'));", "undefined" },
288-
.{ "new_entry.rootBounds.x;", "1" },
289-
}, .{});
184+
test "Browser: DOM.IntersectionObserver" {
185+
try testing.htmlRunner("dom/intersection_observer.html");
290186
}

src/browser/dom/mutation_observer.zig

Lines changed: 2 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -353,85 +353,6 @@ const MutationEventType = enum {
353353
};
354354

355355
const testing = @import("../../testing.zig");
356-
test "Browser.DOM.MutationObserver" {
357-
var runner = try testing.jsRunner(testing.tracking_allocator, .{});
358-
defer runner.deinit();
359-
360-
try runner.testCases(&.{
361-
.{ "new MutationObserver(() => {}).observe(document, { childList: true });", "undefined" },
362-
}, .{});
363-
364-
try runner.testCases(&.{
365-
.{
366-
\\ var nb = 0;
367-
\\ var mrs;
368-
\\ new MutationObserver((mu) => {
369-
\\ mrs = mu;
370-
\\ nb++;
371-
\\ }).observe(document.firstElementChild, { attributes: true, attributeOldValue: true });
372-
\\ document.firstElementChild.setAttribute("foo", "bar");
373-
\\ // ignored b/c it's about another target.
374-
\\ document.firstElementChild.firstChild.setAttribute("foo", "bar");
375-
,
376-
null,
377-
},
378-
.{ "nb", "1" },
379-
.{ "mrs[0].type", "attributes" },
380-
.{ "mrs[0].target == document.firstElementChild", "true" },
381-
.{ "mrs[0].target.getAttribute('foo')", "bar" },
382-
.{ "mrs[0].attributeName", "foo" },
383-
.{ "mrs[0].oldValue", "null" },
384-
}, .{});
385-
386-
try runner.testCases(&.{
387-
.{
388-
\\ var node = document.getElementById("para").firstChild;
389-
\\ var nb2 = 0;
390-
\\ var mrs2;
391-
\\ new MutationObserver((mu) => {
392-
\\ mrs2 = mu;
393-
\\ nb2++;
394-
\\ }).observe(node, { characterData: true, characterDataOldValue: true });
395-
\\ node.data = "foo";
396-
,
397-
null,
398-
},
399-
.{ "nb2", "1" },
400-
.{ "mrs2[0].type", "characterData" },
401-
.{ "mrs2[0].target == node", "true" },
402-
.{ "mrs2[0].target.data", "foo" },
403-
.{ "mrs2[0].oldValue", " And" },
404-
}, .{});
405-
406-
// tests that mutation observers that have a callback which trigger the
407-
// mutation observer don't crash.
408-
// https://github.com/lightpanda-io/browser/issues/550
409-
try runner.testCases(&.{
410-
.{
411-
\\ var node = document.getElementById("para");
412-
\\ new MutationObserver(() => {
413-
\\ node.innerText = 'a';
414-
\\ }).observe(document, { subtree:true,childList:true });
415-
\\ node.innerText = "2";
416-
,
417-
null,
418-
},
419-
.{ "node.innerText", "a" },
420-
}, .{});
421-
422-
try runner.testCases(&.{
423-
.{
424-
\\ var node = document.getElementById("para");
425-
\\ var attrWatch = 0;
426-
\\ new MutationObserver(() => {
427-
\\ attrWatch++;
428-
\\ }).observe(document, { attributeFilter: ["name"], subtree: true });
429-
\\ node.setAttribute("id", "1");
430-
,
431-
null,
432-
},
433-
.{ "attrWatch", "0" },
434-
.{ "node.setAttribute('name', 'other');", null },
435-
.{ "attrWatch", "1" },
436-
}, .{});
356+
test "Browser: DOM.MutationObserver" {
357+
try testing.htmlRunner("dom/mutation_observer.html");
437358
}

src/browser/dom/namednodemap.zig

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -115,26 +115,7 @@ pub const NamedNodeMapIterator = struct {
115115
}
116116
};
117117

118-
// Tests
119-
// -----
120-
121118
const testing = @import("../../testing.zig");
122-
test "Browser.DOM.NamedNodeMap" {
123-
var runner = try testing.jsRunner(testing.tracking_allocator, .{});
124-
defer runner.deinit();
125-
126-
try runner.testCases(&.{
127-
.{ "let a = document.getElementById('content').attributes", "undefined" },
128-
.{ "a.length", "1" },
129-
.{ "a.item(0)", "[object Attr]" },
130-
.{ "a.item(1)", "null" },
131-
.{ "a.getNamedItem('id')", "[object Attr]" },
132-
.{ "a.getNamedItem('foo')", "null" },
133-
.{ "a.setNamedItem(a.getNamedItem('id'))", "[object Attr]" },
134-
.{ "a['id'].name", "id" },
135-
.{ "a['id'].value", "content" },
136-
.{ "a['other']", "undefined" },
137-
.{ "a[0].value = 'abc123'", null },
138-
.{ "a[0].value", "abc123" },
139-
}, .{});
119+
test "Browser: DOM.NamedNodeMap" {
120+
try testing.htmlRunner("dom/named_node_map.html");
140121
}

src/tests/dom/implementation.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<script src="../testing.js"></script>
2+
<script id=implementation>
3+
let impl = document.implementation;
4+
testing.expectEqual("[object HTMLDocument]", impl.createHTMLDocument().toString());;
5+
6+
const doc = impl.createHTMLDocument('foo');
7+
testing.expectEqual("[object HTMLDocument]", doc.toString());
8+
testing.expectEqual("foo", doc.title);
9+
testing.expectEqual("[object HTMLBodyElement]", doc.body.toString());
10+
testing.expectEqual("[object Document]", impl.createDocument(null, 'foo').toString());
11+
testing.expectEqual("[object DocumentType]", impl.createDocumentType('foo', 'bar', 'baz').toString());
12+
testing.expectEqual(true, impl.hasFeature());
13+
</script>

0 commit comments

Comments
 (0)