Some checks failed
Security Scan / security (push) Failing after 26s
Window package: - 15 new PlatformWindow methods (zoom, content, bounds, states, print, flash) - 16 new IPC types (tasks + queries for all new capabilities) - ZoomIn/ZoomOut step 0.1, clamped to minimum 0.1 - SetURL, SetHTML, ExecJS for webview content control - 36 new tests with Good/Bad/Ugly coverage Events package (NEW — 17th package): - Custom event system bridged to Core IPC - Emit, On, Off, OnMultiple, Reset via Platform interface - ActionEventFired broadcast for agent consumption - 17 tests All 17 packages build and test clean. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
112 lines
4.7 KiB
Go
112 lines
4.7 KiB
Go
package window
|
|
|
|
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
|
|
minimised bool
|
|
fullscreened bool
|
|
zoom float64
|
|
html string
|
|
contentProtection bool
|
|
flashed bool
|
|
execJSCalls []string
|
|
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) IsVisible() bool { return w.visible }
|
|
func (w *mockWindow) IsFullscreen() bool { return w.fullscreened }
|
|
func (w *mockWindow) IsMinimised() bool { return w.minimised }
|
|
func (w *mockWindow) GetBounds() (int, int, int, int) { return w.x, w.y, w.width, w.height }
|
|
func (w *mockWindow) GetZoom() float64 {
|
|
if w.zoom == 0 {
|
|
return 1.0
|
|
}
|
|
return w.zoom
|
|
}
|
|
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) SetBounds(x, y, width, height int) {
|
|
w.x = x
|
|
w.y = y
|
|
w.width = width
|
|
w.height = height
|
|
}
|
|
func (w *mockWindow) SetURL(url string) { w.url = url }
|
|
func (w *mockWindow) SetHTML(html string) { w.html = html }
|
|
func (w *mockWindow) SetZoom(magnification float64) { w.zoom = magnification }
|
|
func (w *mockWindow) SetContentProtection(protection bool) { w.contentProtection = protection }
|
|
func (w *mockWindow) Maximise() { w.maximised = true }
|
|
func (w *mockWindow) Restore() { w.maximised = false }
|
|
func (w *mockWindow) Minimise() { w.minimised = true }
|
|
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() { w.fullscreened = true }
|
|
func (w *mockWindow) UnFullscreen() { w.fullscreened = false }
|
|
func (w *mockWindow) ToggleFullscreen() { w.fullscreened = !w.fullscreened }
|
|
func (w *mockWindow) ToggleMaximise() { w.maximised = !w.maximised }
|
|
func (w *mockWindow) ExecJS(js string) { w.execJSCalls = append(w.execJSCalls, js) }
|
|
func (w *mockWindow) Flash(enabled bool) { w.flashed = enabled }
|
|
func (w *mockWindow) Print() error { return nil }
|
|
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)
|
|
}
|
|
}
|