init: 自 zomaintain/backend/rdplib 平移独立成库; module path 从上游 github.com/nakagami/grdp 改为 git.zeroonesoft.cn/golib/rdplib

This commit is contained in:
w11
2026-09-19 18:55:43 +08:00
commit 1096fbce9d
94 changed files with 36790 additions and 0 deletions
+46
View File
@@ -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)
}
}