@@ -18,6 +18,8 @@ package androidx.compose.ui.window
1818
1919import androidx.compose.foundation.layout.Box
2020import androidx.compose.foundation.layout.size
21+ import androidx.compose.runtime.Composable
22+ import androidx.compose.runtime.DisposableEffect
2123import androidx.compose.runtime.LaunchedEffect
2224import androidx.compose.runtime.getValue
2325import androidx.compose.runtime.mutableStateOf
@@ -33,6 +35,9 @@ import androidx.compose.ui.geometry.Size
3335import androidx.compose.ui.input.pointer.PointerButton
3436import androidx.compose.ui.input.pointer.PointerButtons
3537import androidx.compose.ui.input.pointer.PointerEventType
38+ import androidx.compose.ui.platform.testTag
39+ import androidx.compose.ui.scene.Content
40+ import androidx.compose.ui.scene.rememberComposeSceneLayer
3641import androidx.compose.ui.test.ExperimentalTestApi
3742import androidx.compose.ui.test.InternalTestApi
3843import androidx.compose.ui.test.assertIsDisplayed
@@ -308,4 +313,36 @@ class DialogTest {
308313 navEventInput.backCompleted()
309314 assertContentEquals(listOf (1 , 1 , 2 , 1 ), eventList)
310315 }
316+
317+ @Test
318+ fun testComposeSceneLayerSetContent () = runSkikoComposeUiTest {
319+ var useContent2 by mutableStateOf(false )
320+
321+ setContent {
322+ val content1 = @Composable {
323+ Box (Modifier .size(200 .dp).testTag(" content1" ))
324+ }
325+ val content2 = @Composable {
326+ Box (Modifier .size(200 .dp).testTag(" content2" ))
327+ }
328+
329+ val layer = rememberComposeSceneLayer()
330+ layer.Content (if (useContent2) content2 else content1)
331+ DisposableEffect (Unit ) {
332+ onDispose {
333+ layer.close()
334+ }
335+ }
336+ }
337+
338+ onNodeWithTag(" content1" ).assertIsDisplayed()
339+ onNodeWithTag(" content2" ).assertDoesNotExist()
340+
341+ useContent2 = true
342+ waitForIdle()
343+
344+ onNodeWithTag(" content1" ).assertDoesNotExist()
345+ onNodeWithTag(" content2" ).assertIsDisplayed()
346+ }
347+
311348}
0 commit comments