From 20af1fc3b65a8c352a938a8e3693fe182c831a36 Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Fri, 1 May 2020 22:59:34 +0800 Subject: [PATCH] Reset listeners before run a new task (#294) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 支持监听优先级, 事件传递拦截 * Fix test * 并发 * 优先级&并发 * Test * Fix unused * To GlobalEventListeners * Add tests * intercept with subscribeAlways * test listener.complete() * Add functions * Fix test and add new test * Test concurrent listening * Test concurrent listening * update broadcast * Fix Boom * Reset listeners before run a new task Co-authored-by: Him188 --- .../net/mamoe/mirai/event/EventTests.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/EventTests.kt b/mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/EventTests.kt index b740314f9..8ad96a021 100644 --- a/mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/EventTests.kt +++ b/mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/EventTests.kt @@ -12,6 +12,8 @@ package net.mamoe.mirai.event import kotlinx.atomicfu.AtomicInt import kotlinx.atomicfu.atomic import kotlinx.coroutines.* +import net.mamoe.mirai.event.internal.GlobalEventListeners +import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.StepUtil import net.mamoe.mirai.utils.internal.runBlocking import java.util.concurrent.Executor @@ -27,6 +29,7 @@ class TestEvent : Event, AbstractEvent() { class EventTests { @Test fun testSubscribeInplace() { + resetEventListeners() runBlocking { val subscriber = subscribeAlways { triggered = true @@ -39,6 +42,7 @@ class EventTests { @Test fun testSubscribeGlobalScope() { + resetEventListeners() runBlocking { GlobalScope.subscribeAlways { triggered = true @@ -50,6 +54,7 @@ class EventTests { @Test fun `test concurrent listening`() { + resetEventListeners() var listeners = 0 val counter = AtomicInteger(0) for (p in Listener.EventPriority.values()) { @@ -73,6 +78,7 @@ class EventTests { @Test fun `test concurrent listening 3`() { + resetEventListeners() runBlocking { val called = AtomicInteger() val registered = AtomicInteger() @@ -104,6 +110,7 @@ class EventTests { @Test fun `test concurrent listening 2`() { + resetEventListeners() val registered = AtomicInteger() val called = AtomicInteger() val threads = mutableListOf() @@ -149,6 +156,7 @@ class EventTests { @Test fun `broadcast Child to Parent`() { + resetEventListeners() runBlocking { val job: CompletableJob job = subscribeAlways { @@ -162,6 +170,7 @@ class EventTests { @Test fun `broadcast ChildChild to Parent`() { + resetEventListeners() runBlocking { val job: CompletableJob job = subscribeAlways { @@ -188,6 +197,7 @@ class EventTests { @Test fun `test handler remvoe`() { + resetEventListeners() val step = StepUtil() singleThreaded(step) { subscribe { @@ -209,9 +219,16 @@ class EventTests { } } */ + fun resetEventListeners() { + for (p in Listener.EventPriority.values()) { + @OptIn(MiraiInternalAPI::class) + GlobalEventListeners[p].clear() + } + } @Test fun `test intercept with always`() { + resetEventListeners() val step = StepUtil() singleThreaded(step) { subscribeAlways { @@ -228,6 +245,7 @@ class EventTests { @Test fun `test intercept`() { + resetEventListeners() val step = StepUtil() singleThreaded(step) { subscribeAlways { @@ -244,6 +262,7 @@ class EventTests { @Test fun `test listener complete`() { + resetEventListeners() val step = StepUtil() singleThreaded(step) { val listener = subscribeAlways { @@ -257,6 +276,7 @@ class EventTests { @Test fun `test event priority`() { + resetEventListeners() val step = StepUtil() singleThreaded(step) { subscribe {