136 lines
4.4 KiB
Kotlin
136 lines
4.4 KiB
Kotlin
package test.dom
|
|
|
|
import kotlin.dom.*
|
|
import kotlin.test.*
|
|
import org.w3c.dom.*
|
|
import org.junit.Test as test
|
|
|
|
class DomBuilderTest() {
|
|
|
|
test fun buildDocument() {
|
|
var doc = createDocument()
|
|
|
|
assertTrue {
|
|
doc["grandchild"].isEmpty()
|
|
}
|
|
|
|
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 = "id3"
|
|
classes = "tiny thing bar "
|
|
addText("Hello World!")
|
|
// TODO support neater syntax sugar for adding text?
|
|
// += "Hello World!"
|
|
}
|
|
}
|
|
}
|
|
println("builder document: ${doc.toXmlString()}")
|
|
|
|
|
|
// test css selections on document
|
|
assertEquals(0, doc[".doesNotExist"].size())
|
|
assertEquals(1, doc[".another"].size())
|
|
assertEquals(3, doc[".bar"].size())
|
|
assertEquals(2, doc[".tiny"].size())
|
|
|
|
// element tag selections
|
|
assertEquals(0, doc["doesNotExist"].size())
|
|
assertEquals(1, doc["foo"].size())
|
|
assertEquals(1, doc["child"].size())
|
|
assertEquals(1, doc["grandChild"].size())
|
|
|
|
// id selections
|
|
assertEquals(1, doc["#id1"].size())
|
|
assertEquals(1, doc["#id2"].size())
|
|
assertEquals(1, doc["#id3"].size())
|
|
|
|
val root = doc.documentElement
|
|
if (root == null) {
|
|
fail("No root!")
|
|
} else {
|
|
assertTrue {
|
|
root.hasClass("bar")
|
|
}
|
|
|
|
// test css selections on element
|
|
assertEquals(0, root[".doesNotExist"].size())
|
|
assertEquals(1, root[".another"].size())
|
|
assertEquals(2, root[".bar"].size())
|
|
assertEquals(2, root[".tiny"].size())
|
|
|
|
// element tag selections
|
|
assertEquals(0, root["doesNotExist"].size())
|
|
assertEquals(0, root["foo"].size())
|
|
assertEquals(1, root["child"].size())
|
|
assertEquals(1, root["grandChild"].size())
|
|
|
|
// id selections
|
|
assertEquals(1, root["#id1"].size())
|
|
assertEquals(1, root["#id2"].size())
|
|
assertEquals(1, root["#id3"].size())
|
|
|
|
// iterating through next element siblings
|
|
for (e in root.nextElements()) {
|
|
println("found element: $e")
|
|
}
|
|
|
|
}
|
|
val grandChild = doc["grandChild"].first
|
|
if (grandChild != null) {
|
|
println("got element ${grandChild.toXmlString()} with text '${grandChild.text}`")
|
|
assertEquals("Hello World!", grandChild.text)
|
|
assertEquals(" bar tiny", grandChild.attribute("class"))
|
|
|
|
// test the classSet
|
|
val classSet = grandChild.classSet
|
|
|
|
assertTrue(classSet.contains("bar"))
|
|
assertTrue(classSet.contains("tiny"))
|
|
assertTrue(classSet.size == 2 )
|
|
assertFalse(classSet.contains("doesNotExist"))
|
|
|
|
// lets add a new class and some existing classes
|
|
grandChild.addClass("bar")
|
|
grandChild.addClass("newThingy")
|
|
assertEquals("bar tiny newThingy", grandChild.classes)
|
|
|
|
// remove
|
|
grandChild.removeClass("bar")
|
|
assertEquals("tiny newThingy", grandChild.classes)
|
|
|
|
grandChild.removeClass("tiny")
|
|
assertEquals("newThingy", grandChild.classes)
|
|
|
|
} else {
|
|
fail("Not an Element $grandChild")
|
|
}
|
|
val child = doc["child"].first
|
|
if (child != null) {
|
|
val gc1 = child.childElements("grandChild")
|
|
assertEquals(1, gc1.size, "Expected a single child but found $gc1")
|
|
val gc2 = child.childElements("grandChild2")
|
|
assertEquals(1, gc2.size, "Expected a single child but found $gc2")
|
|
} else {
|
|
fail("No child found!")
|
|
}
|
|
val children = doc.documentElement.children()
|
|
val xml = nodesToXmlString(children)
|
|
println("root element has children: ${xml}")
|
|
assertEquals(1, children.size())
|
|
|
|
}
|
|
}
|