package goemitter import ( "testing" "time" ) func TestEventEmitter_Emit(t *testing.T) { emitter := NewEmitter() // 注册一个普通回调函数 emitter.On("testEvent", func(data ...interface{}) { t.Log("普通回调函数被调用") }) // 注册一个一次性回调函数 emitter.Once("testEvent", func(data ...interface{}) { 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) { emitter := NewEmitter() // 测试添加新事件和回调函数 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("一次性回调函数没有被清除") } } 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") }