Files

136 lines
2.7 KiB
Go
Raw Permalink Normal View History

2023-02-06 20:50:11 +11:00
package application_test
import (
"sync"
"testing"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/matryer/is"
)
type mockNotifier struct {
2023-04-11 03:28:06 -05:00
Events []*application.WailsEvent
2023-02-06 20:50:11 +11:00
}
2023-04-11 03:28:06 -05:00
func (m *mockNotifier) dispatchEventToWindows(event *application.WailsEvent) {
2023-02-06 20:50:11 +11:00
m.Events = append(m.Events, event)
}
func (m *mockNotifier) Reset() {
2023-04-11 03:28:06 -05:00
m.Events = []*application.WailsEvent{}
2023-02-06 20:50:11 +11:00
}
func Test_EventsOn(t *testing.T) {
i := is.New(t)
notifier := &mockNotifier{}
2023-04-11 03:28:06 -05:00
eventProcessor := application.NewWailsEventProcessor(notifier.dispatchEventToWindows)
2023-02-06 20:50:11 +11:00
// Test On
eventName := "test"
counter := 0
var wg sync.WaitGroup
wg.Add(1)
2023-04-11 03:28:06 -05:00
unregisterFn := eventProcessor.On(eventName, func(event *application.WailsEvent) {
2023-02-06 20:50:11 +11:00
// This is called in a goroutine
counter++
wg.Done()
})
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
wg.Wait()
i.Equal(1, counter)
// Unregister
notifier.Reset()
unregisterFn()
counter = 0
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
i.Equal(0, counter)
}
func Test_EventsOnce(t *testing.T) {
i := is.New(t)
notifier := &mockNotifier{}
2023-04-11 03:28:06 -05:00
eventProcessor := application.NewWailsEventProcessor(notifier.dispatchEventToWindows)
2023-02-06 20:50:11 +11:00
// Test On
eventName := "test"
counter := 0
var wg sync.WaitGroup
wg.Add(1)
2023-04-11 03:28:06 -05:00
unregisterFn := eventProcessor.Once(eventName, func(event *application.WailsEvent) {
2023-02-06 20:50:11 +11:00
// This is called in a goroutine
counter++
wg.Done()
})
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
wg.Wait()
i.Equal(1, counter)
// Unregister
notifier.Reset()
unregisterFn()
counter = 0
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
i.Equal(0, counter)
}
func Test_EventsOnMultiple(t *testing.T) {
i := is.New(t)
notifier := &mockNotifier{}
2023-04-11 03:28:06 -05:00
eventProcessor := application.NewWailsEventProcessor(notifier.dispatchEventToWindows)
2023-02-06 20:50:11 +11:00
// Test On
eventName := "test"
counter := 0
var wg sync.WaitGroup
wg.Add(2)
2023-04-11 03:28:06 -05:00
unregisterFn := eventProcessor.OnMultiple(eventName, func(event *application.WailsEvent) {
2023-02-06 20:50:11 +11:00
// This is called in a goroutine
counter++
wg.Done()
}, 2)
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
wg.Wait()
i.Equal(2, counter)
// Unregister
notifier.Reset()
unregisterFn()
counter = 0
2023-04-11 03:28:06 -05:00
eventProcessor.Emit(&application.WailsEvent{
2023-02-06 20:50:11 +11:00
Name: "test",
Data: "test payload",
})
i.Equal(0, counter)
}