From 85322b3321a38dce2b50e1409611bf70b5096ccb Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Sat, 10 Apr 2021 14:57:08 +0800
Subject: [PATCH] Terminal: make MiraiConsoleImplementationTerminal open and
 enable all logs for tests

---
 .../src/MiraiConsoleImplementationTerminal.kt | 26 +++++++++---------
 .../test/RunTerminal.kt                       | 27 ++++++++++++++++++-
 2 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/frontend/mirai-console-terminal/src/MiraiConsoleImplementationTerminal.kt b/frontend/mirai-console-terminal/src/MiraiConsoleImplementationTerminal.kt
index 08c20e4b0..61076c785 100644
--- a/frontend/mirai-console-terminal/src/MiraiConsoleImplementationTerminal.kt
+++ b/frontend/mirai-console-terminal/src/MiraiConsoleImplementationTerminal.kt
@@ -1,10 +1,10 @@
 /*
- * Copyright 2019-2020 Mamoe Technologies and contributors.
+ * Copyright 2019-2021 Mamoe Technologies and contributors.
  *
- * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
- * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 license that can be found through the following link.
+ *  此源代码的使用受 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
+ *  https://github.com/mamoe/mirai/blob/master/LICENSE
  */
 
 @file:Suppress(
@@ -55,9 +55,9 @@ import java.nio.file.Paths
  * @see MiraiConsoleTerminalLoader CLI 入口点
  */
 @ConsoleExperimentalApi
-class MiraiConsoleImplementationTerminal
+open class MiraiConsoleImplementationTerminal
 @JvmOverloads constructor(
-    override val rootPath: Path = Paths.get(System.getProperty("user.dir", ".")).toAbsolutePath(),
+    final override val rootPath: Path = Paths.get(System.getProperty("user.dir", ".")).toAbsolutePath(),
     override val builtInPluginLoaders: List<Lazy<PluginLoader<*, *>>> = listOf(lazy { JvmPluginLoader }),
     override val frontEndDescription: MiraiConsoleFrontEndDescription = ConsoleFrontEndDescImpl,
     override val consoleCommandSender: MiraiConsoleImplementation.ConsoleCommandSenderImpl = ConsoleCommandSenderImplTerminal,
@@ -67,13 +67,13 @@ class MiraiConsoleImplementationTerminal
     override val configStorageForBuiltIns: PluginDataStorage = MultiFilePluginDataStorage(rootPath.resolve("config")),
 ) : MiraiConsoleImplementation, CoroutineScope by CoroutineScope(
     NamedSupervisorJob("MiraiConsoleImplementationTerminal") +
-            CoroutineExceptionHandler { coroutineContext, throwable ->
-                if (throwable is CancellationException) {
-                    return@CoroutineExceptionHandler
-                }
-                val coroutineName = coroutineContext[CoroutineName]?.name ?: "<unnamed>"
-                MiraiConsole.mainLogger.error("Exception in coroutine $coroutineName", throwable)
-            }) {
+        CoroutineExceptionHandler { coroutineContext, throwable ->
+            if (throwable is CancellationException) {
+                return@CoroutineExceptionHandler
+            }
+            val coroutineName = coroutineContext[CoroutineName]?.name ?: "<unnamed>"
+            MiraiConsole.mainLogger.error("Exception in coroutine $coroutineName", throwable)
+        }) {
     override val consoleInput: ConsoleInput get() = ConsoleInputImpl
     override val isAnsiSupported: Boolean get() = true
 
diff --git a/frontend/mirai-console-terminal/test/RunTerminal.kt b/frontend/mirai-console-terminal/test/RunTerminal.kt
index ab34a8272..318799dc4 100644
--- a/frontend/mirai-console-terminal/test/RunTerminal.kt
+++ b/frontend/mirai-console-terminal/test/RunTerminal.kt
@@ -11,12 +11,37 @@ package net.mamoe.mirai.console.terminal
 
 import kotlinx.coroutines.runBlocking
 import net.mamoe.mirai.console.MiraiConsole
+import net.mamoe.mirai.console.extensions.BotConfigurationAlterer
+import net.mamoe.mirai.console.logging.LoggerController
+import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
+import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
+import net.mamoe.mirai.utils.MiraiLogger
+import net.mamoe.mirai.utils.SimpleLogger
 import java.io.File
 
 fun main() {
     configureUserDir()
 
-    MiraiConsoleTerminalLoader.startAsDaemon()
+    val terminal = object : MiraiConsoleImplementationTerminal() {
+        override val loggerController: LoggerController = object : LoggerController {
+            override fun shouldLog(identity: String?, priority: SimpleLogger.LogPriority): Boolean = true
+        }
+    }
+
+    val mockPlugin = object : KotlinPlugin(JvmPluginDescription("org.test.test", "1.0.0")) {}
+
+    terminal.backendAccess.globalComponentStorage.contribute(
+        BotConfigurationAlterer,
+        mockPlugin,
+        BotConfigurationAlterer { _, configuration ->
+            configuration.networkLoggerSupplier = { MiraiLogger.create("Net.${it.id}") } // deploy
+            configuration
+        }
+    )
+
+    MiraiConsoleTerminalLoader.startAsDaemon(terminal)
+
+
     runCatching { runBlocking { MiraiConsole.job.join() } }
 }