From 9136585fe4fdea3e0b90cf7283dc305de76495b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yves=20G=C3=A9rardy?= Date: Fri, 20 Apr 2018 23:00:50 +0200 Subject: [PATCH] [DOM Mock] Fix insertBefore when the reference node follows the moving child in a nodeList --- test-utils/domMock.js | 1 + test-utils/tests/test-domMock.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/test-utils/domMock.js b/test-utils/domMock.js index 99bfff9a..e5c1f68c 100644 --- a/test-utils/domMock.js +++ b/test-utils/domMock.js @@ -101,6 +101,7 @@ module.exports = function(options) { if (index > -1) this.childNodes.splice(index, 1) if (reference === null) this.appendChild(child) else { + if (index !== -1 && refIndex > index) refIndex-- if (child.nodeType === 11) { this.childNodes.splice.apply(this.childNodes, [refIndex, 0].concat(child.childNodes)) while (child.firstChild) { diff --git a/test-utils/tests/test-domMock.js b/test-utils/tests/test-domMock.js index 5540bb86..e27d0bee 100644 --- a/test-utils/tests/test-domMock.js +++ b/test-utils/tests/test-domMock.js @@ -242,6 +242,28 @@ o.spec("domMock", function() { o(a.parentNode).equals(parent) o(b.parentNode).equals(parent) }) + o("moves existing node forward but not at the end", function() { + var parent = $document.createElement("div") + var a = $document.createElement("a") + var b = $document.createElement("b") + var c = $document.createElement("c") + parent.appendChild(a) + parent.appendChild(b) + parent.appendChild(c) + parent.insertBefore(a, c) + + o(parent.childNodes.length).equals(3) + o(parent.childNodes[0]).equals(b) + o(parent.childNodes[1]).equals(a) + o(parent.childNodes[2]).equals(c) + o(parent.firstChild).equals(b) + o(parent.firstChild.nextSibling).equals(a) + o(parent.firstChild.nextSibling.nextSibling).equals(c) + o(a.parentNode).equals(parent) + o(b.parentNode).equals(parent) + o(c.parentNode).equals(parent) + + }) o("removes from old parent", function() { var parent = $document.createElement("div") var source = $document.createElement("span")