gui/pkg/display/mocks_test.go
Snider 032c426ac3 feat: initial Wails v3 desktop framework
GUI packages, examples, and documentation for building
desktop applications with Go and web technologies.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 08:44:23 +00:00

174 lines
4.8 KiB
Go

package display
import (
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/events"
)
// mockApp is a mock implementation of the App interface for testing.
type mockApp struct {
windowManager *mockWindowManager
menuManager *mockMenuManager
dialogManager *mockDialogManager
systemTrayMgr *mockSystemTrayManager
envManager *mockEnvManager
eventManager *mockEventManager
logger *mockLogger
quitCalled bool
}
func newMockApp() *mockApp {
return &mockApp{
windowManager: newMockWindowManager(),
menuManager: newMockMenuManager(),
dialogManager: newMockDialogManager(),
systemTrayMgr: newMockSystemTrayManager(),
envManager: newMockEnvManager(),
eventManager: newMockEventManager(),
logger: &mockLogger{},
}
}
func (m *mockApp) Window() WindowManager { return m.windowManager }
func (m *mockApp) Menu() MenuManager { return m.menuManager }
func (m *mockApp) Dialog() DialogManager { return m.dialogManager }
func (m *mockApp) SystemTray() SystemTrayManager { return m.systemTrayMgr }
func (m *mockApp) Env() EnvManager { return m.envManager }
func (m *mockApp) Event() EventManager { return m.eventManager }
func (m *mockApp) Logger() Logger { return m.logger }
func (m *mockApp) Quit() { m.quitCalled = true }
// mockWindowManager tracks window creation calls.
type mockWindowManager struct {
createdWindows []application.WebviewWindowOptions
allWindows []application.Window
}
func newMockWindowManager() *mockWindowManager {
return &mockWindowManager{
createdWindows: make([]application.WebviewWindowOptions, 0),
allWindows: make([]application.Window, 0),
}
}
func (m *mockWindowManager) NewWithOptions(opts application.WebviewWindowOptions) *application.WebviewWindow {
m.createdWindows = append(m.createdWindows, opts)
// Return nil since we can't create a real window without Wails runtime
return nil
}
func (m *mockWindowManager) GetAll() []application.Window {
return m.allWindows
}
// mockMenuManager tracks menu creation calls.
type mockMenuManager struct {
menusCreated int
menuSet *application.Menu
}
func newMockMenuManager() *mockMenuManager {
return &mockMenuManager{}
}
func (m *mockMenuManager) New() *application.Menu {
m.menusCreated++
return nil // Can't create real menu without Wails runtime
}
func (m *mockMenuManager) Set(menu *application.Menu) {
m.menuSet = menu
}
// mockDialogManager tracks dialog creation calls.
type mockDialogManager struct {
infoDialogsCreated int
warningDialogsCreated int
}
func newMockDialogManager() *mockDialogManager {
return &mockDialogManager{}
}
func (m *mockDialogManager) Info() *application.MessageDialog {
m.infoDialogsCreated++
return nil // Can't create real dialog without Wails runtime
}
func (m *mockDialogManager) Warning() *application.MessageDialog {
m.warningDialogsCreated++
return nil // Can't create real dialog without Wails runtime
}
func (m *mockDialogManager) OpenFile() *application.OpenFileDialogStruct {
return nil // Can't create real dialog without Wails runtime
}
// mockSystemTrayManager tracks system tray creation calls.
type mockSystemTrayManager struct {
traysCreated int
}
func newMockSystemTrayManager() *mockSystemTrayManager {
return &mockSystemTrayManager{}
}
func (m *mockSystemTrayManager) New() *application.SystemTray {
m.traysCreated++
return nil // Can't create real system tray without Wails runtime
}
// mockEnvManager provides mock environment info.
type mockEnvManager struct {
envInfo application.EnvironmentInfo
darkMode bool
}
func newMockEnvManager() *mockEnvManager {
return &mockEnvManager{
envInfo: application.EnvironmentInfo{
OS: "test-os",
Arch: "test-arch",
Debug: true,
PlatformInfo: map[string]any{"test": "value"},
},
darkMode: false,
}
}
func (m *mockEnvManager) Info() application.EnvironmentInfo {
return m.envInfo
}
func (m *mockEnvManager) IsDarkMode() bool {
return m.darkMode
}
// mockEventManager tracks event registration.
type mockEventManager struct {
registeredEvents []events.ApplicationEventType
}
func newMockEventManager() *mockEventManager {
return &mockEventManager{
registeredEvents: make([]events.ApplicationEventType, 0),
}
}
func (m *mockEventManager) OnApplicationEvent(eventType events.ApplicationEventType, handler func(*application.ApplicationEvent)) func() {
m.registeredEvents = append(m.registeredEvents, eventType)
return func() {} // Return a no-op unsubscribe function
}
func (m *mockEventManager) Emit(name string, data ...any) bool {
return true // Pretend emission succeeded
}
// mockLogger tracks log calls.
type mockLogger struct {
infoMessages []string
}
func (m *mockLogger) Info(message string, args ...any) {
m.infoMessages = append(m.infoMessages, message)
}