49 lines
3.1 KiB
Go
49 lines
3.1 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// Authors: Storm Dragon, Angus Kola
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package atspi
|
|
|
|
import (
|
|
"image"
|
|
"math"
|
|
"testing"
|
|
|
|
"git.stormux.org/storm/cthulhu/internal/platform/xorg"
|
|
)
|
|
|
|
func TestOCRProviderCoordinateConversion(t *testing.T) {
|
|
for _, test := range []struct {
|
|
name string
|
|
window, object Rectangle
|
|
client xorg.Foreground
|
|
want image.Rectangle
|
|
fail bool
|
|
}{
|
|
{name: "physical", window: Rectangle{40, 30, 300, 200}, object: Rectangle{50, 45, 80, 50}, client: xorg.Foreground{Known: true, Window: 1, X: 40, Y: 30, Width: 300, Height: 200}, want: image.Rect(50, 45, 130, 95)},
|
|
{name: "scaled provider", window: Rectangle{40, 30, 150, 100}, object: Rectangle{45, 35, 40, 25}, client: xorg.Foreground{Known: true, Window: 1, X: 40, Y: 30, Width: 300, Height: 200}, want: image.Rect(50, 40, 130, 90)},
|
|
{name: "round outward", window: Rectangle{40, 30, 200, 100}, object: Rectangle{41, 31, 1, 1}, client: xorg.Foreground{Known: true, Window: 1, X: 40, Y: 30, Width: 301, Height: 151}, want: image.Rect(41, 31, 44, 34)},
|
|
{name: "negative clip", window: Rectangle{-200, -100, 300, 200}, object: Rectangle{-220, -110, 50, 40}, client: xorg.Foreground{Known: true, Window: 1, X: -200, Y: -100, Width: 300, Height: 200}, want: image.Rect(-200, -100, -170, -70)},
|
|
{name: "decorations", window: Rectangle{40, 30, 300, 220}, object: Rectangle{50, 55, 80, 50}, client: xorg.Foreground{Known: true, Window: 1, X: 40, Y: 50, Width: 300, Height: 200, OuterX: 40, OuterY: 30, OuterWidth: 300, OuterHeight: 220}, want: image.Rect(50, 55, 130, 105)},
|
|
{name: "large window small object", window: Rectangle{0, 0, 7680, 4320}, object: Rectangle{20, 20, 40, 30}, client: xorg.Foreground{Known: true, Window: 1, Width: 7680, Height: 4320}, want: image.Rect(20, 20, 60, 50)},
|
|
{name: "unknown origin", window: Rectangle{math.MinInt32, 0, 300, 200}, object: Rectangle{0, 0, 10, 10}, fail: true},
|
|
{name: "disjoint", window: Rectangle{40, 30, 300, 200}, object: Rectangle{400, 0, 10, 10}, client: xorg.Foreground{Known: true, Window: 1, X: 40, Y: 30, Width: 300, Height: 200}, fail: true},
|
|
{name: "nonuniform scale", window: Rectangle{40, 30, 300, 200}, object: Rectangle{50, 45, 80, 50}, client: xorg.Foreground{Known: true, Window: 1, X: 40, Y: 30, Width: 600, Height: 200}, fail: true},
|
|
{name: "scaled root origin", window: Rectangle{20, 15, 150, 100}, object: Rectangle{25, 20, 40, 25}, client: xorg.Foreground{Known: true, Window: 1, X: 40, Y: 30, Width: 300, Height: 200}, want: image.Rect(50, 40, 130, 90)},
|
|
{name: "ambiguous decoration scale", window: Rectangle{0, 0, 100, 100}, object: Rectangle{0, 0, 20, 20}, client: xorg.Foreground{Known: true, Window: 1, Width: 200, Height: 200, OuterWidth: 202, OuterHeight: 202}, fail: true},
|
|
} {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
got, err := ocr_screen_bounds(test.object, test.window, test.client)
|
|
if test.fail {
|
|
if err == nil {
|
|
t.Fatalf("accepted ambiguous bounds: %v", got)
|
|
}
|
|
return
|
|
}
|
|
if err != nil || got != test.want {
|
|
t.Fatalf("got %v %v, want %v", got, err, test.want)
|
|
}
|
|
})
|
|
}
|
|
}
|