aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/kotlin/pl/treksoft/kvision/core/Widget.kt14
-rw-r--r--src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt17
2 files changed, 23 insertions, 8 deletions
diff --git a/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt b/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
index abff5e37..4dcb62e3 100644
--- a/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
+++ b/src/main/kotlin/pl/treksoft/kvision/core/Widget.kt
@@ -358,12 +358,14 @@ open class Widget(classes: Set<String> = setOf()) : StyledComponent(), Component
val handlers = on(eventTarget ?: this)
(handlers::apply)(blockAsWidget)
for (key: String in js("Object").keys(handlers)) {
- val handler = handlers.asDynamic()[key]
- val map = listenersMap[key]
- if (map != null) {
- map[handlerCounter] = handler
- } else {
- listenersMap[key] = mutableMapOf(handlerCounter to handler)
+ if (key != "self") {
+ val handler = handlers.asDynamic()[key]
+ val map = listenersMap[key]
+ if (map != null) {
+ map[handlerCounter] = handler
+ } else {
+ listenersMap[key] = mutableMapOf(handlerCounter to handler)
+ }
}
}
refresh()
diff --git a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt
index 42a07ba8..159df178 100644
--- a/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt
+++ b/src/test/kotlin/test/pl/treksoft/kvision/core/WidgetSpec.kt
@@ -96,16 +96,29 @@ class WidgetSpec : WSpec {
fun setEventListener() {
runW { widget, _ ->
widget.setEventListener<Widget> { click = { } }
- assertTrue("Element should have an event listener") { widget.listenersMap.size == 1 }
+ assertTrue("Element should have one event listener") { widget.listenersMap["click"]?.size == 1 }
+ widget.setEventListener<Widget> { click = { } }
+ assertTrue("Element should have two event listeners") { widget.listenersMap["click"]?.size == 2 }
}
}
@Test
fun removeEventListener() {
runW { widget, _ ->
+ val id = widget.setEventListener<Widget> { click = { } }
+ widget.setEventListener<Widget> { click = { } }
+ widget.removeEventListener(id)
+ assertTrue("One of event listeners is removed") { widget.listenersMap["click"]?.size == 1 }
+ }
+ }
+
+ @Test
+ fun removeEventListeners() {
+ runW { widget, _ ->
+ widget.setEventListener<Widget> { click = { } }
widget.setEventListener<Widget> { click = { } }
widget.removeEventListeners()
- assertTrue("Element should not have any event listener") { widget.listenersMap.size == 0 }
+ assertTrue("Element should not have any event listeners") { widget.listenersMap.isEmpty() }
}
}