// 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) } }