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.
283 lines
7.5 KiB
283 lines
7.5 KiB
import androidx.compose.runtime.SideEffect |
|
import kotlinx.browser.document |
|
import org.jetbrains.compose.web.renderComposableInBody |
|
import kotlin.test.Test |
|
import kotlin.test.assertEquals |
|
|
|
/** |
|
* Classes under tests are defined in jsMain intentionally. |
|
* The reason is to test cross-module compilation + runtime behaviour. |
|
* |
|
* Reporeted Issues: |
|
* https://github.com/JetBrains/compose-jb/issues/746 |
|
* https://github.com/JetBrains/compose-jb/issues/1052 |
|
*/ |
|
class ComposablesInConstructorTests { |
|
|
|
@Test |
|
fun valComposableInDataClass() { |
|
val d = DataClassTakesValComposable { |
|
SideEffect { |
|
document.body!!.innerText = "DataClassTakesValComposable" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c() |
|
} |
|
|
|
assertEquals("DataClassTakesValComposable", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun valTypedComposableInDataClass() { |
|
val d = DataClassTakesValComposableTyped<String> { |
|
SideEffect { |
|
document.body!!.innerText = "DataClassTakesValComposableTyped-$it" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c("WORKS") |
|
} |
|
|
|
assertEquals("DataClassTakesValComposableTyped-WORKS", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun varComposableInDataClass() { |
|
val d = DataClassTakesVarComposable { |
|
SideEffect { |
|
document.body!!.innerText = "DataClassTakesVarComposable" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c() |
|
} |
|
|
|
assertEquals("DataClassTakesVarComposable", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun valComposableInClass() { |
|
val d = ClassTakesValComposable { |
|
SideEffect { |
|
document.body!!.innerText = "ClassTakesValComposable" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c() |
|
} |
|
|
|
assertEquals("ClassTakesValComposable", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun valTypedComposableInClass() { |
|
val d = ClassTakesValComposableTyped<Int> { |
|
SideEffect { |
|
document.body!!.innerText = "ClassTakesValComposableTyped-$it" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c(100500) |
|
} |
|
|
|
assertEquals("ClassTakesValComposableTyped-100500", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun varComposableInClass() { |
|
val d = ClassTakesVarComposable { |
|
SideEffect { |
|
document.body!!.innerText = "ClassTakesVarComposable" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c() |
|
} |
|
|
|
assertEquals("ClassTakesVarComposable", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun implementsHasComposable() { |
|
val d: HasComposable = ImplementsHasComposable { |
|
SideEffect { |
|
document.body!!.innerText = "ImplementsHasComposable" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composable() |
|
} |
|
|
|
assertEquals("ImplementsHasComposable", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun implementsHasComposableTyped() { |
|
val d: HasComposableTyped<Int> = ImplementsHasComposableTyped { |
|
SideEffect { |
|
document.body!!.innerText = "ImplementsHasComposableTyped-$it" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composable(123456) |
|
} |
|
|
|
assertEquals("ImplementsHasComposableTyped-123456", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classSavesComposableIntoVar() { |
|
val d = ClassSavesComposableIntoVar { |
|
SideEffect { |
|
document.body!!.innerText = "ClassSavesComposableIntoVar" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composableVar() |
|
} |
|
|
|
assertEquals("ClassSavesComposableIntoVar", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classSavesComposableIntoLateinitVar() { |
|
val d = ClassSavesComposableIntoLateinitVar { |
|
SideEffect { |
|
document.body!!.innerText = "ClassSavesComposableIntoLateinitVar" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composableVar() |
|
} |
|
|
|
assertEquals("ClassSavesComposableIntoLateinitVar", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classSavesComposableIntoNullableVar() { |
|
val d = ClassSavesComposableIntoNullableVar { |
|
SideEffect { |
|
document.body!!.innerText = "ClassSavesComposableIntoNullableVar" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composableVar!!.invoke() |
|
} |
|
|
|
assertEquals("ClassSavesComposableIntoNullableVar", document.body!!.innerText) |
|
} |
|
|
|
|
|
@Test |
|
fun classSavesTypedComposableIntoVar() { |
|
val d = ClassSavesTypedComposableIntoVar<String> { |
|
SideEffect { |
|
document.body!!.innerText = "ClassSavesTypedComposableIntoVar-$it" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composableVar("ABC") |
|
} |
|
|
|
assertEquals("ClassSavesTypedComposableIntoVar-ABC", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classSavesTypedComposableIntoLateinitVar() { |
|
val d = ClassSavesTypedComposableIntoLateinitVar<String> { |
|
SideEffect { |
|
document.body!!.innerText = "ClassSavesTypedComposableIntoLateinitVar-$it" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composableVar("ABC") |
|
} |
|
|
|
assertEquals("ClassSavesTypedComposableIntoLateinitVar-ABC", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classWithSecondaryConstructorSavesComposable() { |
|
val d = ClassWithSecondaryConstructorSavesComposable() |
|
|
|
renderComposableInBody { |
|
d.c() |
|
} |
|
|
|
assertEquals("Secondary constructor composable content", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun dataClassTakesValStringAndComposable() { |
|
val d = DataClassTakesValStringAndComposable("String1") { |
|
SideEffect { |
|
document.body!!.innerText = "DataClassTakesValStringAndComposable-${this.s}" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c(d) |
|
} |
|
|
|
assertEquals("DataClassTakesValStringAndComposable-String1", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classTakesValStringAndComposable() { |
|
val d = ClassTakesValStringAndComposable("123123") { |
|
SideEffect { |
|
document.body!!.innerText = "ClassTakesValStringAndComposable-${this.s}" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.c(d) |
|
} |
|
|
|
assertEquals("ClassTakesValStringAndComposable-123123", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classSavesStringAndComposableIntoVar() { |
|
val d = ClassSavesStringAndComposableIntoVar("098765") { |
|
SideEffect { |
|
document.body!!.innerText = "ClassSavesStringAndComposableIntoVar-${this.stringVar}" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.composableVar(d) |
|
} |
|
|
|
assertEquals("ClassSavesStringAndComposableIntoVar-098765", document.body!!.innerText) |
|
} |
|
|
|
@Test |
|
fun classTakesComposablePrivateVal() { |
|
val d = ClassTakesComposablePrivateVal { |
|
SideEffect { |
|
document.body!!.innerText = "ClassTakesComposablePrivateVal" |
|
} |
|
} |
|
|
|
renderComposableInBody { |
|
d.callPrivateComposablePassedIntoConstructor() |
|
} |
|
|
|
assertEquals("ClassTakesComposablePrivateVal", document.body!!.innerText) |
|
} |
|
}
|
|
|