summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-04-28 18:10:25 +0100
committerGitHub <noreply@github.com>2026-04-28 18:10:25 +0100
commit94b90a2cb0b4a0e13018cd5ebbf09394abf3b96b (patch)
tree484d32baaab1acdaab7a817c86aa89f117a21059 /tests
parentab75bbfbecdfb4a0355106f740944c87cb9edd4c (diff)
config/lua: add ExpressionVec2, allow using a table for vec2 rules (#14197)
Diffstat (limited to 'tests')
-rw-r--r--tests/config/lua/ConfigValueTypes.cpp53
-rw-r--r--tests/helpers/Expression.cpp11
2 files changed, 64 insertions, 0 deletions
diff --git a/tests/config/lua/ConfigValueTypes.cpp b/tests/config/lua/ConfigValueTypes.cpp
index 90e97520..76de98bf 100644
--- a/tests/config/lua/ConfigValueTypes.cpp
+++ b/tests/config/lua/ConfigValueTypes.cpp
@@ -1,6 +1,7 @@
#include <config/lua/types/LuaConfigBool.hpp>
#include <config/lua/types/LuaConfigColor.hpp>
#include <config/lua/types/LuaConfigCssGap.hpp>
+#include <config/lua/types/LuaConfigExpressionVec2.hpp>
#include <config/lua/types/LuaConfigFloat.hpp>
#include <config/lua/types/LuaConfigFontWeight.hpp>
#include <config/lua/types/LuaConfigGradient.hpp>
@@ -49,6 +50,14 @@ namespace {
lua_pushnumber(L, y);
lua_rawseti(L, -2, 2);
}
+
+ void pushExpressionVec2Table(lua_State* L, const char* x, const char* y) {
+ lua_createtable(L, 2, 2);
+ lua_pushstring(L, x);
+ lua_rawseti(L, -2, 1);
+ lua_pushstring(L, y);
+ lua_rawseti(L, -2, 2);
+ }
}
TEST(ConfigLuaValueTypes, boolParseAndReset) {
@@ -234,6 +243,50 @@ TEST(ConfigLuaValueTypes, vec2ParseValidateAndPush) {
EXPECT_EQ(err.errorCode, PARSE_ERROR_BAD_VALUE);
}
+TEST(ConfigLuaValueTypes, expressionVec2AcceptsStringNumberAndTableForms) {
+ CLuaState S;
+ const auto L = S.get();
+
+ CLuaConfigExpressionVec2 value;
+
+ lua_pushstring(L, "monitor_w*0.5 monitor_h*0.25");
+ auto err = value.parse(L);
+ lua_pop(L, 1);
+ EXPECT_EQ(err.errorCode, PARSE_ERROR_OK);
+ EXPECT_EQ(value.parsed().x, "monitor_w*0.5");
+ EXPECT_EQ(value.parsed().y, "monitor_h*0.25");
+
+ pushVec2Table(L, 150, 200);
+ err = value.parse(L);
+ lua_pop(L, 1);
+ EXPECT_EQ(err.errorCode, PARSE_ERROR_OK);
+ EXPECT_EQ(value.parsed().x, "150");
+ EXPECT_EQ(value.parsed().y, "200");
+
+ pushExpressionVec2Table(L, "monitor_h * 0.5", "monitor_h * 0.25");
+ err = value.parse(L);
+ lua_pop(L, 1);
+ EXPECT_EQ(err.errorCode, PARSE_ERROR_OK);
+ EXPECT_EQ(value.parsed().x, "monitor_h * 0.5");
+ EXPECT_EQ(value.parsed().y, "monitor_h * 0.25");
+
+ value.push(L);
+ ASSERT_TRUE(lua_istable(L, -1));
+ lua_rawgeti(L, -1, 1);
+ EXPECT_STREQ(lua_tostring(L, -1), "monitor_h * 0.5");
+ lua_pop(L, 1);
+ lua_getfield(L, -1, "y");
+ EXPECT_STREQ(lua_tostring(L, -1), "monitor_h * 0.25");
+ lua_pop(L, 2);
+
+ lua_createtable(L, 1, 0);
+ lua_pushnumber(L, 1);
+ lua_rawseti(L, -2, 1);
+ err = value.parse(L);
+ lua_pop(L, 1);
+ EXPECT_EQ(err.errorCode, PARSE_ERROR_BAD_VALUE);
+}
+
TEST(ConfigLuaValueTypes, cssGapParseFormsAndRange) {
CLuaState S;
const auto L = S.get();
diff --git a/tests/helpers/Expression.cpp b/tests/helpers/Expression.cpp
index 8db67776..6b0d1873 100644
--- a/tests/helpers/Expression.cpp
+++ b/tests/helpers/Expression.cpp
@@ -65,3 +65,14 @@ TEST(Helpers, expressionZero) {
EXPECT_DOUBLE_EQ(expr.compute("0 * 999").value(), 0.0);
EXPECT_DOUBLE_EQ(expr.compute("5 - 5").value(), 0.0);
}
+
+TEST(Helpers, expressionVec2ParsesLegacyString) {
+ auto parsed = parseExpressionVec2("monitor_w*0.5 monitor_h*0.25");
+ ASSERT_TRUE(parsed.has_value()) << parsed.error();
+
+ EXPECT_EQ(parsed->x, "monitor_w*0.5");
+ EXPECT_EQ(parsed->y, "monitor_h*0.25");
+ EXPECT_EQ(parsed->toString(), "monitor_w*0.5 monitor_h*0.25");
+
+ EXPECT_FALSE(parseExpressionVec2("monitor_w*0.5").has_value());
+}