Pārlūkot izejas kodu

Rewrite `AbstractConsoleTest`, fix cancellation issues

Him188 4 gadi atpakaļ
vecāks
revīzija
66367c893c

+ 0 - 31
backend/mirai-console/test/AbstractConsoleTest.kt

@@ -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() }
-    }
-}

+ 4 - 3
backend/mirai-console/test/TestMiraiConosle.kt

@@ -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
 }

+ 1 - 1
backend/mirai-console/test/data/JavaPluginDescriptionTests.kt

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

+ 49 - 0
backend/mirai-console/test/framework/AbstractConsoleTest.kt

@@ -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")) {}
+        }
+    }
+}

+ 28 - 0
backend/mirai-console/test/framework/test/FrameworkTest.kt

@@ -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)
+    }
+}