goirc/event/registry_test.go

104 lines
2.0 KiB
Go
Raw Normal View History

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)
2011-07-27 16:49:55 +00:00
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} {
2011-07-27 16:49:55 +00:00
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()
2011-07-29 22:11:05 +00:00
r.(*registry).Serial()
2011-07-27 16:49:55 +00:00
// 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} {
2011-07-27 16:49:55 +00:00
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()
}
}