mirror of https://github.com/fluffle/goirc
unit tests, sort of.
This commit is contained in:
parent
cce112465f
commit
3e82bf33c3
|
@ -0,0 +1,104 @@
|
||||||
|
package registry
|
||||||
|
|
||||||
|
// 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue