diff --git a/mirai-console/backend/integration-test/test/testpoints/plugin/PluginOnDisableCalledOnlyOnceTest.kt b/mirai-console/backend/integration-test/test/testpoints/plugin/PluginOnDisableCalledOnlyOnceTest.kt new file mode 100644 index 000000000..e5f41d024 --- /dev/null +++ b/mirai-console/backend/integration-test/test/testpoints/plugin/PluginOnDisableCalledOnlyOnceTest.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2022 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.console.integrationtest.testpoints.plugin + +import kotlinx.atomicfu.atomic +import net.mamoe.console.integrationtest.AbstractTestPointAsPlugin +import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription +import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin + +internal object PluginOnDisableCalledOnlyOnceTest : AbstractTestPointAsPlugin() { + override fun newPluginDescription(): JvmPluginDescription { + return JvmPluginDescription( + id = "net.mamoe.testpoint.plugin-on-disable-called-only-once", + version = "1.0.0", + name = "PluginOnDisableCalledOnlyOnce", + ) {} + } + + private val onDisableCalled = atomic(false) + + override fun KotlinPlugin.onDisable0() { + if (!onDisableCalled.compareAndSet(expect = false, update = true)) { + error("onDisable called multiple times!!") + } + } +} \ No newline at end of file diff --git a/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt b/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt index 4ba670022..604383030 100644 --- a/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt +++ b/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt @@ -21,11 +21,17 @@ import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest import kotlin.test.Test class PluginMovingTests : AbstractConsoleInstanceTest() { - private val mockPluginWithName = object : KotlinPlugin(JvmPluginDescription("org.test1.test1", "1.0.0", "test1")) {} - private val mockPluginWithName2 = + private val mockPluginWithName by lazy { + object : KotlinPlugin(JvmPluginDescription("org.test1.test1", "1.0.0", "test1")) {} + } + + private val mockPluginWithName2 by lazy { object : KotlinPlugin(JvmPluginDescription("org.test2.test2", "1.0.0", "test2")) {} - private val mockPluginWithName3 = + } + + private val mockPluginWithName3 by lazy { object : KotlinPlugin(JvmPluginDescription("org.test2.test3", "1.0.0", "test3")) {} + } private fun mkdir(abstractPath: String) = PluginManager.pluginsDataPath.resolve(abstractPath).mkdir()