diff options
| author | srdusr <trevorgray@srdusr.com> | 2025-09-26 12:23:19 +0200 |
|---|---|---|
| committer | srdusr <trevorgray@srdusr.com> | 2025-09-26 12:23:19 +0200 |
| commit | e4a0432383331e013808a97b7c24707e4ddc4726 (patch) | |
| tree | 3ef4465be03bc7b92a0b048f02f76475045404b6 /tests/test_lua_manager.cc | |
| parent | 105732dde10b317a81d5a10a3f66b315d6f85015 (diff) | |
| download | srdwm-e4a0432383331e013808a97b7c24707e4ddc4726.tar.gz srdwm-e4a0432383331e013808a97b7c24707e4ddc4726.zip | |
Initial Commit
Diffstat (limited to 'tests/test_lua_manager.cc')
| -rw-r--r-- | tests/test_lua_manager.cc | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/tests/test_lua_manager.cc b/tests/test_lua_manager.cc new file mode 100644 index 0000000..c50da7e --- /dev/null +++ b/tests/test_lua_manager.cc @@ -0,0 +1,231 @@ +#include <gtest/gtest.h> +#include "../src/config/lua_manager.h" +#include <memory> + +class LuaManagerTest : public ::testing::Test { +protected: + void SetUp() override { + lua_manager = std::make_unique<LuaManager>(); + EXPECT_TRUE(lua_manager->initialize()); + } + + void TearDown() override { + if (lua_manager) { + lua_manager->shutdown(); + } + } + + std::unique_ptr<LuaManager> lua_manager; +}; + +TEST_F(LuaManagerTest, Initialization) { + EXPECT_TRUE(lua_manager->initialize()); + EXPECT_TRUE(lua_manager->is_initialized()); +} + +TEST_F(LuaManagerTest, ConfigurationValues) { + // Test string values + lua_manager->set_string("test.string", "test_value"); + EXPECT_EQ(lua_manager->get_string("test.string", ""), "test_value"); + EXPECT_EQ(lua_manager->get_string("test.nonexistent", "default"), "default"); + + // Test integer values + lua_manager->set_int("test.int", 42); + EXPECT_EQ(lua_manager->get_int("test.int", 0), 42); + EXPECT_EQ(lua_manager->get_int("test.nonexistent", 100), 100); + + // Test boolean values + lua_manager->set_bool("test.bool", true); + EXPECT_TRUE(lua_manager->get_bool("test.bool", false)); + EXPECT_FALSE(lua_manager->get_bool("test.nonexistent", false)); +} + +TEST_F(LuaManagerTest, KeyBindings) { + // Test key binding + bool callback_called = false; + lua_manager->bind_key("Mod4+Return", [&callback_called]() { + callback_called = true; + }); + + // Simulate key press + lua_manager->handle_key_press("Mod4+Return"); + EXPECT_TRUE(callback_called); +} + +TEST_F(LuaManagerTest, LayoutManagement) { + // Test layout setting + lua_manager->set_layout(0, "tiling"); + EXPECT_EQ(lua_manager->get_layout(0), "tiling"); + + lua_manager->set_layout(1, "dynamic"); + EXPECT_EQ(lua_manager->get_layout(1), "dynamic"); +} + +TEST_F(LuaManagerTest, WindowDecorationControls) { + // Test decoration controls + EXPECT_TRUE(lua_manager->set_window_decorations("test_window", true)); + EXPECT_TRUE(lua_manager->get_window_decorations("test_window")); + + EXPECT_TRUE(lua_manager->set_window_decorations("test_window", false)); + EXPECT_FALSE(lua_manager->get_window_decorations("test_window")); + + // Test border color + EXPECT_TRUE(lua_manager->set_window_border_color("test_window", 255, 0, 0)); + + // Test border width + EXPECT_TRUE(lua_manager->set_window_border_width("test_window", 5)); +} + +TEST_F(LuaManagerTest, WindowStateControls) { + // Test floating state + EXPECT_TRUE(lua_manager->set_window_floating("test_window", true)); + EXPECT_TRUE(lua_manager->is_window_floating("test_window")); + + EXPECT_TRUE(lua_manager->set_window_floating("test_window", false)); + EXPECT_FALSE(lua_manager->is_window_floating("test_window")); + + // Test toggle + EXPECT_TRUE(lua_manager->toggle_window_floating("test_window")); + EXPECT_TRUE(lua_manager->is_window_floating("test_window")); +} + +TEST_F(LuaManagerTest, ConfigurationLoading) { + // Test loading configuration from string + std::string config = R"( + srd.set("test.loaded", true) + srd.set("test.value", 123) + srd.set("test.string", "loaded_value") + )"; + + EXPECT_TRUE(lua_manager->load_config_string(config)); + EXPECT_TRUE(lua_manager->get_bool("test.loaded", false)); + EXPECT_EQ(lua_manager->get_int("test.value", 0), 123); + EXPECT_EQ(lua_manager->get_string("test.string", ""), "loaded_value"); +} + +TEST_F(LuaManagerTest, ErrorHandling) { + // Test invalid Lua code + std::string invalid_config = "invalid lua code {"; + EXPECT_FALSE(lua_manager->load_config_string(invalid_config)); + + // Test error retrieval + auto errors = lua_manager->get_errors(); + EXPECT_FALSE(errors.empty()); +} + +TEST_F(LuaManagerTest, ThemeConfiguration) { + // Test theme colors + std::map<std::string, std::string> colors = { + {"background", "#2e3440"}, + {"foreground", "#eceff4"}, + {"accent", "#88c0d0"} + }; + + EXPECT_TRUE(lua_manager->set_theme_colors(colors)); + + // Test theme decorations + std::map<std::string, LuaConfigValue> decorations = { + {"border_width", {LuaConfigValue::Type::Number, "", 3.0, false, {}, ""}}, + {"border_color", {LuaConfigValue::Type::String, "#2e3440", 0.0, false, {}, ""}} + }; + + EXPECT_TRUE(lua_manager->set_theme_decorations(decorations)); +} + +TEST_F(LuaManagerTest, ConfigurationReloading) { + // Set initial configuration + lua_manager->set_string("test.reload", "initial"); + EXPECT_EQ(lua_manager->get_string("test.reload", ""), "initial"); + + // Reload configuration + EXPECT_TRUE(lua_manager->reload_config()); + + // Should be reset to default + EXPECT_EQ(lua_manager->get_string("test.reload", "default"), "default"); +} + +TEST_F(LuaManagerTest, LuaAPIFunctions) { + // Test Lua API registration + std::string api_test = R"( + -- Test srd.set + srd.set("api.test", "value") + + -- Test srd.get + local value = srd.get("api.test") + if value ~= "value" then + error("srd.get failed") + end + + -- Test srd.bind + srd.bind("Mod4+Test", function() + srd.set("api.callback", "called") + end) + )"; + + EXPECT_TRUE(lua_manager->load_config_string(api_test)); + EXPECT_EQ(lua_manager->get_string("api.test", ""), "value"); +} + +TEST_F(LuaManagerTest, WindowAPIFunctions) { + // Test window API functions + std::string window_api_test = R"( + -- Test window decoration controls + srd.window.set_decorations("test_window", true) + srd.window.set_border_color("test_window", 255, 0, 0) + srd.window.set_border_width("test_window", 5) + + -- Test window state controls + srd.window.set_floating("test_window", true) + srd.window.toggle_floating("test_window") + )"; + + EXPECT_TRUE(lua_manager->load_config_string(window_api_test)); +} + +TEST_F(LuaManagerTest, LayoutAPIFunctions) { + // Test layout API functions + std::string layout_api_test = R"( + -- Test layout setting + srd.layout.set("tiling") + + -- Test layout configuration + srd.layout.configure("tiling", { + gap = "10", + border_width = "2" + }) + )"; + + EXPECT_TRUE(lua_manager->load_config_string(layout_api_test)); +} + +TEST_F(LuaManagerTest, PerformanceTest) { + // Test performance with many configuration values + for (int i = 0; i < 1000; ++i) { + std::string key = "perf.test." + std::to_string(i); + lua_manager->set_int(key, i); + } + + // Verify all values + for (int i = 0; i < 1000; ++i) { + std::string key = "perf.test." + std::to_string(i); + EXPECT_EQ(lua_manager->get_int(key, -1), i); + } +} + +TEST_F(LuaManagerTest, MemoryManagement) { + // Test memory management with large configurations + std::string large_config; + for (int i = 0; i < 100; ++i) { + large_config += "srd.set(\"large.test." + std::to_string(i) + "\", " + std::to_string(i) + ")\n"; + } + + EXPECT_TRUE(lua_manager->load_config_string(large_config)); + + // Reload to test cleanup + EXPECT_TRUE(lua_manager->reload_config()); +} + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} |
