2024-09-19 16:19:02 +08:00
|
|
|
package goemitter
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestEventEmitter_Emit(t *testing.T) {
|
2024-11-16 16:12:20 +08:00
|
|
|
emitter := NewEmitter()
|
2024-09-19 16:19:02 +08:00
|
|
|
|
|
|
|
// 注册一个普通回调函数
|
2024-11-16 16:12:20 +08:00
|
|
|
emitter.On("testEvent", func(data ...interface{}) {
|
2024-09-19 16:19:02 +08:00
|
|
|
t.Log("普通回调函数被调用")
|
|
|
|
})
|
|
|
|
|
|
|
|
// 注册一个一次性回调函数
|
2024-11-16 16:12:20 +08:00
|
|
|
emitter.Once("testEvent", func(data ...interface{}) {
|
2024-09-19 16:19:02 +08:00
|
|
|
t.Log("一次性回调函数被调用")
|
|
|
|
})
|
|
|
|
|
|
|
|
// 触发事件
|
|
|
|
emitter.Emit("testEvent", "testData")
|
|
|
|
|
|
|
|
// 等待一段时间,确保异步执行的回调函数完成
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
if len(emitter.onceCallbacks["testEvent"]) != 0 {
|
|
|
|
t.Error("一次性回调函数没有被清除")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEventEmitter_Once(t *testing.T) {
|
2024-11-16 16:12:20 +08:00
|
|
|
emitter := NewEmitter()
|
2024-09-19 16:19:02 +08:00
|
|
|
|
|
|
|
// 测试添加新事件和回调函数
|
|
|
|
emitter.Once("event1", func(args ...interface{}) {})
|
|
|
|
if len(emitter.onceCallbacks["event1"]) != 1 {
|
|
|
|
t.Error("一次性回调函数添加失败")
|
|
|
|
}
|
|
|
|
|
|
|
|
// 测试添加已存在事件的回调函数
|
|
|
|
emitter.Once("event1", func(args ...interface{}) {})
|
|
|
|
if len(emitter.onceCallbacks["event1"]) != 2 {
|
|
|
|
t.Error("一次性回调函数再次添加失败")
|
|
|
|
}
|
|
|
|
|
|
|
|
// 测试不存在的事件
|
|
|
|
emitter.Once("event2", func(args ...interface{}) {})
|
|
|
|
emitter.Emit("event1", "testData")
|
|
|
|
|
|
|
|
// 等待一段时间,确保异步执行的回调函数完成
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
if len(emitter.onceCallbacks["event1"]) != 0 {
|
|
|
|
t.Error("一次性回调函数没有被清除")
|
|
|
|
}
|
|
|
|
}
|
2024-11-16 16:12:20 +08:00
|
|
|
|
|
|
|
func TestEmitterWithScope(t *testing.T) {
|
|
|
|
emitter := NewEmitter()
|
|
|
|
emitter.On("testEvent", func(data ...interface{}) {
|
|
|
|
t.Log("普通回调函数被调用")
|
|
|
|
})
|
|
|
|
func() {
|
|
|
|
emitter.On("testEvent", func(data ...interface{}) {
|
|
|
|
t.Log("匿名函数被调用")
|
|
|
|
})
|
|
|
|
}()
|
|
|
|
emitter.Emit("testEvent", "testData")
|
|
|
|
}
|