Rewrite AbstractConsoleTest, fix cancellation issues

This commit is contained in:
Him188 2021-12-01 17:54:05 +00:00
parent 2dda2ff31b
commit 66367c893c
5 changed files with 82 additions and 35 deletions

View File

@ -1,31 +0,0 @@
/*
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package net.mamoe.mirai.console
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.runBlocking
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
abstract class AbstractConsoleTest {
val mockPlugin = object : KotlinPlugin(JvmPluginDescription("org.test.test", "1.0.0")) {}
@BeforeEach
fun beforeTest() {
initTestEnvironment()
}
@AfterEach
fun afterTest() {
runBlocking { MiraiConsole.job.cancelAndJoin() }
}
}

View File

@ -76,9 +76,10 @@ fun initTestEnvironment() {
return PlatformLogger(identity)
}
override val coroutineContext: CoroutineContext = SupervisorJob() + CoroutineExceptionHandler { _, throwable ->
throwable.printStackTrace()
}
override val coroutineContext: CoroutineContext =
CoroutineName("Console Main") + SupervisorJob() + CoroutineExceptionHandler { _, throwable ->
throwable.printStackTrace()
}
}.start()
CommandManager
}

View File

@ -8,7 +8,7 @@
*/
package data
import net.mamoe.mirai.console.AbstractConsoleTest
import net.mamoe.mirai.console.framework.AbstractConsoleTest
@Suppress("unused")
class JavaPluginDescriptionTests : AbstractConsoleTest() {

View File

@ -0,0 +1,49 @@
/*
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package net.mamoe.mirai.console.framework
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.runBlocking
import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.MiraiConsoleImplementation
import net.mamoe.mirai.console.initTestEnvironment
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
abstract class AbstractConsoleTest {
val mockPlugin by lazy { mockKotlinPlugin() }
@BeforeEach
protected open fun initializeConsole() {
initTestEnvironment()
}
@AfterEach
protected open fun cancelConsole() {
if (MiraiConsoleImplementation.instanceInitialized) {
try {
runBlocking { MiraiConsole.job.cancelAndJoin() }
} catch (e: CancellationException) {
// ignored
} catch (e: Exception) {
e.printStackTrace()
}
}
}
companion object {
fun mockKotlinPlugin(): KotlinPlugin {
return object : KotlinPlugin(JvmPluginDescription("org.test.test", "1.0.0")) {}
}
}
}

View File

@ -0,0 +1,28 @@
/*
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package net.mamoe.mirai.console.framework.test
import net.mamoe.mirai.console.framework.AbstractConsoleTest
import net.mamoe.mirai.console.plugin.PluginManager
import org.junit.jupiter.api.Test
import kotlin.test.assertEquals
class FrameworkTest : AbstractConsoleTest() {
@Test
fun testConsole1() {
assertEquals(0, PluginManager.plugins.size)
}
@Test
fun testConsole2() {
assertEquals(0, PluginManager.plugins.size)
}
}