diff --git a/libraries/stdlib/src/kotlin/dom/Dom.kt b/libraries/stdlib/src/kotlin/dom/Dom.kt index 37d81f17283..46443d72fde 100644 --- a/libraries/stdlib/src/kotlin/dom/Dom.kt +++ b/libraries/stdlib/src/kotlin/dom/Dom.kt @@ -202,23 +202,26 @@ fun Node.nextSiblings() : Iterator = NextSiblingIterator(this) class NextSiblingIterator(var node: Node) : AbstractIterator() { override fun computeNext(): Unit { - val next = node.getNextSibling() - if (next != null) { - setNext(next) + val nextValue = node.getNextSibling() + if (nextValue != null) { + setNext(nextValue) + node = nextValue } else { done() } } } + /** Returns an [[Iterator]] over the next siblings of this node */ fun Node.previousSiblings() : Iterator = PreviousSiblingIterator(this) class PreviousSiblingIterator(var node: Node) : AbstractIterator() { override fun computeNext(): Unit { - val next = node.getPreviousSibling() - if (next != null) { - setNext(next) + val nextValue = node.getPreviousSibling() + if (nextValue != null) { + setNext(nextValue) + node = nextValue } else { done() } diff --git a/libraries/stdlib/test/dom/NextSiblingTest.kt b/libraries/stdlib/test/dom/NextSiblingTest.kt new file mode 100644 index 00000000000..0c8649b8f11 --- /dev/null +++ b/libraries/stdlib/test/dom/NextSiblingTest.kt @@ -0,0 +1,50 @@ +package test.dom + +import kotlin.* +import kotlin.dom.* +import kotlin.util.* +import kotlin.test.* +import org.w3c.dom.* +import org.junit.Test as test + +class NextSiblingTest { + + test fun nextSibling() { + val doc = createDocument() + + doc.addElement("foo") { + id = "id1" + style = "bold" + classes = "bar" + addElement("child") { + id = "id2" + classes = "another" + addElement("grandChild") { + id = "id3" + classes = " bar tiny" + addText("Hello World!") + // TODO support neater syntax sugar for adding text? + // += "Hello World!" + } + addElement("grandChild2") { + id = "id4" + classes = "tiny thing bar " + addText("Hello World!") + // TODO support neater syntax sugar for adding text? + // += "Hello World!" + } + } + } + + println("builder document: ${doc.toXmlString()}") + + + val elems = doc["#id3"] + val element = elems.first() + val elements = element.nextElements().toList() + val nodes = element.nextSiblings().toList() + + assertEquals(1, elements.size()) + assertEquals(1, nodes.size()) + } +}