Browse Source
* Add a test for k/js compose compilation of an anonymous object with @Composable functions * add 1 more test * add 1 more testpull/2681/head
Oleksandr Karpovich
2 years ago
committed by
GitHub
3 changed files with 97 additions and 1 deletions
@ -0,0 +1,95 @@ |
|||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import kotlinx.browser.document |
||||||
|
import org.jetbrains.compose.web.dom.Div |
||||||
|
import org.jetbrains.compose.web.dom.Text |
||||||
|
import org.jetbrains.compose.web.renderComposableInBody |
||||||
|
import kotlin.test.Test |
||||||
|
import kotlin.test.assertEquals |
||||||
|
|
||||||
|
class AnonymousObjectsInComposable { |
||||||
|
|
||||||
|
@Test |
||||||
|
// Issue: content.Abc$composable_z540rc_k$ is not a function |
||||||
|
// https://github.com/JetBrains/compose-jb/issues/2549 |
||||||
|
fun testComposableInAnonymousObject() { |
||||||
|
renderComposableInBody { |
||||||
|
val content: HasComposable2 = createHasComposable() |
||||||
|
content.Abc() |
||||||
|
} |
||||||
|
|
||||||
|
assertEquals("<div>Abc</div>", document.body!!.firstElementChild!!.outerHTML) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
// Issue: |
||||||
|
// java.lang.IllegalArgumentException: Could not find local implementation for Abc$composable |
||||||
|
// at androidx.compose.compiler.plugins.kotlin.lower.decoys.DecoyTransformBase$DefaultImpls.getComposableForDecoy(DecoyTransformBase.kt:110) |
||||||
|
fun testLocalClassWithComposable() { |
||||||
|
renderComposableInBody { |
||||||
|
HasLocalClassWithComposable() |
||||||
|
} |
||||||
|
|
||||||
|
assertEquals("<div>Abc2</div>", document.body!!.firstElementChild!!.outerHTML) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
// Issue: |
||||||
|
// abc3.Abc$composable_z540rc_k$ is not a function |
||||||
|
fun testConstructorWithComposable() { |
||||||
|
renderComposableInBody { |
||||||
|
TestConstructor { return@TestConstructor 111 }.otherComposable!!.invoke() |
||||||
|
} |
||||||
|
|
||||||
|
assertEquals("<div>Abc223-111</div>", document.body!!.firstElementChild!!.outerHTML) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Composable |
||||||
|
internal fun HasLocalClassWithComposable() { |
||||||
|
class Abc : HasComposable2 { |
||||||
|
@Composable |
||||||
|
override fun Abc() { |
||||||
|
Div { Text("Abc2") } |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
val abc = remember { Abc() } |
||||||
|
abc.Abc() |
||||||
|
} |
||||||
|
|
||||||
|
@Composable |
||||||
|
internal fun createHasComposable(): HasComposable2 { |
||||||
|
return object : HasComposable2 { |
||||||
|
@Composable |
||||||
|
override fun Abc() { |
||||||
|
Div { |
||||||
|
Text("Abc") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
internal interface HasComposable2 { |
||||||
|
@Composable |
||||||
|
fun Abc() |
||||||
|
} |
||||||
|
|
||||||
|
class TestConstructor constructor() { |
||||||
|
|
||||||
|
var otherComposable: (@Composable () -> Unit)? = null |
||||||
|
constructor(retInt: @Composable () -> Int): this() { |
||||||
|
otherComposable = { |
||||||
|
val abc3: HasComposable2 = object : HasComposable2 { |
||||||
|
@Composable |
||||||
|
override fun Abc() { |
||||||
|
Div { |
||||||
|
val i = retInt() |
||||||
|
Text("Abc223-$i") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
abc3.Abc() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue