diff --git a/web/core/src/jsTest/kotlin/elements/AttributesTests.kt b/web/core/src/jsTest/kotlin/elements/AttributesTests.kt index 9815743a3d..1a7bab93e4 100644 --- a/web/core/src/jsTest/kotlin/elements/AttributesTests.kt +++ b/web/core/src/jsTest/kotlin/elements/AttributesTests.kt @@ -241,4 +241,94 @@ class AttributesTests { waitChanges() assertEquals("
", root.innerHTML) } + + @Test + fun canAccessRef() = runTest { + var flag by mutableStateOf(true) + + composition { + if (flag) { + Div(attrs = { + ref { div -> + (div as HTMLDivElement).innerText = "Text set using ref {}" + onDispose { + div.innerText = "" + } + } + }) + } + } + + assertEquals("
Text set using ref {}
", root.innerHTML) + + flag = false + waitChanges() + + assertEquals("", root.innerHTML) + } + + @Test + fun refDisposed() = runTest { + var flag by mutableStateOf(true) + + var disposed = false + + composition { + if (flag) { + Div(attrs = { + ref { + onDispose { + disposed = true + } + } + }) + } + } + + assertEquals("
", root.innerHTML) + assertEquals(false, disposed) + + flag = false + waitChanges() + + assertEquals("", root.innerHTML) + assertEquals(true, disposed) + } + + @Test + fun refInitializedOnlyOnce() = runTest { + var counter by mutableStateOf(1) + + var refInitCounter = 0 + var refDisposeCounter = 0 + var attrsCallCounter = 0 + + composition { + val useCounterWithinRootRecomposeScope = counter + Text("$useCounterWithinRootRecomposeScope") + + Div(attrs = { + attrsCallCounter += 1 + ref { div -> + refInitCounter += 1 + onDispose { + refDisposeCounter += 1 + } + } + }) + } + + assertEquals("1
", root.innerHTML) + assertEquals(1, refInitCounter) + assertEquals(1, attrsCallCounter) + assertEquals(0, refDisposeCounter) + + counter++ + waitChanges() + + assertEquals("2
", root.innerHTML) + assertEquals(1, refInitCounter) + assertEquals(2, attrsCallCounter) + assertEquals(0, refDisposeCounter) + } }