GUI packages, examples, and documentation for building desktop applications with Go and web technologies. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
174 lines
4.8 KiB
Go
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)
|
|
}
|