fix: fix tests error, add more tests

This commit is contained in:
Inhere
2022-04-14 23:52:51 +08:00
parent 09244d353d
commit f8c73c0465
5 changed files with 100 additions and 10 deletions

49
benchmark_test.go Normal file
View 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)
}
}

View File

@@ -3,6 +3,9 @@ package event
// DefaultEM default event manager // DefaultEM default event manager
var DefaultEM = NewManager("default") var DefaultEM = NewManager("default")
// NoMatchedListener error
// var NoMatchedListener = errors.New("no event listeners matched")
/************************************************************* /*************************************************************
* Listener * Listener
*************************************************************/ *************************************************************/
@@ -37,7 +40,7 @@ func Trigger(name string, params M) (error, Event) {
return DefaultEM.Fire(name, params) return DefaultEM.Fire(name, params)
} }
// Fire fire listeners by name. // Fire listeners by name.
func Fire(name string, params M) (error, Event) { func Fire(name string, params M) (error, Event) {
return DefaultEM.Fire(name, params) return DefaultEM.Fire(name, params)
} }

38
global_test.go Normal file
View 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)
}

View File

@@ -33,7 +33,7 @@ type Manager struct {
// name of the manager // name of the manager
name string name string
// pool sync.Pool // pool sync.Pool
// is an sample for new BasicEvent // is a sample for new BasicEvent
sample *BasicEvent sample *BasicEvent
// storage user custom Event instance. you can pre-define some Event instances. // storage user custom Event instance. you can pre-define some Event instances.
events map[string]Event events map[string]Event
@@ -149,7 +149,7 @@ func (em *Manager) Trigger(name string, params M) (error, Event) {
return em.Fire(name, params) 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) { func (em *Manager) Fire(name string, params M) (err error, e Event) {
name = goodName(name) 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.*" // has group listeners. "app.*" "app.db.*"
// eg: "app.db.run" will trigger listeners on the "app.db.*" // eg: "app.db.run" will trigger listeners on the "app.db.*"
pos := strings.LastIndexByte(name, '.') pos := strings.LastIndexByte(name, '.')
if pos > 0 && pos < len(name) { if pos < 0 || pos == len(name)-1 {
groupName := name[:pos+1] + Wildcard // "app.db.*" return // not found listeners.
}
// not found listeners. groupName := name[:pos+1] + Wildcard // "app.db.*"
if false == em.HasListeners(groupName) { if false == em.HasListeners(groupName) {
return return // not found listeners.
}
} }
} }
@@ -320,7 +320,6 @@ func (em *Manager) newBasicEvent(name string, data M) *BasicEvent {
cp.SetName(name) cp.SetName(name)
cp.SetData(data) cp.SetData(data)
return &cp return &cp
} }
@@ -354,6 +353,7 @@ func (em *Manager) ListenedNames() map[string]int {
} }
// RemoveListener remove a given listener, you can limit event name. // RemoveListener remove a given listener, you can limit event name.
//
// Usage: // Usage:
// RemoveListener("", listener) // RemoveListener("", listener)
// RemoveListener("name", listener) // limit event name. // RemoveListener("name", listener) // limit event name.