init: 自 zomaintain/backend/rdplib 平移独立成库; module path 从上游 github.com/nakagami/grdp 改为 git.zeroonesoft.cn/golib/rdplib
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package emission
|
||||
|
||||
import "testing"
|
||||
|
||||
// 回归:func([]byte) 快速路径此前不写 ptr,Off/RemoveListener 永远删不掉,
|
||||
// 并行 MCS 通道加入的持久监听器泄漏后每包数据重复进入(日志刷屏)。
|
||||
func TestRemoveListenerFastPathFuncBytes(t *testing.T) {
|
||||
e := NewEmitter()
|
||||
calls := 0
|
||||
fn := func(s []byte) { calls++ }
|
||||
e.On("data", fn)
|
||||
e.Emit("data", []byte("x"))
|
||||
e.Emit("data", []byte("y"))
|
||||
if calls != 2 {
|
||||
t.Fatalf("calls=%d, want 2", calls)
|
||||
}
|
||||
e.Off("data", fn)
|
||||
e.Emit("data", []byte("z"))
|
||||
if calls != 2 {
|
||||
t.Fatalf("Off 未生效: calls=%d, want 2", calls)
|
||||
}
|
||||
}
|
||||
|
||||
// func(error) 与 func() 快速路径同样必须可摘除。
|
||||
func TestRemoveListenerFastPathMisc(t *testing.T) {
|
||||
e := NewEmitter()
|
||||
n := 0
|
||||
fnErr := func(err error) { n++ }
|
||||
e.On("error", fnErr)
|
||||
e.Emit("error", nil)
|
||||
e.Off("error", fnErr)
|
||||
e.Emit("error", nil)
|
||||
if n != 1 {
|
||||
t.Fatalf("func(error) Off 未生效: n=%d", n)
|
||||
}
|
||||
|
||||
m := 0
|
||||
fn0 := func() { m++ }
|
||||
e.On("tick", fn0)
|
||||
e.Emit("tick")
|
||||
e.Off("tick", fn0)
|
||||
e.Emit("tick")
|
||||
if m != 1 {
|
||||
t.Fatalf("func() Off 未生效: m=%d", m)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user