1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-11-16 20:03:38 +00:00
arikawa/handler/handler_test.go

147 lines
2.4 KiB
Go

// +build unit
package handler
import (
"reflect"
"strings"
"testing"
"time"
"github.com/diamondburned/arikawa/gateway"
)
func TestCall(t *testing.T) {
var results = make(chan string)
h := &Handler{
handlers: map[uint64]handler{},
}
// Add handler test
rm := h.AddHandler(func(m *gateway.MessageCreateEvent) {
results <- m.Content
})
go h.Call(&gateway.MessageCreateEvent{
Content: "test",
})
if r := <-results; r != "test" {
t.Fatal("Returned results is wrong:", r)
}
// Remove handler test
rm()
go h.Call(&gateway.MessageCreateEvent{
Content: "test",
})
select {
case <-results:
t.Fatal("Unexpected results")
case <-time.After(time.Millisecond):
break
}
// Invalid type test
_, err := h.AddHandlerCheck("this should panic")
if err == nil {
t.Fatal("No errors found")
}
// We don't do anything with the returned callback, as there's none.
if !strings.Contains(err.Error(), "given interface is not a function") {
t.Fatal("Unexpected error:", err)
}
}
func TestHandler(t *testing.T) {
var results = make(chan string)
h, err := reflectFn(func(m *gateway.MessageCreateEvent) {
results <- m.Content
})
if err != nil {
t.Fatal(err)
}
const result = "Hime Arikawa"
var msg = &gateway.MessageCreateEvent{
Content: result,
}
var msgV = reflect.ValueOf(msg)
var msgT = msgV.Type()
if h.not(msgT) {
t.Fatal("Event type mismatch")
}
go h.call(msgV)
if results := <-results; results != result {
t.Fatal("Unexpected results:", results)
}
}
func TestHandlerInterface(t *testing.T) {
var results = make(chan interface{})
h, err := reflectFn(func(m interface{}) {
results <- m
})
if err != nil {
t.Fatal(err)
}
const result = "Hime Arikawa"
var msg = &gateway.MessageCreateEvent{
Content: result,
}
var msgV = reflect.ValueOf(msg)
var msgT = msgV.Type()
if h.not(msgT) {
t.Fatal("Event type mismatch")
}
go h.call(msgV)
recv := <-results
if msg, ok := recv.(*gateway.MessageCreateEvent); ok {
if msg.Content == result {
return
}
t.Fatal("Content mismatch:", msg.Content)
}
t.Fatal("Assertion failed:", recv)
}
func BenchmarkReflect(b *testing.B) {
h, err := reflectFn(func(m *gateway.MessageCreateEvent) {})
if err != nil {
b.Fatal(err)
}
var msg = &gateway.MessageCreateEvent{}
b.ResetTimer()
for n := 0; n < b.N; n++ {
var msgV = reflect.ValueOf(msg)
var msgT = msgV.Type()
if h.not(msgT) {
b.Fatal("Event type mismatch")
}
h.call(msgV)
}
}