blob: ebb7ea86ad5c2dc80517199c51b0967f1d5e004d [file] [log] [blame] [edit]
package com.airbnb.lottie.snapshots.tests
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import com.airbnb.lottie.LottieProperty
import com.airbnb.lottie.TextDelegate
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieCompositionSpec
import com.airbnb.lottie.compose.rememberLottieComposition
import com.airbnb.lottie.compose.rememberLottieDynamicProperties
import com.airbnb.lottie.compose.rememberLottieDynamicProperty
import com.airbnb.lottie.snapshots.LocalSnapshotReady
import com.airbnb.lottie.snapshots.SnapshotTestCase
import com.airbnb.lottie.snapshots.SnapshotTestCaseContext
import com.airbnb.lottie.snapshots.snapshotComposable
import com.airbnb.lottie.snapshots.withAnimationView
class TextTestCase : SnapshotTestCase {
override suspend fun SnapshotTestCaseContext.run() {
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Hello World") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "Hello World")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Hello World with getText") { animationView ->
val textDelegate = object : TextDelegate(animationView) {
override fun getText(input: String): String {
return when (input) {
"NAME" -> "Hello World"
else -> input
}
}
}
animationView.setTextDelegate(textDelegate)
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Emoji") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "🔥💪💯")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Taiwanese") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "我的密碼")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Fire Taiwanese") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "🔥的A")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Family man man girl boy") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Family woman woman girl girl") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Brown Police Man") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDC6E\uD83C\uDFFF\u200D♀️")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Family and Brown Police Man") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67\uD83D\uDC6E\uD83C\uDFFF\u200D♀️")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Family, Brown Police Man, emoji and chars") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "🔥\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67\uD83D\uDC6E\uD83C\uDFFF\u200D♀的Aabc️")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Fire English Fire Brown Police Man Fire") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "🔥c️🔥\uD83D\uDC6E\uD83C\uDFFF\u200D♀️\uD83D\uDD25")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "American Flag") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83C\uDDFA\uD83C\uDDF8")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Checkered Flag") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83C\uDFC1")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Pirate Flag") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83C\uDFF4\u200D☠️")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "3 Oclock") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDD52")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Woman frowning") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDE4D\u200D♀️")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Gay couple") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDC68\u200D❤️\u200D\uD83D\uDC68️")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Lesbian couple") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDC69\u200D❤️\u200D\uD83D\uDC69️")
}
withAnimationView("Tests/DynamicText.json", "Dynamic Text", "Straight couple") { animationView ->
val textDelegate = TextDelegate(animationView)
animationView.setTextDelegate(textDelegate)
textDelegate.setText("NAME", "\uD83D\uDC91")
}
snapshotComposable("Compose Dynamic Text", "Emoji") {
val composition by rememberLottieComposition(LottieCompositionSpec.Asset("Tests/DynamicText.json"))
val snapshotReady = LocalSnapshotReady.current
LaunchedEffect(snapshotReady, composition != null) {
snapshotReady.value = composition != null
}
val dynamicProperties = rememberLottieDynamicProperties(
rememberLottieDynamicProperty(LottieProperty.TEXT, "NAME") {
"🔥💪💯"
},
)
LottieAnimation(composition, { 0f }, dynamicProperties = dynamicProperties)
}
snapshotComposable("Compose Dynamic Text", "Taiwanese") {
val composition by rememberLottieComposition(LottieCompositionSpec.Asset("Tests/DynamicText.json"))
val snapshotReady = LocalSnapshotReady.current
LaunchedEffect(snapshotReady, composition != null) {
snapshotReady.value = composition != null
}
val dynamicProperties = rememberLottieDynamicProperties(
rememberLottieDynamicProperty(LottieProperty.TEXT, "我的密碼", "NAME"),
)
LottieAnimation(composition, { 0f }, dynamicProperties = dynamicProperties)
}
snapshotComposable("Compose Dynamic Text", "Hindi") {
val composition by rememberLottieComposition(LottieCompositionSpec.Asset("Tests/DynamicText.json"))
val snapshotReady = LocalSnapshotReady.current
LaunchedEffect(snapshotReady, composition != null) {
snapshotReady.value = composition != null
}
val dynamicProperties = rememberLottieDynamicProperties(
rememberLottieDynamicProperty(LottieProperty.TEXT, "आपका लेख", "NAME"),
)
LottieAnimation(composition, { 0f }, dynamicProperties = dynamicProperties)
}
snapshotComposable("Compose Dynamic Text", "FrameInfo.startValue") {
val composition by rememberLottieComposition(LottieCompositionSpec.Asset("Tests/DynamicText.json"))
val snapshotReady = LocalSnapshotReady.current
LaunchedEffect(snapshotReady, composition != null) {
snapshotReady.value = composition != null
}
val dynamicProperties = rememberLottieDynamicProperties(
rememberLottieDynamicProperty(LottieProperty.TEXT, "NAME") { frameInfo ->
"${frameInfo.startValue}!!!"
},
)
LottieAnimation(composition, { 0f }, dynamicProperties = dynamicProperties)
}
snapshotComposable("Compose Dynamic Text", "FrameInfo.endValue") {
val composition by rememberLottieComposition(LottieCompositionSpec.Asset("Tests/DynamicText.json"))
val snapshotReady = LocalSnapshotReady.current
LaunchedEffect(snapshotReady, composition != null) {
snapshotReady.value = composition != null
}
val dynamicProperties = rememberLottieDynamicProperties(
rememberLottieDynamicProperty(LottieProperty.TEXT, "NAME") { frameInfo ->
"${frameInfo.endValue}!!!"
},
)
LottieAnimation(composition, { 0f }, dynamicProperties = dynamicProperties)
}
}
}