This commit is contained in:
Pierre Tachoire
2025-08-05 14:47:25 +02:00
parent bd9e4dbc79
commit b2b2e97edc

View File

@@ -201,11 +201,11 @@ pub const Node = struct {
const self_owner = try parser.nodeOwnerDocument(self); const self_owner = try parser.nodeOwnerDocument(self);
const child_owner = try parser.nodeOwnerDocument(child); const child_owner = try parser.nodeOwnerDocument(child);
// If the node to be inserted has a different ownerDocument than the parent node, // If the node to be inserted has a different ownerDocument than the parent node,
// modern browsers automatically adopt the node and its descendants into // modern browsers automatically adopt the node and its descendants into
// the parent's ownerDocument. // the parent's ownerDocument.
// This process is known as adoption. // This process is known as adoption.
// (7.1) https://dom.spec.whatwg.org/#concept-node-insert // (7.1) https://dom.spec.whatwg.org/#concept-node-insert
if (child_owner == null or (child_owner.? != self_owner.?)) { if (child_owner == null or (child_owner.? != self_owner.?)) {
const w = Walker{}; const w = Walker{};
var current = child; var current = child;
@@ -757,7 +757,7 @@ test "Browser.DOM.node" {
} }
test "Browser.DOM.node.owner" { test "Browser.DOM.node.owner" {
var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html= var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html =
\\ <div id="target-container"> \\ <div id="target-container">
\\ <p id="reference-node"> \\ <p id="reference-node">
\\ I am the original reference node. \\ I am the original reference node.
@@ -771,12 +771,9 @@ test "Browser.DOM.node.owner" {
.{ .{
\\ const parser = new DOMParser(); \\ const parser = new DOMParser();
\\ const newDoc = parser.parseFromString('<div id="new-node"><p>Hey</p><span>Marked</span></div>', 'text/html'); \\ const newDoc = parser.parseFromString('<div id="new-node"><p>Hey</p><span>Marked</span></div>', 'text/html');
\\ const newNode = newDoc.getElementById('new-node'); \\ const newNode = newDoc.getElementById('new-node');
\\ const parent = document.getElementById('target-container'); \\ const parent = document.getElementById('target-container');
\\ const referenceNode = document.getElementById('reference-node'); \\ const referenceNode = document.getElementById('reference-node');
\\ parent.insertBefore(newNode, referenceNode); \\ parent.insertBefore(newNode, referenceNode);
\\ const k = document.getElementById('new-node'); \\ const k = document.getElementById('new-node');
\\ const ptag = k.querySelector('p'); \\ const ptag = k.querySelector('p');
@@ -785,18 +782,18 @@ test "Browser.DOM.node.owner" {
\\ const anotherNewNode = anotherDoc.getElementById('another-new-node'); \\ const anotherNewNode = anotherDoc.getElementById('another-new-node');
\\ \\
\\ parent.appendChild(anotherNewNode) \\ parent.appendChild(anotherNewNode)
, ,
"[object HTMLDivElement]", "[object HTMLDivElement]",
}, },
.{"parent.ownerDocument === newNode.ownerDocument", "true" }, .{ "parent.ownerDocument === newNode.ownerDocument", "true" },
.{"parent.ownerDocument === anotherNewNode.ownerDocument", "true"}, .{ "parent.ownerDocument === anotherNewNode.ownerDocument", "true" },
.{"newNode.firstChild.nodeName", "P"}, .{ "newNode.firstChild.nodeName", "P" },
.{"ptag.ownerDocument === parent.ownerDocument", "true"}, .{ "ptag.ownerDocument === parent.ownerDocument", "true" },
.{"spanTag.ownerDocument === parent.ownerDocument", "true"}, .{ "spanTag.ownerDocument === parent.ownerDocument", "true" },
.{"parent.contains(newNode)", "true"}, .{ "parent.contains(newNode)", "true" },
.{"parent.contains(anotherNewNode)", "true"}, .{ "parent.contains(anotherNewNode)", "true" },
.{"anotherDoc.contains(anotherNewNode)", "false"}, .{ "anotherDoc.contains(anotherNewNode)", "false" },
.{"newDoc.contains(newNode)", "false"}, .{ "newDoc.contains(newNode)", "false" },
}, .{}); }, .{});
} }