You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.6 KiB
129 lines
3.6 KiB
import androidx.compose.runtime.Composable |
|
import com.example.common.TextContainerNode |
|
import com.example.common.TextLeafNode |
|
import com.example.common.composeText |
|
import kotlinx.coroutines.ExperimentalCoroutinesApi |
|
import kotlinx.coroutines.test.runTest |
|
import kotlin.test.Test |
|
import kotlin.test.assertEquals |
|
|
|
@OptIn(ExperimentalCoroutinesApi::class) |
|
class CollectionOfComposablesTests { |
|
|
|
@Test |
|
fun testCanAddItemsAndIterate() = runTest { |
|
val impl = CollectionOfComposablesImpl() |
|
|
|
impl.add { |
|
TextLeafNode("leaf1") |
|
TextLeafNode("leaf2") |
|
TextLeafNode("leaf3") |
|
} |
|
impl.add { |
|
TextContainerNode("node") { |
|
TextLeafNode("child1") |
|
TextLeafNode("child2") |
|
TextLeafNode("child3") |
|
} |
|
} |
|
|
|
val root = composeText { |
|
impl.iterator().forEach { |
|
it() |
|
} |
|
} |
|
|
|
assertEquals( |
|
expected = "root:{leaf1, leaf2, leaf3, node:{child1, child2, child3}}", |
|
actual = root.dump() |
|
) |
|
} |
|
|
|
/** Default args for overridden composable produces corrupted function definitions |
|
* https://github.com/JetBrains/compose-multiplatform/issues/3318 |
|
*/ |
|
@Test |
|
fun testDefaultArgsForOverridden() = runTest { |
|
class Impl : DefaultComposableContent |
|
|
|
val root = composeText { |
|
Impl().ComposableContent() |
|
} |
|
|
|
assertEquals( |
|
expected = "root:{DefaultComposableContent - any}", |
|
actual = root.dump() |
|
) |
|
} |
|
|
|
/** Override a protected @Composable method leads to Compilation Failed on iOS target |
|
* https://github.com/JetBrains/compose-multiplatform/issues/4055 |
|
*/ |
|
@Test |
|
fun testOverrideProtected() = runTest { |
|
val root = composeText { |
|
Greeter("Bob").Hi() |
|
} |
|
|
|
assertEquals( |
|
expected = "root:{Hello, Bob!}", |
|
actual = root.dump() |
|
) |
|
} |
|
|
|
/** Default params for value type defined in separate module may result in compilation failure on iOS |
|
* https://github.com/JetBrains/compose-multiplatform/issues/3643 |
|
*/ |
|
@Test |
|
fun testDefaultParamValueClass() = runTest { |
|
@Composable |
|
fun test(qualifiers: ValClass = ValClass(123)): String = "${qualifiers.key}" |
|
|
|
val root = composeText { TextLeafNode(test()) } |
|
|
|
assertEquals( |
|
expected = "root:{123}", |
|
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<T>(val value: T) |
|
class DoubleNested( |
|
val f: List<Container<@Composable () -> 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()) |
|
} |
|
} |
|
|
|
|
|
|