feat(cua): release 0.38.0+artemis.1 with verified shell observation
Upgrade the pinned driver, validate menu and taskbar focus ownership, patch untitled Shell resolution, and remove duplicate scroll scaling. Publish package provenance, verification boundaries and matching marketplace checksum. Go tests, vet, build and byte-level package verification passed.
This commit is contained in:
1 parent
dccddaa7e8
commit
b780a60e8d
20 files changed
+759
-149
No files matched your search
@@ -0,0 +1,96 @@
|
||||
package main
|
||||
|
||||
import "testing"
|
||||
|
||||
func shellFixtureWindow(pid, hwnd int64, class string) obj {
|
||||
return obj{"pid": pid, "window_id": hwnd, "class_name": class,
|
||||
"is_on_screen": true, "app_name": "explorer.exe", "title": ""}
|
||||
}
|
||||
|
||||
func TestUntitledShellDiscoveryKeepsAppAndPIDScope(t *testing.T) {
|
||||
native := []obj{shellFixtureWindow(1, 10, "Shell_TrayWnd"), shellFixtureWindow(2, 20, "NotifyIconOverflowWindow")}
|
||||
for _, query := range []obj{{"pid": 1}, {"app": "Explorer", "pid": 1}, {"app": "explorer.exe", "pid": 1}} {
|
||||
r := supplementShellWindows(obj{"structuredContent": obj{"windows": []any{}}}, query, native)
|
||||
windows := items(object(r["structuredContent"])["windows"])
|
||||
if len(windows) != 1 || num(object(windows[0])["window_id"]) != 10 {
|
||||
t.Fatal(r)
|
||||
}
|
||||
}
|
||||
r := supplementShellWindows(obj{"structuredContent": obj{"windows": []any{}}}, obj{"app": "Brave"}, native)
|
||||
if len(items(object(r["structuredContent"])["windows"])) != 0 {
|
||||
t.Fatal("widened app scope")
|
||||
}
|
||||
broken := obj{"isError": true}
|
||||
if supplementShellWindows(broken, obj{}, native)["isError"] != true {
|
||||
t.Fatal("observation error hidden")
|
||||
}
|
||||
}
|
||||
|
||||
func TestWinBObservationFollowsActualTaskbarFocus(t *testing.T) {
|
||||
args := obj{"pid": 1, "window_id": 10}
|
||||
requested := shellFixtureWindow(1, 10, "Progman")
|
||||
focus := obj{"probe_ok": true, "focus_root": shellFixtureWindow(1, 20, "Shell_TrayWnd"),
|
||||
"foreground_window": requested} // Foreground HWND alone would give the wrong answer.
|
||||
next, reason := postActionTarget(args, requested, focus, nil)
|
||||
if num(next["window_id"]) != 20 || reason != "associated_native_keyboard_focus" {
|
||||
t.Fatal(next, reason)
|
||||
}
|
||||
if num(args["window_id"]) != 10 {
|
||||
t.Fatal("requested target history mutated")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPostActionNeverCapturesUnrelatedApplicationOrAmbiguousMenu(t *testing.T) {
|
||||
args := obj{"pid": 1, "window_id": 10}
|
||||
requested := shellFixtureWindow(1, 10, "Progman")
|
||||
for _, other := range []obj{shellFixtureWindow(2, 20, "Shell_TrayWnd"), shellFixtureWindow(1, 20, "OtherApp")} {
|
||||
next, _ := postActionTarget(args, requested, obj{"probe_ok": true, "focus_root": other}, nil)
|
||||
if num(next["window_id"]) != 10 {
|
||||
t.Fatal("unrelated focus captured", next)
|
||||
}
|
||||
}
|
||||
menu := shellFixtureWindow(1, 30, "#32768")
|
||||
menu["owner_id"] = int64(10)
|
||||
menu2 := shellFixtureWindow(1, 40, "#32768")
|
||||
menu2["owner_id"] = int64(10)
|
||||
focus := obj{"probe_ok": true, "menu_active": true, "menu_owner": requested}
|
||||
next, reason := postActionTarget(args, requested, focus, []obj{menu, menu2})
|
||||
if num(next["window_id"]) != 10 || reason != "ambiguous_active_menu_observe_candidates_explicitly" {
|
||||
t.Fatal(next, reason)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOwnedNativeMenuAndOverflowHaveIndependentObservationTargets(t *testing.T) {
|
||||
args := obj{"pid": 1, "window_id": 10}
|
||||
owner := shellFixtureWindow(1, 10, "Shell_TrayWnd")
|
||||
menu := shellFixtureWindow(1, 30, "#32768")
|
||||
menu["owner_id"] = int64(10)
|
||||
focus := obj{"probe_ok": true, "menu_active": true, "menu_owner": owner}
|
||||
next, _ := postActionTarget(args, owner, focus, []obj{menu})
|
||||
if num(next["window_id"]) != 30 {
|
||||
t.Fatal(next)
|
||||
}
|
||||
next, _ = postActionTarget(args, owner, obj{"probe_ok": true,
|
||||
"focus_root": shellFixtureWindow(1, 40, "TopLevelWindowForOverflowXamlIsland")}, nil)
|
||||
if num(next["window_id"]) != 40 {
|
||||
t.Fatal(next)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNativeMenuWithoutGWOwnerRequiresVerifiedMenuOwnerAndThread(t *testing.T) {
|
||||
args := obj{"pid": 1, "window_id": 10}
|
||||
owner := shellFixtureWindow(1, 10, "ordinary-form")
|
||||
owner["thread_id"] = int64(7)
|
||||
menu := shellFixtureWindow(1, 30, "#32768")
|
||||
menu["owner_id"], menu["thread_id"] = int64(0), int64(7)
|
||||
focus := obj{"probe_ok": true, "menu_active": true, "menu_owner": owner}
|
||||
next, _ := postActionTarget(args, owner, focus, []obj{menu})
|
||||
if num(next["window_id"]) != 30 {
|
||||
t.Fatal(next)
|
||||
}
|
||||
menu["thread_id"] = int64(8)
|
||||
next, _ = postActionTarget(args, owner, focus, []obj{menu})
|
||||
if num(next["window_id"]) != 10 {
|
||||
t.Fatal("unrelated menu followed", next)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user