GetWindowTitle was returning info.Name (the window's identifier) instead of the actual title. Added Title() to the PlatformWindow interface and Title field to WindowInfo so the real title flows through queries. Added wsRequire() helper and input validation for all webview:* WS message cases — window name is required for every webview action, and selectors/URLs are validated where they'd cause errors if empty. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
78 lines
3.1 KiB
Go
78 lines
3.1 KiB
Go
// pkg/window/mock_test.go
|
|
package window
|
|
|
|
type mockPlatform struct {
|
|
windows []*mockWindow
|
|
}
|
|
|
|
func newMockPlatform() *mockPlatform {
|
|
return &mockPlatform{}
|
|
}
|
|
|
|
func (m *mockPlatform) CreateWindow(opts PlatformWindowOptions) PlatformWindow {
|
|
w := &mockWindow{
|
|
name: opts.Name, title: opts.Title, url: opts.URL,
|
|
width: opts.Width, height: opts.Height,
|
|
x: opts.X, y: opts.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
|
|
closed bool
|
|
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) {}
|
|
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) 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)
|
|
}
|
|
|
|
// emit fires a test event to all registered handlers.
|
|
func (w *mockWindow) emit(e WindowEvent) {
|
|
for _, h := range w.eventHandlers {
|
|
h(e)
|
|
}
|
|
}
|
|
|
|
// emitFileDrop simulates a file drop on the window.
|
|
func (w *mockWindow) emitFileDrop(paths []string, targetID string) {
|
|
for _, h := range w.fileDropHandlers {
|
|
h(paths, targetID)
|
|
}
|
|
}
|