From 2ca9e3c9734cf2e5d6826a9a9b3367b80c6a4eee Mon Sep 17 00:00:00 2001 From: Shishkin Pavel Date: Mon, 26 Feb 2024 15:54:02 +0100 Subject: [PATCH] test: composable lambdas deep in generic types (#4370) testcase for compiler fix https://github.com/JetBrains/compose-multiplatform/issues/3466 --- .../kotlin/CollectionOfComposablesTests.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/compose/integrations/composable-test-cases/testcases/inheritance/composableInterface/main/src/commonTest/kotlin/CollectionOfComposablesTests.kt b/compose/integrations/composable-test-cases/testcases/inheritance/composableInterface/main/src/commonTest/kotlin/CollectionOfComposablesTests.kt index 1e1159751a..2bf316a4b5 100644 --- a/compose/integrations/composable-test-cases/testcases/inheritance/composableInterface/main/src/commonTest/kotlin/CollectionOfComposablesTests.kt +++ b/compose/integrations/composable-test-cases/testcases/inheritance/composableInterface/main/src/commonTest/kotlin/CollectionOfComposablesTests.kt @@ -86,6 +86,44 @@ class CollectionOfComposablesTests { actual = root.dump() ) } + + /** Composable lambdas nested more than single level deep in generic types provoke compilation failure for K/Native + * https://github.com/JetBrains/compose-multiplatform/issues/3466 + */ + @Test + fun testNestedComposableTypes() = runTest { + data class Container(val value: T) + class DoubleNested( + val f: List Unit>>, + ) + + class SingleNested( + val f: List<@Composable () -> Unit>, + ) + + val composables: List<@Composable () -> Unit> = listOf(@Composable { TextLeafNode("a") }, @Composable { TextLeafNode("b") }) + val single = SingleNested(composables) + + val singleRoot = composeText { + for (c in single.f) { + c() + } + } + + val double = DoubleNested(composables.map { Container(it) }) + + val doubleRoot = composeText { + for (c in double.f.map { it.value }) { + c() + } + } + + assertEquals( + expected = "root:{a, b}", + actual = singleRoot.dump() + ) + assertEquals(singleRoot.dump(), doubleRoot.dump()) + } }