From 8621abfa62171cdcd09239a4dbed1dba52cd175f Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Tue, 15 Mar 2022 21:55:36 +0000 Subject: [PATCH] Test Bus --- bus_test.go | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 bus_test.go diff --git a/bus_test.go b/bus_test.go new file mode 100644 index 0000000..ee346c8 --- /dev/null +++ b/bus_test.go @@ -0,0 +1,98 @@ +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 +}