/* * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.coroutines import kotlin.test.* class DebugThreadNameTest : TestBase() { @BeforeTest fun resetName() { resetCoroutineId() } @Test fun testLaunchId() = runTest { assertName("coroutine#1") launch { assertName("coroutine#2") yield() assertName("coroutine#2") } assertName("coroutine#1") } @Test fun testLaunchIdUndispatched() = runTest { assertName("coroutine#1") launch(start = CoroutineStart.UNDISPATCHED) { assertName("coroutine#2") yield() assertName("coroutine#2") } assertName("coroutine#1") } @Test fun testLaunchName() = runTest { assertName("coroutine#1") launch(CoroutineName("TEST")) { assertName("TEST#2") yield() assertName("TEST#2") } assertName("coroutine#1") } @Test fun testWithContext() = runTest { assertName("coroutine#1") withContext(Dispatchers.Default) { assertName("coroutine#1") yield() assertName("coroutine#1") withContext(CoroutineName("TEST")) { assertName("TEST#1") yield() assertName("TEST#1") } assertName("coroutine#1") yield() assertName("coroutine#1") } assertName("coroutine#1") } private fun assertName(expected: String) { val name = Thread.currentThread().name val split = name.split(Regex(" @")) assertEquals(2, split.size, "Thread name '$name' is expected to contain one coroutine name") assertEquals(expected, split[1], "Thread name '$name' is expected to end with coroutine name '$expected'") } }