diff options
author | zelig <viktor.tron@gmail.com> | 2014-07-05 02:38:53 +0800 |
---|---|---|
committer | zelig <viktor.tron@gmail.com> | 2014-07-05 02:38:53 +0800 |
commit | 0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a (patch) | |
tree | ef922763c5f68d92dd2a8fe905d61d68342fcb93 /ethreact/reactor_test.go | |
parent | 584d1c61ec93df3417f2ce8ece041b81a5ec63a6 (diff) | |
download | go-tangerine-0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a.tar go-tangerine-0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a.tar.gz go-tangerine-0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a.tar.bz2 go-tangerine-0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a.tar.lz go-tangerine-0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a.tar.xz go-tangerine-0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a.tar.zst go-tangerine-0c6f1c9c3aaba8e5a15ed50e90e65dd344afef8a.zip |
ethreact
- consistent renaming
- React -> Event
- ReactorEvent -> EventHandler
- NewReactorEngine -> New
- async ReactorEngine main loop with select on main eventChannel and quit channel
- ReactorEngine main loop control with Start() Stop() Flush()
- ReactorEngine.dispatch
- use sync.RWMutex
- delete eventHandler if subscribed channels go to 0
Diffstat (limited to 'ethreact/reactor_test.go')
-rw-r--r-- | ethreact/reactor_test.go | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/ethreact/reactor_test.go b/ethreact/reactor_test.go new file mode 100644 index 000000000..801a8abd0 --- /dev/null +++ b/ethreact/reactor_test.go @@ -0,0 +1,63 @@ +package ethreact + +import ( + "fmt" + "testing" +) + +func TestReactorAdd(t *testing.T) { + reactor := New() + ch := make(chan Event) + reactor.Subscribe("test", ch) + if reactor.eventHandlers["test"] == nil { + t.Error("Expected new eventHandler to be created") + } + reactor.Unsubscribe("test", ch) + if reactor.eventHandlers["test"] != nil { + t.Error("Expected eventHandler to be removed") + } +} + +func TestReactorEvent(t *testing.T) { + var name string + reactor := New() + // Buffer the channel, so it doesn't block for this test + cap := 20 + ch := make(chan Event, cap) + reactor.Subscribe("even", ch) + reactor.Subscribe("odd", ch) + reactor.Post("even", "disappears") // should not broadcast if engine not started + reactor.Start() + for i := 0; i < cap; i++ { + if i%2 == 0 { + name = "even" + } else { + name = "odd" + } + reactor.Post(name, i) + } + reactor.Post("test", cap) // this should not block + i := 0 + reactor.Flush() + close(ch) + for event := range ch { + fmt.Printf("%d: %v", i, event) + if i%2 == 0 { + name = "even" + } else { + name = "odd" + } + if val, ok := event.Resource.(int); ok { + if i != val || event.Name != name { + t.Error("Expected event %d to be of type %s and resource %d, got ", i, name, i, val) + } + } else { + t.Error("Unable to cast") + } + i++ + } + if i != cap { + t.Error("excpected exactly %d events, got ", i) + } + reactor.Stop() +} |