Browse Source

web: update compiler plugin test cases to make them runnable (#1447)

Co-authored-by: Oleksandr Karpovich <oleksandr.karpovich@jetbrains.com>
pull/1452/head
Oleksandr Karpovich 3 years ago committed by GitHub
parent
commit
742c4a40fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      web/compose-compiler-integration/main-template/src/commonMain/kotlin/Expect.kt
  2. 33
      web/compose-compiler-integration/main-template/src/jsMain/kotlin/Deps.kt
  3. 7
      web/compose-compiler-integration/testcases/passing/ComposableWithDefaultValuesDefinedByOtherParams.kt
  4. 25
      web/compose-compiler-integration/testcases/passing/ComposableWithParamsWithDefaultValues.kt
  5. 30
      web/compose-compiler-integration/testcases/passing/ComposableWithTypeParams.kt
  6. 12
      web/compose-compiler-integration/testcases/passing/PassingComposableToConstructor.kt
  7. 2
      web/gradle.properties

4
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)

33
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<Unit> {
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)
}

7
web/compose-compiler-integration/testcases/passing/ComposableWithDefaultValuesDefinedByOtherParams.kt

@ -7,18 +7,19 @@ fun main() {
callComposable { callComposable {
ComposableWithDefaultParamsDefinedByOtherParams("a") ComposableWithDefaultParamsDefinedByOtherParams("a")
} }
require(result == "aa") { "Actual result was - $result"}
} }
fun callComposable(content: @Composable () -> Unit) {
val c = content
}
// @Module:Lib // @Module:Lib
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
var result = ""
@Composable @Composable
fun ComposableWithDefaultParamsDefinedByOtherParams( fun ComposableWithDefaultParamsDefinedByOtherParams(
a: String, a: String,
b: String = a b: String = a
) { ) {
result = a + b
} }

25
web/compose-compiler-integration/testcases/passing/ComposableWithParamsWithDefaultValues.kt

@ -15,38 +15,40 @@ fun main() {
ComposableWithDifferentDefaultValuesForParameters(a = Any()) ComposableWithDifferentDefaultValuesForParameters(a = Any())
ComposableWithReturnAndWithDefaultLambda().invoke() ComposableWithReturnAndWithDefaultLambda().invoke()
} }
} require(intArrayOf(1, 2, 3, 4, 5, 6, 7).all { it in set }) { "Failed when running composables - ${set.joinToString()}" }
fun callComposable(content: @Composable () -> Unit) {
val c = content
} }
// @Module:Lib // @Module:Lib
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
var set = mutableSetOf<Int>()
@Composable @Composable
fun FooTakesLambda(block: () -> Unit = {}) { fun FooTakesLambda(block: () -> Unit = { set.add(1) }) {
block() block()
} }
@Composable @Composable
inline fun InlineFooTakesLambda(block: () -> Unit = {}) { inline fun InlineFooTakesLambda(block: () -> Unit = { set.add(2) }) {
block() block()
} }
@Composable @Composable
fun FooTakesComposableLambda(composable: @Composable () -> Unit = {}) { fun FooTakesComposableLambda(composable: @Composable () -> Unit = { set.add(3) }) {
composable() composable()
} }
@Composable @Composable
inline fun InlineFooTakesComposableLambda(composable: @Composable () -> Unit = {}) { inline fun InlineFooTakesComposableLambda(composable: @Composable () -> Unit = { set.add(4) }) {
composable() composable()
} }
@Composable @Composable
fun FooTakesTypedExtesionComposableLambdaWithExplicitTypesAndDefaultLambda( 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) t.composable(k)
} }
@ -56,12 +58,13 @@ fun ComposableWithDifferentDefaultValuesForParameters(
a: Any, i: Int = 1, b: Boolean = false, s: String = "s", a: Any, i: Int = 1, b: Boolean = false, s: String = "s",
u: Unit = Unit, a2: Any = Any(), l: List<Any> = listOf("1") u: Unit = Unit, a2: Any = Any(), l: List<Any> = listOf("1")
) { ) {
set.add(6)
a.toString() + "$i $b $s $u $a2 $l" a.toString() + "$i $b $s $u $a2 $l"
} }
@Composable @Composable
fun ComposableWithReturnAndWithDefaultLambda( fun ComposableWithReturnAndWithDefaultLambda(
l: @Composable () -> (@Composable () -> Unit) = { { } } l: @Composable () -> (@Composable () -> Unit) = { { set.add(7) } }
): @Composable () -> Unit { ): @Composable () -> Unit {
return { l() } return { l().invoke() }
} }

30
web/compose-compiler-integration/testcases/passing/ComposableWithTypeParams.kt

@ -1,22 +1,29 @@
// @Module:Main // @Module:Main
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.runtime.currentComposer
import androidx.compose.runtime.Composer
fun main() { fun main() {
var set = mutableSetOf<Int>()
callComposable { callComposable {
FooTakesTypedComposableLambda {
FooTakesTypedComposableLambda { "text" } set.add(1)
FooTakesTypedComposableLambda2(10) { it + 100 } "text"
FooTakesTypedExtesionComposableLambda<String, Any, Unit>("text", Any()) { } }
MySelect<String>(emptyList(), {}) FooTakesTypedComposableLambda2(10) {
set.add(2)
it + 100
}
FooTakesTypedExtesionComposableLambda<String, Any, Unit>("text", Any()) {
set.add(3)
}
MySelect<String>(listOf("1")) {
set.add(4)
}
} }
}
fun callComposable(content: @Composable () -> Unit) { require(intArrayOf(1, 2, 3, 4).all { it in set }) { "Failed when running composables" }
val c = content
} }
// @Module:Lib // @Module:Lib
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -41,4 +48,5 @@ fun <T> MySelect(
options: List<T>, options: List<T>,
onChange: (T) -> Unit onChange: (T) -> Unit
) { ) {
onChange(options.first())
} }

12
web/compose-compiler-integration/testcases/passing/PassingComposableToConstructor.kt

@ -4,17 +4,19 @@
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
fun main() { fun main() {
val instance = testCase { } var set = mutableSetOf<Int>()
val instance = testCase {
set.add(1)
}
val instance2 = TestCase2() val instance2 = TestCase2()
callComposable { callComposable {
instance.composable() instance.composable()
instance2.composable() instance2.composable()
set.add(2)
} }
} require(intArrayOf(1, 2).all { it in set }) { "Failed when running composables" }
fun callComposable(content: @Composable () -> Unit) {
// does nothing
} }
// @Module:Lib // @Module:Lib

2
web/gradle.properties

@ -1,5 +1,5 @@
# __LATEST_COMPOSE_RELEASE_VERSION__ # __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_VERSION=1.0.0-alpha4-build362
compose.web.buildSamples=false compose.web.buildSamples=false
compose.web.tests.integration.withFirefox compose.web.tests.integration.withFirefox

Loading…
Cancel
Save