2011-07-27 20:00:23 +00:00
|
|
|
package event
|
2011-07-27 16:49:55 +00:00
|
|
|
|
|
|
|
// oh hey unit tests. or functionality tests, or something.
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestSimpleDispatch(t *testing.T) {
|
|
|
|
r := NewRegistry()
|
|
|
|
out := make(chan bool)
|
|
|
|
|
|
|
|
h := NewHandler(func(ev ...interface{}) {
|
|
|
|
out <- ev[0].(bool)
|
|
|
|
})
|
|
|
|
r.AddHandler("send", h)
|
|
|
|
|
|
|
|
r.Dispatch("send", true)
|
|
|
|
if val := <-out; !val {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
|
|
|
|
r.Dispatch("send", false)
|
|
|
|
if val := <-out; val {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParallelDispatch(t *testing.T) {
|
|
|
|
r := NewRegistry()
|
|
|
|
// ensure we have enough of a buffer that all sends complete
|
|
|
|
out := make(chan int, 5)
|
|
|
|
// handler factory :-)
|
|
|
|
factory := func(t int) Handler {
|
|
|
|
return NewHandler(func(ev ...interface{}) {
|
|
|
|
// t * 10ms sleep
|
|
|
|
time.Sleep(int64(t * 1e7))
|
|
|
|
out <- t
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
// create some handlers and send an event to them
|
|
|
|
for _, t := range []int{5,11,2,15,8} {
|
|
|
|
r.AddHandler("send", factory(t))
|
|
|
|
}
|
|
|
|
r.Dispatch("send")
|
|
|
|
|
|
|
|
// If parallel dispatch is working, results from out should be in numerical order
|
|
|
|
if val := <-out; val != 2 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 5 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 8 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 11 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 15 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSerialDispatch(t *testing.T) {
|
|
|
|
r := NewRegistry()
|
|
|
|
r.Serial()
|
|
|
|
// ensure we have enough of a buffer that all sends complete
|
|
|
|
out := make(chan int, 5)
|
|
|
|
// handler factory :-)
|
|
|
|
factory := func(t int) Handler {
|
|
|
|
return NewHandler(func(ev ...interface{}) {
|
|
|
|
// t * 10ms sleep
|
|
|
|
time.Sleep(int64(t * 1e7))
|
|
|
|
out <- t
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
// create some handlers and send an event to them
|
|
|
|
for _, t := range []int{5,11,2,15,8} {
|
|
|
|
r.AddHandler("send", factory(t))
|
|
|
|
}
|
|
|
|
r.Dispatch("send")
|
|
|
|
|
|
|
|
// If serial dispatch is working, results from out should be in handler order
|
|
|
|
if val := <-out; val != 5 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 11 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 2 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 15 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if val := <-out; val != 8 {
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|