Files

71 lines
2.6 KiB
Go

// Copyright (c) 2026 Storm Dragon
// Authors: Storm Dragon, Angus Kola
// SPDX-License-Identifier: GPL-3.0-or-later
package xorg
import "testing"
func TestSteamFocusRepairActivation(t *testing.T) {
repair := steamFocusRepair{}
inner := steamFocusSample{known: true, steam: true, window: 10, focus: 12, pid: 123, innerFocus: true}
if target := repair.observe(inner); target != 0 {
t.Fatal("valid browser focus requested a repair")
}
repair.observe(steamFocusSample{known: true, window: 20, focus: 20})
outer := inner
outer.focus, outer.innerFocus = 10, false
if target := repair.observe(outer); target != 0 {
t.Fatal("repair did not allow Steam its first restoration sample")
}
if target := repair.observe(outer); target != 12 {
t.Fatalf("repair target = %d, want remembered browser child 12", target)
}
}
func TestSteamFocusRepairPreservesControlAndWindowBoundaries(t *testing.T) {
for _, test := range []struct {
name string
sample steamFocusSample
}{
{"other application", steamFocusSample{known: true, window: 20, focus: 20}},
{"other Steam window", steamFocusSample{known: true, steam: true, window: 30, focus: 30, pid: 123}},
{"reused window with different process", steamFocusSample{known: true, steam: true, window: 10, focus: 10, pid: 456}},
{"already focused browser popup", steamFocusSample{known: true, steam: true, window: 10, focus: 14, pid: 123, innerFocus: true}},
{"external keyboard focus", steamFocusSample{known: true, steam: true, window: 10, focus: 99, pid: 123}},
{"unknown foreground", steamFocusSample{}},
} {
t.Run(test.name, func(t *testing.T) {
repair := steamFocusRepair{}
repair.observe(steamFocusSample{known: true, steam: true, window: 10, focus: 12, pid: 123, innerFocus: true})
repair.observe(steamFocusSample{known: true, window: 20})
for i := 0; i < 12; i++ {
if target := repair.observe(test.sample); target != 0 {
t.Fatalf("unexpected focus repair to %d", target)
}
}
})
}
}
func TestSteamFocusRepairRemembersPopupAndExpires(t *testing.T) {
repair := steamFocusRepair{}
inner := steamFocusSample{known: true, steam: true, window: 10, focus: 12, pid: 123, innerFocus: true}
repair.observe(inner)
inner.focus = 14
repair.observe(inner)
repair.observe(steamFocusSample{known: true, window: 20})
outer := inner
outer.focus, outer.innerFocus = 10, false
repair.observe(outer)
if target := repair.observe(outer); target != 14 {
t.Fatalf("target = %d, want most recently focused popup 14", target)
}
for i := 0; i < 10; i++ {
repair.observe(inner)
}
if target := repair.observe(outer); target != 0 {
t.Fatalf("repair remained armed after activation window expired: %d", target)
}
}