From eae0bfe795890d72c046b2149c01cec1eef13105 Mon Sep 17 00:00:00 2001 From: ArchSav <96357545+ArchSav@users.noreply.github.com> Date: Wed, 6 May 2026 19:28:07 +1000 Subject: [PATCH] hyprtester/master: tests for master:focus_master_on_close --- hyprtester/src/tests/main/master.cpp | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/hyprtester/src/tests/main/master.cpp b/hyprtester/src/tests/main/master.cpp index 806cbdf70..bf7554e5f 100644 --- a/hyprtester/src/tests/main/master.cpp +++ b/hyprtester/src/tests/main/master.cpp @@ -2,6 +2,8 @@ #include "../../shared.hpp" #include "../../hyprctlCompat.hpp" #include +#include +#include #include "tests.hpp" TEST_CASE(focusMasterPrevious) { @@ -210,3 +212,34 @@ TEST_CASE(rollFocus) { } } } + +TEST_CASE(focusMasterClose) { + //Test behaviour of master:focus_master_on_close + OK(getFromSocket("r/eval hl.config({ general = { layout = 'master' }, master = { focus_master_on_close = true } })")); + + std::vector pids; + for (auto const& win : {"slave1", "slave2", "slave3", "master"}) { + auto p = Tests::spawnKitty(win); + if (!p) + FAIL_TEST("Could not spawn kitty with win class `{}`", win); + pids.push_back(p->pid()); + } + + OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:slave1' })")); + OK(getFromSocket("/dispatch hl.dsp.window.close({ window = 'class:slave1' })")); + while (Tests::processAlive(pids[0])) + std::this_thread::sleep_for(std::chrono::milliseconds(25l)); + ASSERT_CONTAINS(getFromSocket("/activewindow"), "class: master"); + + OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:slave2' })")); + OK(getFromSocket("/dispatch hl.dsp.window.close({ window = 'class:slave2' })")); + while (Tests::processAlive(pids[1])) + std::this_thread::sleep_for(std::chrono::milliseconds(25l)); + ASSERT_CONTAINS(getFromSocket("/activewindow"), "class: master"); + + OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:slave3' })")); + OK(getFromSocket("/dispatch hl.dsp.window.close({ window = 'class:slave3' })")); + while (Tests::processAlive(pids[2])) + std::this_thread::sleep_for(std::chrono::milliseconds(25l)); + ASSERT_CONTAINS(getFromSocket("/activewindow"), "class: master"); +}