Comments (3)
Reproduced the on Desktop as well:
- delay is not respected
- while loop never stops
It makes sense because runComposeUiTest
is implemented by SkikoComposeUiTest on all platforms except Android.
My undersanding of the behaviour:
SkikoComposeUiTest uses UnconfinedTestDispatcher() and it's applied to composition too. UnconfinedTestDispatcher doesn't follow the real time, it uses virtual time instead to allow "faster" tests for time-based behaviour. By defualt it skips delays.
As I remember, it was possible to disable autoAdvance of time and to manage it manually by adding:
mainClock.autoAdvance = false
at the top of your test.
I tried it now, and indeed it makes the test complete. But it seems I can't manage the time manually: mainClock.advanceTimeBy(20000)
- doesn't make the coroutine in LaunchedEffect resume its execution.
Perhaps @m-sasha, Could you please take a look here?
I think even if the workaround with disabling autoAdvance was helpful, it would still mean the code for android vs non-android tests is not identical?
I remember when porting some tests we indeed had to change the code a bit, but I'm not sure about current state of the tests API and its implementation.
from compose-multiplatform.
Everything seems to be working as expected here (tested with compose-plugin = "1.6.10"
).
delay
is intentionally skipped in UI tests, on both Android and in Compose Multiplatform. On Android, the existence of suspended coroutines in a LaunchedEffect
does not prevent waitForIdle
from returning. Because of this, the test finishes on Android. I've reported this here, and it appears this has been reported by others as well.
Using mainClock.autoAdvance = false
and mainClock.advanceTimeBy
appears to also be working correctly. The code below prints once when run without mainClock.advanceTimeBy(11_000)
and twice with.
internal class DelayTest {
@OptIn(ExperimentalTestApi::class)
@Test
fun test_delay() = runComposeUiTest {
mainClock.autoAdvance = false
setContent {
println("setContent ${getCurrentTime()}")
var refreshKey by mutableStateOf(0)
LaunchedEffect(Unit) {
while (true) {
println("LaunchedEffect - key $refreshKey - ${getCurrentTime()}")
delay(10_000)
refreshKey++
}
}
Text("Hello, World!")
assertTrue(true)
}
// mainClock.advanceTimeBy(11_000)
}
private fun getCurrentTime(): Long {
return Clock.System.now().toEpochMilliseconds()
}
}
from compose-multiplatform.
Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.
from compose-multiplatform.
Related Issues (20)
- [1.7.0-alpha01] GraphicsLayer do not seems to like being drawn multiple times HOT 4
- MacOS Notarize App with Native Library Failed Error 65 HOT 4
- [1.7.0-alpha01] Moving after initiating a click cancels it HOT 2
- Preview in commonMain? HOT 2
- [1.7.0-alpha01] Cannot change attributes of dependency configuration ':debugFrameworkIosArm64' after it has been resolved HOT 9
- I have an issue with a common ViewModel and navigation in my Compose Multiplatform application HOT 3
- Ios crash while using textMeasurer.measure inside Dispatchers.Default HOT 17
- CompositionLocalProvider related RuntimeError: illegal cast HOT 7
- Compose navigation crash v2.8.0-alpha08 (UnsatisfiedLinkError) HOT 5
- Support common `org.jetbrains.compose.ui.tooling.preview.Preview` in IDEA and Android Studio HOT 17
- ShadowJar Executable HOT 2
- Error: self-signed certificate in certificate chain HOT 5
- Improved window sizing API (Windows) HOT 3
- iOS Keyboard Broken with `readOnly` will show/hide in loop HOT 13
- iOS: ModalBottomSheet can't ignore safeArea HOT 2
- Unable to run tests using Multiplatform Resources HOT 2
- Make AnnotatedString.Companion.fromHtml available to multiplatform HOT 3
- [WASM] Custom Font Text flickering from tofu to the actual text with the right font HOT 4
- Previewing fails with AssertionError: Data is too big HOT 3
- Important: please use YouTrack for bugs and feature requests
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from compose-multiplatform.