1 package kotlinx.coroutines.debug 2 3 import kotlinx.coroutines.* 4 import org.junit.* 5 import org.junit.Test 6 import kotlin.test.* 7 8 class DumpWithCreationStackTraceTest : DebugTestBase() { 9 @Before setUpnull10 override fun setUp() { 11 super.setUp() 12 DebugProbes.enableCreationStackTraces = true 13 } 14 15 @Test <lambda>null16 fun testCoroutinesDump() = runTest { 17 val deferred = createActiveDeferred() 18 yield() 19 verifyDump( 20 "Coroutine \"coroutine#1\":BlockingCoroutine{Active}@70d1cb56, state: RUNNING\n" + 21 "\tat java.lang.Thread.getStackTrace(Thread.java)\n" + 22 "\tat kotlinx.coroutines.debug.internal.DebugProbesImpl.enhanceStackTraceWithThreadDumpImpl(DebugProbesImpl.kt)\n" + 23 "\tat kotlinx.coroutines.debug.internal.DebugProbesImpl.dumpCoroutinesSynchronized(DebugProbesImpl.kt)\n" + 24 "\tat kotlinx.coroutines.debug.internal.DebugProbesImpl.dumpCoroutines(DebugProbesImpl.kt)\n" + 25 "\tat kotlinx.coroutines.debug.DebugProbes.dumpCoroutines(DebugProbes.kt:182)\n" + 26 "\tat kotlinx.coroutines.debug.StacktraceUtilsKt.verifyDump(StacktraceUtils.kt)\n" + 27 "\tat kotlinx.coroutines.debug.StacktraceUtilsKt.verifyDump\$default(StacktraceUtils.kt)\n" + 28 "\tat kotlinx.coroutines.debug.DumpWithCreationStackTraceTest\$testCoroutinesDump\$1.invokeSuspend(DumpWithCreationStackTraceTest.kt)\n" + 29 "\tat _COROUTINE._CREATION._(CoroutineDebugging.kt)\n" + 30 "\tat kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt.createCoroutineUnintercepted(IntrinsicsJvm.kt)", 31 32 "Coroutine \"coroutine#2\":DeferredCoroutine{Active}@383fa309, state: SUSPENDED\n" + 33 "\tat kotlinx.coroutines.debug.DumpWithCreationStackTraceTest\$createActiveDeferred\$1.invokeSuspend(DumpWithCreationStackTraceTest.kt)" 34 ) 35 deferred.cancelAndJoin() 36 } 37 38 <lambda>null39 private fun CoroutineScope.createActiveDeferred(): Deferred<*> = async { 40 suspendingMethod() 41 assertTrue(true) 42 } 43 suspendingMethodnull44 private suspend fun suspendingMethod() { 45 delay(Long.MAX_VALUE) 46 } 47 } 48