2013-12-19 23:39:37 +00:00
|
|
|
package raft
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Ensure that we can listen and dispatch events.
|
|
|
|
func TestDispatchEvent(t *testing.T) {
|
|
|
|
var count int
|
|
|
|
dispatcher := newEventDispatcher(nil)
|
|
|
|
dispatcher.AddEventListener("foo", func(e Event) {
|
|
|
|
count += 1
|
|
|
|
})
|
|
|
|
dispatcher.AddEventListener("foo", func(e Event) {
|
|
|
|
count += 10
|
|
|
|
})
|
|
|
|
dispatcher.AddEventListener("bar", func(e Event) {
|
|
|
|
count += 100
|
|
|
|
})
|
|
|
|
dispatcher.DispatchEvent(&event{typ: "foo", value: nil, prevValue: nil})
|
|
|
|
assert.Equal(t, 11, count)
|
|
|
|
}
|
|
|
|
|
2014-02-10 15:47:46 +00:00
|
|
|
// Ensure that we can add and remove a listener.
|
|
|
|
func TestRemoveEventListener(t *testing.T) {
|
|
|
|
var count int
|
|
|
|
f0 := func(e Event) {
|
|
|
|
count += 1
|
|
|
|
}
|
|
|
|
f1 := func(e Event) {
|
|
|
|
count += 10
|
|
|
|
}
|
|
|
|
|
|
|
|
dispatcher := newEventDispatcher(nil)
|
|
|
|
dispatcher.AddEventListener("foo", f0)
|
|
|
|
dispatcher.AddEventListener("foo", f1)
|
|
|
|
dispatcher.DispatchEvent(&event{typ: "foo"})
|
|
|
|
dispatcher.RemoveEventListener("foo", f0)
|
|
|
|
dispatcher.DispatchEvent(&event{typ: "foo"})
|
|
|
|
assert.Equal(t, 21, count)
|
|
|
|
}
|
|
|
|
|
2013-12-19 23:39:37 +00:00
|
|
|
// Ensure that event is properly passed to listener.
|
|
|
|
func TestEventListener(t *testing.T) {
|
|
|
|
dispatcher := newEventDispatcher("X")
|
|
|
|
dispatcher.AddEventListener("foo", func(e Event) {
|
|
|
|
assert.Equal(t, "foo", e.Type())
|
|
|
|
assert.Equal(t, "X", e.Source())
|
|
|
|
assert.Equal(t, 10, e.Value())
|
|
|
|
assert.Equal(t, 20, e.PrevValue())
|
|
|
|
})
|
|
|
|
dispatcher.DispatchEvent(&event{typ: "foo", value: 10, prevValue: 20})
|
|
|
|
}
|
|
|
|
|
|
|
|
// Benchmark the performance of event dispatch.
|
|
|
|
func BenchmarkEventDispatch(b *testing.B) {
|
|
|
|
dispatcher := newEventDispatcher(nil)
|
|
|
|
dispatcher.AddEventListener("xxx", func(e Event) {})
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
dispatcher.DispatchEvent(&event{typ: "foo", value: 10, prevValue: 20})
|
|
|
|
}
|
|
|
|
}
|