mirror of
https://github.com/gookit/event
synced 2025-09-26 19:11:14 +08:00
fix: fix tests error, add more tests
This commit is contained in:
49
benchmark_test.go
Normal file
49
benchmark_test.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package event_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/gookit/event"
|
||||
)
|
||||
|
||||
func BenchmarkManager_Fire_no_listener(b *testing.B) {
|
||||
em := event.NewManager("test")
|
||||
em.On("app.up", event.ListenerFunc(func(e event.Event) error {
|
||||
return nil
|
||||
}))
|
||||
|
||||
b.ResetTimer()
|
||||
b.ReportAllocs()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
_, _ = em.Fire("app.up", nil)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkManager_Fire_normal(b *testing.B) {
|
||||
em := event.NewManager("test")
|
||||
em.On("app.up", event.ListenerFunc(func(e event.Event) error {
|
||||
return nil
|
||||
}))
|
||||
|
||||
b.ResetTimer()
|
||||
b.ReportAllocs()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
_, _ = em.Fire("app.up", nil)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkManager_Fire_wildcard(b *testing.B) {
|
||||
em := event.NewManager("test")
|
||||
em.On("app.*", event.ListenerFunc(func(e event.Event) error {
|
||||
return nil
|
||||
}))
|
||||
|
||||
b.ResetTimer()
|
||||
b.ReportAllocs()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
_, _ = em.Fire("app.up", nil)
|
||||
}
|
||||
}
|
@@ -3,6 +3,9 @@ package event
|
||||
// DefaultEM default event manager
|
||||
var DefaultEM = NewManager("default")
|
||||
|
||||
// NoMatchedListener error
|
||||
// var NoMatchedListener = errors.New("no event listeners matched")
|
||||
|
||||
/*************************************************************
|
||||
* Listener
|
||||
*************************************************************/
|
||||
@@ -37,7 +40,7 @@ func Trigger(name string, params M) (error, Event) {
|
||||
return DefaultEM.Fire(name, params)
|
||||
}
|
||||
|
||||
// Fire fire listeners by name.
|
||||
// Fire listeners by name.
|
||||
func Fire(name string, params M) (error, Event) {
|
||||
return DefaultEM.Fire(name, params)
|
||||
}
|
||||
|
38
global_test.go
Normal file
38
global_test.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package event_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/gookit/event"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestFire_point_at_end(t *testing.T) {
|
||||
// clear all
|
||||
event.Reset()
|
||||
event.Listen("db.*", event.ListenerFunc(func(e event.Event) error {
|
||||
e.Set("key", "val")
|
||||
return nil
|
||||
}))
|
||||
|
||||
err, e := event.Fire("db.add", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "val", e.Get("key"))
|
||||
|
||||
err, e = event.Fire("db", nil)
|
||||
assert.Nil(t, e)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err, e = event.Fire("db.", nil)
|
||||
assert.Nil(t, e)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestFire_notExist(t *testing.T) {
|
||||
// clear all
|
||||
event.Reset()
|
||||
|
||||
err, e := event.Fire("not-exist", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Nil(t, e)
|
||||
}
|
18
manager.go
18
manager.go
@@ -33,7 +33,7 @@ type Manager struct {
|
||||
// name of the manager
|
||||
name string
|
||||
// pool sync.Pool
|
||||
// is an sample for new BasicEvent
|
||||
// is a sample for new BasicEvent
|
||||
sample *BasicEvent
|
||||
// storage user custom Event instance. you can pre-define some Event instances.
|
||||
events map[string]Event
|
||||
@@ -149,7 +149,7 @@ func (em *Manager) Trigger(name string, params M) (error, Event) {
|
||||
return em.Fire(name, params)
|
||||
}
|
||||
|
||||
// Fire trigger event by name
|
||||
// Fire trigger event by name. if not found listener, will return (nil, nil)
|
||||
func (em *Manager) Fire(name string, params M) (err error, e Event) {
|
||||
name = goodName(name)
|
||||
|
||||
@@ -158,13 +158,13 @@ func (em *Manager) Fire(name string, params M) (err error, e Event) {
|
||||
// has group listeners. "app.*" "app.db.*"
|
||||
// eg: "app.db.run" will trigger listeners on the "app.db.*"
|
||||
pos := strings.LastIndexByte(name, '.')
|
||||
if pos > 0 && pos < len(name) {
|
||||
groupName := name[:pos+1] + Wildcard // "app.db.*"
|
||||
|
||||
// not found listeners.
|
||||
if false == em.HasListeners(groupName) {
|
||||
return
|
||||
if pos < 0 || pos == len(name)-1 {
|
||||
return // not found listeners.
|
||||
}
|
||||
|
||||
groupName := name[:pos+1] + Wildcard // "app.db.*"
|
||||
if false == em.HasListeners(groupName) {
|
||||
return // not found listeners.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,7 +320,6 @@ func (em *Manager) newBasicEvent(name string, data M) *BasicEvent {
|
||||
|
||||
cp.SetName(name)
|
||||
cp.SetData(data)
|
||||
|
||||
return &cp
|
||||
}
|
||||
|
||||
@@ -354,6 +353,7 @@ func (em *Manager) ListenedNames() map[string]int {
|
||||
}
|
||||
|
||||
// RemoveListener remove a given listener, you can limit event name.
|
||||
//
|
||||
// Usage:
|
||||
// RemoveListener("", listener)
|
||||
// RemoveListener("name", listener) // limit event name.
|
||||
|
Reference in New Issue
Block a user