diff --git a/web/compose-compiler-integration/main-template/src/commonMain/kotlin/Expect.kt b/web/compose-compiler-integration/main-template/src/commonMain/kotlin/Expect.kt new file mode 100644 index 0000000000..6d233e0be0 --- /dev/null +++ b/web/compose-compiler-integration/main-template/src/commonMain/kotlin/Expect.kt @@ -0,0 +1,4 @@ +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Composition + +expect fun callComposable(content: @Composable () -> Unit) diff --git a/web/compose-compiler-integration/main-template/src/jsMain/kotlin/Deps.kt b/web/compose-compiler-integration/main-template/src/jsMain/kotlin/Deps.kt new file mode 100644 index 0000000000..e92302047a --- /dev/null +++ b/web/compose-compiler-integration/main-template/src/jsMain/kotlin/Deps.kt @@ -0,0 +1,33 @@ +import androidx.compose.runtime.* +import kotlinx.coroutines.* + +class UnitApplier : Applier { + override val current: Unit + get() = Unit + + override fun down(node: Unit) {} + override fun up() {} + override fun insertTopDown(index: Int, instance: Unit) {} + override fun insertBottomUp(index: Int, instance: Unit) {} + override fun remove(index: Int, count: Int) {} + override fun move(from: Int, to: Int, count: Int) {} + override fun clear() {} +} + +fun createRecomposer(): Recomposer { + val mainScope = CoroutineScope( + NonCancellable + Dispatchers.Main + DefaultMonotonicFrameClock + ) + + return Recomposer(mainScope.coroutineContext).also { + mainScope.launch(start = CoroutineStart.UNDISPATCHED) { + it.runRecomposeAndApplyChanges() + } + } +} + + +actual fun callComposable(content: @Composable () -> Unit) { + val c = ControlledComposition(UnitApplier(), createRecomposer()) + c.setContent(content) +} diff --git a/web/compose-compiler-integration/testcases/passing/ComposableWithDefaultValuesDefinedByOtherParams.kt b/web/compose-compiler-integration/testcases/passing/ComposableWithDefaultValuesDefinedByOtherParams.kt index 4aa2d2f9c3..30909f2236 100644 --- a/web/compose-compiler-integration/testcases/passing/ComposableWithDefaultValuesDefinedByOtherParams.kt +++ b/web/compose-compiler-integration/testcases/passing/ComposableWithDefaultValuesDefinedByOtherParams.kt @@ -7,18 +7,19 @@ fun main() { callComposable { ComposableWithDefaultParamsDefinedByOtherParams("a") } + require(result == "aa") { "Actual result was - $result"} } -fun callComposable(content: @Composable () -> Unit) { - val c = content -} // @Module:Lib import androidx.compose.runtime.Composable +var result = "" + @Composable fun ComposableWithDefaultParamsDefinedByOtherParams( a: String, b: String = a ) { + result = a + b } diff --git a/web/compose-compiler-integration/testcases/passing/ComposableWithParamsWithDefaultValues.kt b/web/compose-compiler-integration/testcases/passing/ComposableWithParamsWithDefaultValues.kt index 39585b16e9..857795b460 100644 --- a/web/compose-compiler-integration/testcases/passing/ComposableWithParamsWithDefaultValues.kt +++ b/web/compose-compiler-integration/testcases/passing/ComposableWithParamsWithDefaultValues.kt @@ -15,38 +15,40 @@ fun main() { ComposableWithDifferentDefaultValuesForParameters(a = Any()) ComposableWithReturnAndWithDefaultLambda().invoke() } -} - -fun callComposable(content: @Composable () -> Unit) { - val c = content + require(intArrayOf(1, 2, 3, 4, 5, 6, 7).all { it in set }) { "Failed when running composables - ${set.joinToString()}" } } // @Module:Lib import androidx.compose.runtime.Composable +var set = mutableSetOf() + @Composable -fun FooTakesLambda(block: () -> Unit = {}) { +fun FooTakesLambda(block: () -> Unit = { set.add(1) }) { block() } @Composable -inline fun InlineFooTakesLambda(block: () -> Unit = {}) { +inline fun InlineFooTakesLambda(block: () -> Unit = { set.add(2) }) { block() } @Composable -fun FooTakesComposableLambda(composable: @Composable () -> Unit = {}) { +fun FooTakesComposableLambda(composable: @Composable () -> Unit = { set.add(3) }) { composable() } @Composable -inline fun InlineFooTakesComposableLambda(composable: @Composable () -> Unit = {}) { +inline fun InlineFooTakesComposableLambda(composable: @Composable () -> Unit = { set.add(4) }) { composable() } @Composable fun FooTakesTypedExtesionComposableLambdaWithExplicitTypesAndDefaultLambda( - t: String, k: Int, composable: @Composable String.(Int) -> Double = { (this + ". $it").toDouble() } + t: String, k: Int, composable: @Composable String.(Int) -> Double = { + set.add(5) + (this + ".$it").toDouble() + } ) { t.composable(k) } @@ -56,12 +58,13 @@ fun ComposableWithDifferentDefaultValuesForParameters( a: Any, i: Int = 1, b: Boolean = false, s: String = "s", u: Unit = Unit, a2: Any = Any(), l: List = listOf("1") ) { + set.add(6) a.toString() + "$i $b $s $u $a2 $l" } @Composable fun ComposableWithReturnAndWithDefaultLambda( - l: @Composable () -> (@Composable () -> Unit) = { { } } + l: @Composable () -> (@Composable () -> Unit) = { { set.add(7) } } ): @Composable () -> Unit { - return { l() } + return { l().invoke() } } diff --git a/web/compose-compiler-integration/testcases/passing/ComposableWithTypeParams.kt b/web/compose-compiler-integration/testcases/passing/ComposableWithTypeParams.kt index 74ebf82a52..4b3c3ddc22 100644 --- a/web/compose-compiler-integration/testcases/passing/ComposableWithTypeParams.kt +++ b/web/compose-compiler-integration/testcases/passing/ComposableWithTypeParams.kt @@ -1,22 +1,29 @@ // @Module:Main -import androidx.compose.runtime.Composable -import androidx.compose.runtime.currentComposer -import androidx.compose.runtime.Composer +import androidx.compose.runtime.* fun main() { + var set = mutableSetOf() callComposable { - - FooTakesTypedComposableLambda { "text" } - FooTakesTypedComposableLambda2(10) { it + 100 } - FooTakesTypedExtesionComposableLambda("text", Any()) { } - MySelect(emptyList(), {}) + FooTakesTypedComposableLambda { + set.add(1) + "text" + } + FooTakesTypedComposableLambda2(10) { + set.add(2) + it + 100 + } + FooTakesTypedExtesionComposableLambda("text", Any()) { + set.add(3) + } + MySelect(listOf("1")) { + set.add(4) + } } -} -fun callComposable(content: @Composable () -> Unit) { - val c = content + require(intArrayOf(1, 2, 3, 4).all { it in set }) { "Failed when running composables" } } + // @Module:Lib import androidx.compose.runtime.Composable @@ -41,4 +48,5 @@ fun MySelect( options: List, onChange: (T) -> Unit ) { + onChange(options.first()) } diff --git a/web/compose-compiler-integration/testcases/passing/PassingComposableToConstructor.kt b/web/compose-compiler-integration/testcases/passing/PassingComposableToConstructor.kt index 998f694ddf..6366421167 100644 --- a/web/compose-compiler-integration/testcases/passing/PassingComposableToConstructor.kt +++ b/web/compose-compiler-integration/testcases/passing/PassingComposableToConstructor.kt @@ -4,17 +4,19 @@ import androidx.compose.runtime.Composable fun main() { - val instance = testCase { } + var set = mutableSetOf() + + val instance = testCase { + set.add(1) + } val instance2 = TestCase2() callComposable { instance.composable() instance2.composable() + set.add(2) } -} - -fun callComposable(content: @Composable () -> Unit) { - // does nothing + require(intArrayOf(1, 2).all { it in set }) { "Failed when running composables" } } // @Module:Lib diff --git a/web/gradle.properties b/web/gradle.properties index 4001b68da7..5e1bd63e60 100644 --- a/web/gradle.properties +++ b/web/gradle.properties @@ -1,5 +1,5 @@ # __LATEST_COMPOSE_RELEASE_VERSION__ -COMPOSE_CORE_VERSION=1.0.0-alpha4-build362 +COMPOSE_CORE_VERSION=1.0.0-rc2 COMPOSE_WEB_VERSION=1.0.0-alpha4-build362 compose.web.buildSamples=false compose.web.tests.integration.withFirefox