Stubs (15 files, 479 exports): - All managers: Dialog, Event, Browser, Clipboard, ContextMenu, Environment, Screen, KeyBinding - Window interface (~50 methods), BrowserWindow, platform options (iOS/Android) - MenuItem (42 roles), WebviewWindowOptions (full platform types) - Wails v3 submodule pinned at alpha 74 New events package (17th package): - Custom event system bridged to Core IPC - TaskEmit, TaskOn, TaskOff, QueryListeners, ActionEventFired Feature expansions: - Window: zoom, content (SetURL/SetHTML/ExecJS), bounds, print, flash - Screen: QueryCurrent, ScreenPlacement, Rect geometry - Dialog: typed tasks, file options, Info/Question/Warning/Error - Keybinding: TaskProcess, ErrorNotRegistered - Notification: RevokePermission, RegisterCategory, action broadcasts - Dock: SetProgressBar, Bounce/StopBounce - Environment: HasFocusFollowsMouse - ContextMenu: QueryGetAll, TaskUpdate, TaskDestroy Display bridge: 5 new event types wired to WebSocket MCP: 4 event tools (emit, on, off, list) 17 packages build and test clean (1 flaky test ordering issue in window). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
93 lines
4.1 KiB
Go
93 lines
4.1 KiB
Go
package window
|
|
|
|
// MockPlatform is an exported mock for cross-package integration tests.
|
|
// For internal tests, use the unexported mockPlatform in mock_test.go.
|
|
type MockPlatform struct {
|
|
Windows []*MockWindow
|
|
}
|
|
|
|
func NewMockPlatform() *MockPlatform {
|
|
return &MockPlatform{}
|
|
}
|
|
|
|
func (m *MockPlatform) CreateWindow(options PlatformWindowOptions) PlatformWindow {
|
|
w := &MockWindow{
|
|
name: options.Name, title: options.Title, url: options.URL,
|
|
width: options.Width, height: options.Height,
|
|
x: options.X, y: options.Y,
|
|
}
|
|
m.Windows = append(m.Windows, w)
|
|
return w
|
|
}
|
|
|
|
func (m *MockPlatform) GetWindows() []PlatformWindow {
|
|
out := make([]PlatformWindow, len(m.Windows))
|
|
for i, w := range m.Windows {
|
|
out[i] = w
|
|
}
|
|
return out
|
|
}
|
|
|
|
type MockWindow struct {
|
|
name, title, url string
|
|
width, height, x, y int
|
|
maximised, focused bool
|
|
visible, alwaysOnTop bool
|
|
backgroundColour [4]uint8
|
|
closed bool
|
|
zoom float64
|
|
html string
|
|
lastJS string
|
|
flashing bool
|
|
printCalled bool
|
|
toggleFullscreenCount int
|
|
eventHandlers []func(WindowEvent)
|
|
fileDropHandlers []func(paths []string, targetID string)
|
|
}
|
|
|
|
func (w *MockWindow) Name() string { return w.name }
|
|
func (w *MockWindow) Title() string { return w.title }
|
|
func (w *MockWindow) Position() (int, int) { return w.x, w.y }
|
|
func (w *MockWindow) Size() (int, int) { return w.width, w.height }
|
|
func (w *MockWindow) IsMaximised() bool { return w.maximised }
|
|
func (w *MockWindow) IsFocused() bool { return w.focused }
|
|
func (w *MockWindow) SetTitle(title string) { w.title = title }
|
|
func (w *MockWindow) SetPosition(x, y int) { w.x = x; w.y = y }
|
|
func (w *MockWindow) SetSize(width, height int) { w.width = width; w.height = height }
|
|
func (w *MockWindow) SetBackgroundColour(r, g, b, a uint8) { w.backgroundColour = [4]uint8{r, g, b, a} }
|
|
func (w *MockWindow) SetVisibility(visible bool) { w.visible = visible }
|
|
func (w *MockWindow) SetAlwaysOnTop(alwaysOnTop bool) { w.alwaysOnTop = alwaysOnTop }
|
|
func (w *MockWindow) Maximise() { w.maximised = true }
|
|
func (w *MockWindow) Restore() { w.maximised = false }
|
|
func (w *MockWindow) Minimise() {}
|
|
func (w *MockWindow) Focus() { w.focused = true }
|
|
func (w *MockWindow) Close() { w.closed = true }
|
|
func (w *MockWindow) Show() { w.visible = true }
|
|
func (w *MockWindow) Hide() { w.visible = false }
|
|
func (w *MockWindow) Fullscreen() {}
|
|
func (w *MockWindow) UnFullscreen() {}
|
|
func (w *MockWindow) GetZoom() float64 { return w.zoom }
|
|
func (w *MockWindow) SetZoom(factor float64) { w.zoom = factor }
|
|
func (w *MockWindow) ZoomIn() { w.zoom += 0.1 }
|
|
func (w *MockWindow) ZoomOut() { w.zoom -= 0.1 }
|
|
func (w *MockWindow) SetURL(url string) { w.url = url }
|
|
func (w *MockWindow) SetHTML(html string) { w.html = html }
|
|
func (w *MockWindow) ExecJS(js string) { w.lastJS = js }
|
|
func (w *MockWindow) GetBounds() Bounds {
|
|
return Bounds{X: w.x, Y: w.y, Width: w.width, Height: w.height}
|
|
}
|
|
func (w *MockWindow) SetBounds(bounds Bounds) {
|
|
w.x = bounds.X
|
|
w.y = bounds.Y
|
|
w.width = bounds.Width
|
|
w.height = bounds.Height
|
|
}
|
|
func (w *MockWindow) ToggleFullscreen() { w.toggleFullscreenCount++ }
|
|
func (w *MockWindow) Print() error { w.printCalled = true; return nil }
|
|
func (w *MockWindow) Flash(enabled bool) { w.flashing = enabled }
|
|
func (w *MockWindow) OnWindowEvent(handler func(WindowEvent)) {
|
|
w.eventHandlers = append(w.eventHandlers, handler)
|
|
}
|
|
func (w *MockWindow) OnFileDrop(handler func(paths []string, targetID string)) {
|
|
w.fileDropHandlers = append(w.fileDropHandlers, handler)
|
|
}
|