From 3bd1b5da5c9d3c4daa98f1a9a0d5c5fb1ad49524 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 1 Nov 2026 14:33:16 +0600 Subject: [PATCH] test: clean up DOM after observer test failures --- .../common/MutationObserverBrowserTests.kt | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/common/src/jsTest/kotlin/dev/inmo/micro_utils/common/MutationObserverBrowserTests.kt b/common/src/jsTest/kotlin/dev/inmo/micro_utils/common/MutationObserverBrowserTests.kt index a29c8f17e4b..99b2345d1ec 100644 --- a/common/src/jsTest/kotlin/dev/inmo/micro_utils/common/MutationObserverBrowserTests.kt +++ b/common/src/jsTest/kotlin/dev/inmo/micro_utils/common/MutationObserverBrowserTests.kt @@ -3,6 +3,7 @@ package dev.inmo.micro_utils.common import kotlinx.browser.document import org.w3c.dom.MutationObserver import org.w3c.dom.events.Event +import org.w3c.dom.events.EventListener import kotlin.js.Promise import kotlin.test.Test import kotlin.test.assertEquals @@ -121,19 +122,21 @@ class MutationObserverBrowserTests { fun onRemovedCallsBackOnceAndDisconnects(): Promise { val parent = document.createElement("div") val child = document.createElement("span") - parent.appendChild(child) - document.body!!.appendChild(parent) var calls = 0 - val observer = child.onRemoved { calls++ } - parent.removeChild(child) + var observer: MutationObserver? = null return Promise.resolve(Unit).then { + parent.appendChild(child) + document.body!!.appendChild(parent) + observer = child.onRemoved { calls++ } + parent.removeChild(child) + }.then { assertEquals(1, calls) parent.appendChild(child) parent.removeChild(child) }.then { assertEquals(1, calls) }.finally { - observer.disconnect() + observer?.disconnect() parent.parentNode?.removeChild(parent) } } @@ -141,17 +144,19 @@ class MutationObserverBrowserTests { @Test fun onClickOutsideStopsListeningAfterRemoval(): Promise { val target = document.createElement("div") - document.body!!.appendChild(target) var calls = 0 - val listener = target.onClickOutside { calls++ } - document.dispatchEvent(Event("click")) - assertEquals(1, calls) - target.parentNode!!.removeChild(target) + var listener: EventListener? = null return Promise.resolve(Unit).then { + document.body!!.appendChild(target) + listener = target.onClickOutside { calls++ } + document.dispatchEvent(Event("click")) + assertEquals(1, calls) + target.parentNode!!.removeChild(target) + }.then { document.dispatchEvent(Event("click")) assertEquals(1, calls) }.finally { - document.removeEventListener("click", listener) + listener?.let { document.removeEventListener("click", it) } target.parentNode?.removeChild(target) } }