Harden display query failures
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run

This commit is contained in:
Snider 2026-04-17 18:42:21 +01:00
parent 2c1cc5af33
commit 2d2f965bbe
2 changed files with 76 additions and 4 deletions

View file

@ -83,6 +83,10 @@ func unexpectedResultType(method string) error {
return coreerr.E(method, "unexpected result type", nil)
}
func failedQuery(method, query string) error {
return coreerr.E(method, query+" query failed", nil)
}
func (s *Service) GetScreens() []*Screen {
r := s.Core().QUERY(screen.QueryAll{})
if !r.OK {
@ -105,7 +109,7 @@ func (s *Service) GetScreen(id string) (*Screen, error) {
if err, ok := r.Value.(error); ok {
return nil, err
}
return nil, nil
return nil, failedQuery("display.GetScreen", "screen.queryByID")
}
scr, ok := r.Value.(*screen.Screen)
if !ok {
@ -120,7 +124,7 @@ func (s *Service) GetPrimaryScreen() (*Screen, error) {
if err, ok := r.Value.(error); ok {
return nil, err
}
return nil, nil
return nil, failedQuery("display.GetPrimaryScreen", "screen.queryPrimary")
}
scr, ok := r.Value.(*screen.Screen)
if !ok {
@ -135,7 +139,7 @@ func (s *Service) GetScreenAtPoint(x, y int) (*Screen, error) {
if err, ok := r.Value.(error); ok {
return nil, err
}
return nil, nil
return nil, failedQuery("display.GetScreenAtPoint", "screen.queryAtPoint")
}
scr, ok := r.Value.(*screen.Screen)
if !ok {
@ -390,7 +394,7 @@ func (s *Service) ReadClipboardImage() ([]byte, error) {
if err, ok := r.Value.(error); ok {
return nil, err
}
return nil, nil
return nil, failedQuery("display.ReadClipboardImage", "clipboard.queryImage")
}
content, ok := r.Value.(clipboard.ImageContent)
if !ok {

View file

@ -198,6 +198,57 @@ func TestDisplayAPI_GetScreen_BadType(t *testing.T) {
assert.Nil(t, got)
}
func TestDisplayAPI_GetScreen_Ugly(t *testing.T) {
svc, c := newTestDisplayAPIService(t)
c.RegisterQuery(func(_ *core.Core, q core.Query) core.Result {
switch q.(type) {
case screen.QueryByID:
return core.Result{OK: false}
default:
return core.Result{}
}
})
got, err := svc.GetScreen("screen-1")
require.Error(t, err)
assert.Nil(t, got)
}
func TestDisplayAPI_GetPrimaryScreen_Ugly(t *testing.T) {
svc, c := newTestDisplayAPIService(t)
c.RegisterQuery(func(_ *core.Core, q core.Query) core.Result {
switch q.(type) {
case screen.QueryPrimary:
return core.Result{OK: false}
default:
return core.Result{}
}
})
got, err := svc.GetPrimaryScreen()
require.Error(t, err)
assert.Nil(t, got)
}
func TestDisplayAPI_GetScreenAtPoint_Ugly(t *testing.T) {
svc, c := newTestDisplayAPIService(t)
c.RegisterQuery(func(_ *core.Core, q core.Query) core.Result {
switch q.(type) {
case screen.QueryAtPoint:
return core.Result{OK: false}
default:
return core.Result{}
}
})
got, err := svc.GetScreenAtPoint(10, 20)
require.Error(t, err)
assert.Nil(t, got)
}
func TestDisplayAPI_OpenFileDialog_Good(t *testing.T) {
svc, c := newTestDisplayAPIService(t)
c.Action("dialog.openFile", func(_ context.Context, opts core.Options) core.Result {
@ -497,6 +548,23 @@ func TestDisplayAPI_ReadClipboardImage_Ugly(t *testing.T) {
assert.Nil(t, got)
}
func TestDisplayAPI_ReadClipboardImage_Ugly_BackendFailure(t *testing.T) {
svc, c := newTestDisplayAPIService(t)
c.RegisterQuery(func(_ *core.Core, q core.Query) core.Result {
switch q.(type) {
case clipboard.QueryImage:
return core.Result{OK: false}
default:
return core.Result{}
}
})
got, err := svc.ReadClipboardImage()
require.Error(t, err)
assert.Nil(t, got)
}
func TestDisplayAPI_WriteClipboardImage_Good(t *testing.T) {
svc, c := newTestDisplayAPIService(t)
var got []byte