]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
test-luawrapper: More complicated variant tests
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 9 Dec 2025 09:06:51 +0000 (10:06 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 9 Dec 2025 09:06:51 +0000 (10:06 +0100)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/test-luawrapper.cc

index 9aae68dca8c8932814ba5bbbce9b0ce273f15a28..b14dc3df668f65d680ec45ea8d55e75284356425 100644 (file)
@@ -70,28 +70,62 @@ BOOST_AUTO_TEST_CASE(test_std_optional)
   }
 }
 
+BOOST_AUTO_TEST_CASE(test_boost_variant)
+{
+  using MyVariantType = boost::variant<int, const std::string, std::string, std::string*>;
+
+  LuaContext context;
+  context.writeFunction("testVariant", [](MyVariantType incoming) -> MyVariantType {
+    return incoming;
+  });
+
+  {
+    auto result = context.executeCode<MyVariantType>("return testVariant(1)");
+    const auto* content = boost::get<int>(&result);
+    BOOST_REQUIRE(content);
+    BOOST_CHECK_EQUAL(*content, 1);
+  }
+
+  {
+    auto result = context.executeCode<MyVariantType>("return testVariant('foo')");
+    const auto* content = boost::get<const std::string>(&result);
+    BOOST_REQUIRE(content);
+    BOOST_CHECK_EQUAL(*content, "foo");
+  }
+
+  {
+    auto func = [&]() {
+      context.executeCode<MyVariantType>("return testVariant(nil)");
+    };
+    BOOST_CHECK_THROW(func(), LuaContext::ExecutionErrorException);
+  }
+}
+
+
 BOOST_AUTO_TEST_CASE(test_std_variant)
 {
+  using MyVariantType = std::variant<int, const std::string, std::string, std::string*>;
+
   LuaContext context;
-  context.writeFunction("testVariant", [](std::variant<int, std::string> incoming) -> std::variant<int, std::string> {
+  context.writeFunction("testVariant", [](MyVariantType incoming) -> MyVariantType {
     return incoming;
   });
 
   {
-    auto result = context.executeCode<std::variant<int, std::string>>("return testVariant(1)");
+    const auto result = context.executeCode<MyVariantType>("return testVariant(1)");
     BOOST_REQUIRE(std::holds_alternative<int>(result));
     BOOST_CHECK_EQUAL(std::get<int>(result), 1);
   }
 
   {
-    auto result = context.executeCode<std::variant<int, std::string>>("return testVariant('foo')");
-    BOOST_REQUIRE(std::holds_alternative<std::string>(result));
-    BOOST_CHECK_EQUAL(std::get<std::string>(result), "foo");
+    const auto result = context.executeCode<MyVariantType>("return testVariant('foo')");
+    BOOST_REQUIRE(std::holds_alternative<const std::string>(result));
+    BOOST_CHECK_EQUAL(std::get<const std::string>(result), "foo");
   }
 
   {
     auto func = [&]() {
-      context.executeCode<std::variant<int, std::string>>("return testVariant(nil)");
+      context.executeCode<MyVariantType>("return testVariant(nil)");
     };
     BOOST_CHECK_THROW(func(), LuaContext::ExecutionErrorException);
   }