Files
checky/bus_test.go

99 lines
1.3 KiB
Go
Raw Normal View History

2022-03-15 21:55:36 +00:00
package main
import "testing"
func TestBus(t *testing.T) {
bus := NewBus()
// Announce with no subscribers
bus.Announce(&busTest1{
Id: "id-nosub",
})
// Complex subscription layout
ch1a := bus.Subscribe(&busTest1{
Id: "id-overlap",
})
ch2a := bus.Subscribe(&busTest2{
Id: "id-overlap",
})
ch2b := bus.Subscribe(&busTest2{
Id: "id-dupe",
})
ch2c := bus.Subscribe(&busTest2{
Id: "id-dupe",
})
// Overlapping IDs but not types
bus.Announce(&busTest1{
Id: "id-overlap",
})
msg := <-ch1a
if msg.(*busTest1).Id != "id-overlap" {
t.Errorf("%+v", msg)
}
select {
case msg := <-ch2a:
t.Errorf("%+v", msg)
default:
}
bus.Announce(&busTest2{
Id: "id-overlap",
})
select {
case msg := <-ch1a:
t.Errorf("%+v", msg)
default:
}
msg = <-ch2a
if msg.(*busTest2).Id != "id-overlap" {
t.Errorf("%+v", msg)
}
bus.Announce(&busTest2{
Id: "id-dupe",
})
msg = <-ch2b
if msg.(*busTest2).Id != "id-dupe" {
t.Errorf("%+v", msg)
}
msg = <-ch2c
if msg.(*busTest2).Id != "id-dupe" {
t.Errorf("%+v", msg)
}
}
type busTest1 struct {
Id string
}
func (bt *busTest1) GetType() string {
return "busTest1"
}
func (bt *busTest1) GetId() string {
return bt.Id
}
type busTest2 struct {
Id string
}
func (bt *busTest2) GetType() string {
return "busTest2"
}
func (bt *busTest2) GetId() string {
return bt.Id
}