mirror of
https://github.com/hyprwm/Hyprland.git
synced 2026-08-24 02:24:14 -05:00
Adds a new lua config manager, which will automatically be used if there is a lua config present.
259 lines
7.2 KiB
C++
259 lines
7.2 KiB
C++
#include "../shared.hpp"
|
|
#include "../../shared.hpp"
|
|
#include "../../hyprctlCompat.hpp"
|
|
#include "tests.hpp"
|
|
|
|
static int ret = 0;
|
|
|
|
static void testFocusCycling() {
|
|
for (auto const& win : {"a", "b", "c", "d"}) {
|
|
if (!Tests::spawnKitty(win)) {
|
|
NLog::log("{}Failed to spawn kitty with win class `{}`", Colors::RED, win);
|
|
++TESTS_FAILED;
|
|
ret = 1;
|
|
return;
|
|
}
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:a' })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ direction = 'right' })"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: b");
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ direction = 'right' })"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: c");
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ direction = 'right' })"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: d");
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.window.move({ direction = 'left' })"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: d");
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ direction = 'up' })"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: c");
|
|
}
|
|
|
|
// clean up
|
|
NLog::log("{}Killing all windows", Colors::YELLOW);
|
|
Tests::killAllWindows();
|
|
}
|
|
|
|
static void testFocusWrapping() {
|
|
for (auto const& win : {"a", "b", "c", "d"}) {
|
|
if (!Tests::spawnKitty(win)) {
|
|
NLog::log("{}Failed to spawn kitty with win class `{}`", Colors::RED, win);
|
|
++TESTS_FAILED;
|
|
ret = 1;
|
|
return;
|
|
}
|
|
}
|
|
|
|
// set wrap_focus to true
|
|
OK(getFromSocket("/eval hl.config({ scrolling = { wrap_focus = true } })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:a' })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus l')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: d");
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus r')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: a");
|
|
}
|
|
|
|
// set wrap_focus to false
|
|
OK(getFromSocket("/eval hl.config({ scrolling = { wrap_focus = false } })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:a' })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus l')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: a");
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:d' })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus r')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: d");
|
|
}
|
|
|
|
// clean up
|
|
NLog::log("{}Killing all windows", Colors::YELLOW);
|
|
Tests::killAllWindows();
|
|
}
|
|
|
|
static void testSwapcolWrapping() {
|
|
for (auto const& win : {"a", "b", "c", "d"}) {
|
|
if (!Tests::spawnKitty(win)) {
|
|
NLog::log("{}Failed to spawn kitty with win class `{}`", Colors::RED, win);
|
|
++TESTS_FAILED;
|
|
ret = 1;
|
|
return;
|
|
}
|
|
}
|
|
|
|
// set wrap_swapcol to true
|
|
OK(getFromSocket("/eval hl.config({ scrolling = { wrap_swapcol = true } })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:a' })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('swapcol l')"));
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus l')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: c");
|
|
}
|
|
|
|
// clean up
|
|
NLog::log("{}Killing all windows", Colors::YELLOW);
|
|
Tests::killAllWindows();
|
|
|
|
for (auto const& win : {"a", "b", "c", "d"}) {
|
|
if (!Tests::spawnKitty(win)) {
|
|
NLog::log("{}Failed to spawn kitty with win class `{}`", Colors::RED, win);
|
|
++TESTS_FAILED;
|
|
ret = 1;
|
|
return;
|
|
}
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:d' })"));
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('swapcol r')"));
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus r')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: b");
|
|
}
|
|
|
|
// clean up
|
|
NLog::log("{}Killing all windows", Colors::YELLOW);
|
|
Tests::killAllWindows();
|
|
|
|
for (auto const& win : {"a", "b", "c", "d"}) {
|
|
if (!Tests::spawnKitty(win)) {
|
|
NLog::log("{}Failed to spawn kitty with win class `{}`", Colors::RED, win);
|
|
++TESTS_FAILED;
|
|
ret = 1;
|
|
return;
|
|
}
|
|
}
|
|
|
|
// set wrap_swapcol to false
|
|
OK(getFromSocket("/eval hl.config({ scrolling = { wrap_swapcol = false } })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:a' })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('swapcol l')"));
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus r')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: b");
|
|
}
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ window = 'class:d' })"));
|
|
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('swapcol r')"));
|
|
OK(getFromSocket("/dispatch hl.dsp.layout('focus l')"));
|
|
|
|
{
|
|
auto str = getFromSocket("/activewindow");
|
|
EXPECT_CONTAINS(str, "class: c");
|
|
}
|
|
|
|
// clean up
|
|
NLog::log("{}Killing all windows", Colors::YELLOW);
|
|
Tests::killAllWindows();
|
|
}
|
|
|
|
static bool testWindowRule() {
|
|
NLog::log("{}Testing Scrolling Width", Colors::GREEN);
|
|
|
|
// inject a new rule.
|
|
OK(getFromSocket("/eval hl.window_rule({ name = 'scrolling-width', match = { class = 'kitty_scroll' } })"));
|
|
OK(getFromSocket("/eval hl.window_rule({ name = 'scrolling-width', scrolling_width = 0.1 })"));
|
|
|
|
if (!Tests::spawnKitty("kitty_scroll")) {
|
|
NLog::log("{}Failed to spawn kitty with win class `kitty_scroll`", Colors::RED);
|
|
return false;
|
|
}
|
|
|
|
if (!Tests::spawnKitty("kitty_scroll")) {
|
|
NLog::log("{}Failed to spawn kitty with win class `kitty_scroll`", Colors::RED);
|
|
return false;
|
|
}
|
|
|
|
EXPECT(Tests::windowCount(), 2);
|
|
|
|
// not the greatest test, but as long as res and gaps don't change, we good.
|
|
EXPECT_CONTAINS(getFromSocket("/activewindow"), "size: 174,1036");
|
|
|
|
NLog::log("{}Killing all windows", Colors::YELLOW);
|
|
Tests::killAllWindows();
|
|
EXPECT(Tests::windowCount(), 0);
|
|
return true;
|
|
}
|
|
|
|
static bool test() {
|
|
NLog::log("{}Testing Scroll layout", Colors::GREEN);
|
|
|
|
// setup
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ workspace = 'name:scroll' })"));
|
|
OK(getFromSocket("r/eval hl.config({ general = { layout = 'scrolling' } })"));
|
|
|
|
// test
|
|
NLog::log("{}Testing focus cycling", Colors::GREEN);
|
|
testFocusCycling();
|
|
|
|
// test
|
|
NLog::log("{}Testing focus wrap", Colors::GREEN);
|
|
testFocusWrapping();
|
|
|
|
// test
|
|
NLog::log("{}Testing swapcol wrap", Colors::GREEN);
|
|
testSwapcolWrapping();
|
|
|
|
testWindowRule();
|
|
|
|
// clean up
|
|
NLog::log("Cleaning up", Colors::YELLOW);
|
|
OK(getFromSocket("/dispatch hl.dsp.focus({ workspace = '1' })"));
|
|
OK(getFromSocket("/reload"));
|
|
|
|
return !ret;
|
|
}
|
|
|
|
REGISTER_TEST_FN(test);
|