You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
4.0 KiB
Kotlin
135 lines
4.0 KiB
Kotlin
package me.eater.test.threedom.dom
|
|
|
|
import io.kotest.core.spec.style.StringSpec
|
|
import io.kotest.matchers.sequences.shouldHaveCount
|
|
import io.kotest.matchers.sequences.shouldHaveSingleElement
|
|
import io.kotest.matchers.shouldBe
|
|
import me.eater.threedom.dom.Document
|
|
import me.eater.threedom.dom.PlainNode
|
|
import me.eater.threedom.dom.createNode
|
|
import me.eater.threedom.dom.event.DOMTreeUpdate
|
|
import me.eater.threedom.dom.event.NodeIDUpdate
|
|
|
|
class DocumentTest : StringSpec({
|
|
"test insert event" {
|
|
val document = Document()
|
|
var triggered = 0;
|
|
document.on<DOMTreeUpdate.Insert> {
|
|
triggered++
|
|
}
|
|
|
|
document.on<DOMTreeUpdate> {
|
|
triggered++
|
|
}
|
|
|
|
val newNode = document.createNode<PlainNode>()
|
|
document.addNode(newNode)
|
|
|
|
triggered shouldBe 2
|
|
}
|
|
|
|
"test move event" {
|
|
val document = Document()
|
|
|
|
|
|
val newNode = document.createNode<PlainNode>()
|
|
document.addNode(newNode)
|
|
val secondNode = document.createNode<PlainNode>()
|
|
document.addNode(secondNode)
|
|
var triggered = 0
|
|
|
|
document.on<DOMTreeUpdate.Move> { (data) ->
|
|
data.newParent shouldBe secondNode
|
|
data.oldParent shouldBe document.root
|
|
data.child shouldBe newNode
|
|
triggered++
|
|
}
|
|
|
|
|
|
secondNode.addNode(newNode)
|
|
triggered shouldBe 1
|
|
}
|
|
|
|
"test remove event" {
|
|
val document = Document()
|
|
var triggered = 0
|
|
document.on<DOMTreeUpdate.Remove> {
|
|
triggered++
|
|
}
|
|
|
|
document.on<DOMTreeUpdate> {
|
|
triggered++
|
|
}
|
|
|
|
val newNode = document.createNode<PlainNode>()
|
|
document.addNode(newNode)
|
|
document.removeNode(newNode)
|
|
|
|
triggered shouldBe 3
|
|
}
|
|
|
|
"test byId" {
|
|
val doc = Document()
|
|
|
|
val newNode = doc.createNode<PlainNode>()
|
|
val secondNewNode = doc.createNode<PlainNode>()
|
|
val thirdNewNode = doc.createNode<PlainNode>()
|
|
var triggered = 0
|
|
doc.on<NodeIDUpdate> {
|
|
triggered++
|
|
}
|
|
|
|
newNode.id = ":3"
|
|
doc.addNode(secondNewNode)
|
|
doc.addNode(thirdNewNode)
|
|
|
|
doc.getNodeById(":3") shouldBe null
|
|
thirdNewNode.addNode(newNode)
|
|
doc.getNodeById(":3") shouldBe newNode
|
|
secondNewNode.getNodeById(":3") shouldBe null
|
|
thirdNewNode.getNodeById(":3") shouldBe newNode
|
|
thirdNewNode.removeAll()
|
|
thirdNewNode.getNodeById(":3") shouldBe null
|
|
doc.getNodeById(":3") shouldBe null
|
|
doc.addNode(newNode)
|
|
doc.getNodeById(":3") shouldBe newNode
|
|
newNode.id = ":/"
|
|
doc.getNodeById(":3") shouldBe null
|
|
doc.getNodeById(":/") shouldBe newNode
|
|
}
|
|
|
|
"test byClass" {
|
|
val doc = Document()
|
|
|
|
val newNode = doc.createNode<PlainNode>()
|
|
val secondNewNode = doc.createNode<PlainNode>()
|
|
val thirdNewNode = doc.createNode<PlainNode>()
|
|
var triggered = 0
|
|
doc.on<NodeIDUpdate> {
|
|
triggered++
|
|
}
|
|
|
|
newNode.classList.add(":3")
|
|
doc.addNode(secondNewNode)
|
|
doc.addNode(thirdNewNode)
|
|
|
|
doc.getNodesByClassName(":3") shouldHaveCount 0
|
|
thirdNewNode.addNode(newNode)
|
|
doc.getNodesByClassName(":3") shouldHaveSingleElement newNode
|
|
secondNewNode.getNodesByClassName(":3") shouldHaveCount 0
|
|
thirdNewNode.getNodesByClassName(":3") shouldHaveSingleElement newNode
|
|
thirdNewNode.removeAll()
|
|
thirdNewNode.getNodesByClassName(":3") shouldHaveCount 0
|
|
doc.getNodesByClassName(":3") shouldHaveCount 0
|
|
newNode.classList.clear()
|
|
newNode.classList.add(":/")
|
|
doc.addNode(newNode)
|
|
doc.getNodesByClassName(":3") shouldHaveCount 0
|
|
doc.getNodesByClassName(":/") shouldHaveSingleElement newNode
|
|
newNode.classList.clear()
|
|
newNode.classList.add(":3")
|
|
doc.getNodesByClassName(":/") shouldHaveCount 0
|
|
doc.getNodesByClassName(":3") shouldHaveSingleElement newNode
|
|
}
|
|
})
|