summaryrefslogtreecommitdiff
path: root/hyprtester/src/tests/main/window.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2025-11-17 18:34:02 +0000
committerGitHub <noreply@github.com>2025-11-17 18:34:02 +0000
commitc2670e9ab90bd657e87a1da2c5322e9007dce01f (patch)
treecd033fe3a9b87b1b0d457df043ecc50929ad3c8d /hyprtester/src/tests/main/window.cpp
parent95ee08b3403b90e2930d46425cada1d280f3524e (diff)
windowrules: rewrite completely (#12269)
Reworks the window rule syntax completely --------- Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
Diffstat (limited to 'hyprtester/src/tests/main/window.cpp')
-rw-r--r--hyprtester/src/tests/main/window.cpp137
1 files changed, 119 insertions, 18 deletions
diff --git a/hyprtester/src/tests/main/window.cpp b/hyprtester/src/tests/main/window.cpp
index 6cfa061c..2cf42eef 100644
--- a/hyprtester/src/tests/main/window.cpp
+++ b/hyprtester/src/tests/main/window.cpp
@@ -246,12 +246,15 @@ static bool test() {
testSwapWindow();
+ getFromSocket("/dispatch workspace 1");
+
NLog::log("{}Testing minsize/maxsize rules for tiled windows", Colors::YELLOW);
{
// Enable the config for testing, test max/minsize for tiled windows and centering
OK(getFromSocket("/keyword misc:size_limits_tiled 1"));
- OK(getFromSocket("/keyword windowrule maxsize 1500 500, class:kitty_maxsize"));
- OK(getFromSocket("/keyword windowrule minsize 1200 500, class:kitty_maxsize"));
+ OK(getFromSocket("/keyword windowrule[kitty-max-rule]:match:class kitty_maxsize"));
+ OK(getFromSocket("/keyword windowrule[kitty-max-rule]:max_size 1500 500"));
+ OK(getFromSocket("r/keyword windowrule[kitty-max-rule]:min_size 1200 500"));
if (!spawnKitty("kitty_maxsize"))
return false;
@@ -297,29 +300,127 @@ static bool test() {
EXPECT_CONTAINS(str, "floating: 1");
EXPECT_CONTAINS(str, std::format("size: {},{}", SIZE, SIZE));
EXPECT_NOT_CONTAINS(str, "pinned: 1");
- OK(getFromSocket("/keyword windowrule plugin:someplugin:variable, class:wr_kitty"));
- OK(getFromSocket("/keyword windowrule plugin:someplugin:variable 10, class:wr_kitty"));
- OK(getFromSocket("/keyword windowrule workspace 1, class:wr_kitty"));
- OK(getFromSocket("/keyword windowrule workspace special:magic, class:magic_kitty"));
+ }
- if (!spawnKitty("magic_kitty"))
- return false;
- EXPECT_CONTAINS(getFromSocket("/activewindow"), "special:magic");
+ OK(getFromSocket("/keyword windowrule[wr-kitty-stuff]:opacity 0.5 0.5 override"));
+
+ {
+ auto str = getFromSocket("/getprop active opacity");
+ EXPECT_CONTAINS(str, "0.5");
+ }
+
+ OK(getFromSocket("/keyword windowrule[special-magic-kitty]:match:class magic_kitty"));
+ OK(getFromSocket("/keyword windowrule[special-magic-kitty]:workspace special:magic"));
+
+ if (!spawnKitty("magic_kitty"))
+ return false;
+
+ {
+ auto str = getFromSocket("/activewindow");
+ EXPECT_CONTAINS(str, "special:magic");
EXPECT_NOT_CONTAINS(str, "workspace: 9");
}
- NLog::log("{}Testing faulty rules", Colors::YELLOW);
+ if (auto str = getFromSocket("/monitors"); str.contains("magic)")) {
+ OK(getFromSocket("/dispatch togglespecialworkspace magic"));
+ }
+
+ Tests::killAllWindows();
+
+ if (!spawnKitty("tag_kitty"))
+ return false;
+
+ {
+ auto str = getFromSocket("/activewindow");
+ EXPECT_CONTAINS(str, "floating: 1");
+ }
+
+ OK(getFromSocket("/reload"));
+ Tests::killAllWindows();
+
+ // test rules that overlap effects but don't overlap props
+ OK(getFromSocket("/keyword windowrule match:class overlap_kitty, border_size 0"));
+ OK(getFromSocket("/keyword windowrule match:fullscreen false, border_size 10"));
+
+ if (!spawnKitty("overlap_kitty"))
+ return false;
+
+ {
+ auto str = getFromSocket("/getprop active border_size");
+ EXPECT_CONTAINS(str, "10");
+ }
+
+ OK(getFromSocket("/reload"));
+ Tests::killAllWindows();
+
+ OK(getFromSocket("/keyword general:border_size 0"));
+ OK(getFromSocket("/keyword windowrule match:float true, border_size 10"));
+
+ if (!spawnKitty("border_kitty"))
+ return false;
+
+ {
+ auto str = getFromSocket("/getprop active border_size");
+ EXPECT_CONTAINS(str, "0");
+ }
+
+ OK(getFromSocket("/dispatch togglefloating"));
+
+ {
+ auto str = getFromSocket("/getprop active border_size");
+ EXPECT_CONTAINS(str, "10");
+ }
+
+ OK(getFromSocket("/dispatch togglefloating"));
+
+ {
+ auto str = getFromSocket("/getprop active border_size");
+ EXPECT_CONTAINS(str, "0");
+ }
+
+ OK(getFromSocket("/reload"));
+ Tests::killAllWindows();
+
+ // test expression rules
+ OK(getFromSocket("/keyword windowrule match:class expr_kitty, float yes, size monitor_w*0.5 monitor_h*0.5, move 20+(monitor_w*0.1) monitor_h*0.5"));
+
+ if (!spawnKitty("expr_kitty"))
+ return false;
+
{
- const auto PARAM = "Invalid parameter";
- const auto RULE = "Invalid value";
- const auto NORULE = "no rules provided";
- EXPECT_CONTAINS(getFromSocket("/keyword windowrule notarule, class:wr_kitty"), RULE)
- EXPECT_CONTAINS(getFromSocket("/keyword windowrule class:wr_kitty"), NORULE)
- EXPECT_CONTAINS(getFromSocket("/keyword windowrule float, class:wr_kitty, size"), PARAM)
- EXPECT_CONTAINS(getFromSocket("/keyword windowrule float, classI:wr_kitty"), PARAM)
- EXPECT_CONTAINS(getFromSocket("/keyword windowrule workspace:, class:wr_kitty"), NORULE)
+ auto str = getFromSocket("/activewindow");
+ EXPECT_CONTAINS(str, "floating: 1");
+ EXPECT_CONTAINS(str, "at: 212,540");
+ EXPECT_CONTAINS(str, "size: 960,540");
}
+ OK(getFromSocket("/reload"));
+ Tests::killAllWindows();
+
+ OK(getFromSocket("/dispatch plugin:test:add_rule"));
+ OK(getFromSocket("/reload"));
+
+ OK(getFromSocket("/keyword windowrule match:class plugin_kitty, plugin_rule effect"));
+
+ if (!spawnKitty("plugin_kitty"))
+ return false;
+
+ OK(getFromSocket("/dispatch plugin:test:check_rule"));
+
+ OK(getFromSocket("/reload"));
+ Tests::killAllWindows();
+
+ OK(getFromSocket("/dispatch plugin:test:add_rule"));
+ OK(getFromSocket("/reload"));
+
+ OK(getFromSocket("/keyword windowrule[test-plugin-rule]:match:class plugin_kitty"));
+ OK(getFromSocket("/keyword windowrule[test-plugin-rule]:plugin_rule effect"));
+
+ if (!spawnKitty("plugin_kitty"))
+ return false;
+
+ OK(getFromSocket("/dispatch plugin:test:check_rule"));
+
NLog::log("{}Reloading config", Colors::YELLOW);
OK(getFromSocket("/reload"));