You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package testutils
import ( "fmt" lucifer3 "git.aiterp.net/lucifer3/server" "log" "math/rand" "sync/atomic" "testing" )
type syncEvent struct { id uint64 }
func (s syncEvent) EventDescription() string { return fmt.Sprintf("syncEvent(%d)", s.id) }
type TestEventLogger struct { entries []any syncN uint64 syncCh chan struct{} }
func (l *TestEventLogger) Active() bool { return true }
func (l *TestEventLogger) Sync(bus *lucifer3.EventBus) { l.syncCh = make(chan struct{}) v := rand.Int63() atomic.StoreUint64(&l.syncN, uint64(v))
bus.RunEvent(syncEvent{id: uint64(v)})
<-l.syncCh }
func (l *TestEventLogger) AssertEvent(t *testing.T, eventStr string) { for i, entry := range l.entries { if event, ok := entry.(lucifer3.Event); ok && eventStr == event.EventDescription() { l.entries = l.entries[i+1:] return } }
t.Errorf("Event not found: %s", eventStr) }
func (l *TestEventLogger) AssertCommand(t *testing.T, commandStr string) { for i, entry := range l.entries { if cmd, ok := entry.(lucifer3.Command); ok { log.Println(cmd.CommandDescription() == commandStr) } if command, ok := entry.(lucifer3.Command); ok && commandStr == command.CommandDescription() { l.entries = l.entries[i+1:] return } }
t.Errorf("Command not found: %s", commandStr) }
func (l *TestEventLogger) HandleEvent(_ *lucifer3.EventBus, event lucifer3.Event) { if ev, ok := event.(syncEvent); ok { if atomic.CompareAndSwapUint64(&l.syncN, ev.id, 0) { close(l.syncCh) } }
l.entries = append(l.entries, event) }
func (l *TestEventLogger) HandleCommand(_ *lucifer3.EventBus, command lucifer3.Command) { l.entries = append(l.entries, command) }
func evStr(ev any) string { if ev, ok := ev.(lucifer3.Event); ok { return ev.EventDescription() } else if ev, ok := ev.(lucifer3.Command); ok { return ev.CommandDescription() }
panic("Unknown type") }
|