From 6be5b807b3f8a92990454d6c7be8e9da2a2055cd Mon Sep 17 00:00:00 2001 From: James deBoer Date: Fri, 19 Jul 2013 14:38:45 -0700 Subject: [PATCH] fix(node cursor): Do not eat nodes --- lib/node_cursor.dart | 5 ++++- test/node_cursor_spec.dart | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/node_cursor.dart b/lib/node_cursor.dart index e93a372d4..0ef141163 100644 --- a/lib/node_cursor.dart +++ b/lib/node_cursor.dart @@ -95,8 +95,11 @@ class NodeCursor { var nodes = nodeList(); for (var i = 0, ii = nodes.length; i < ii; i++) { - nodes[i].remove(); + // NOTE(deboer): If elements is a list of child nodes on a node, then + // calling Node.remove() may also remove it from the list. Thus, we + // call elements.removeAt first so only one node is removed. elements.removeAt(index); + nodes[i].remove(); } return new NodeCursor(nodes); diff --git a/test/node_cursor_spec.dart b/test/node_cursor_spec.dart index 4dfb35edd..d5d978641 100644 --- a/test/node_cursor_spec.dart +++ b/test/node_cursor_spec.dart @@ -96,6 +96,16 @@ main() { expect(STRINGIFY(childCursor.elements[0]), equals('text')); }); + + it('should preserve the top-level elements', () { + var dom = $('textMoreText
other
'); + var parentCursor = new NodeCursor(dom); + + var childCursor = parentCursor.replaceWithAnchor('child'); + expect(STRINGIFY(dom), equals('[, MoreText,
other
]')); + + expect(STRINGIFY(childCursor.elements[0]), equals('text')); + }); }); }