#include #include #include #include #define SOL_ALL_SAFETIES_ON 1 #include using namespace fuc2; enum class NodeType { TEXT, H1, IMAGE, UL }; struct Node { std::unordered_map config; NodeType type = NodeType::TEXT; std::string content = ""; Node(NodeType type) {} void addText(const std::string& text) { content += text; } void addConfig(const std::string& key, const std::string& val) { config.try_emplace(key, val); } }; struct Slide { std::unordered_map config; std::vector content; void addNode(const Node& n) { content.push_back(n); } void addConfig(const std::string& key, const std::string& val) { config.try_emplace(key, val); } }; struct Deck { std::unordered_map config; std::vector slides; void addSlide(const Slide& slide) { slides.push_back(slide); } void addConfig(const std::string& key, const std::string& val) { config.try_emplace(key, val); } }; namespace build_self_tests { void test_load_slides() { using L = sol::lib; sol::state lua; lua.open_libraries( L::base, L::package, L::coroutine, L::string, L::os, L::math, L::table, L::debug, L::io, L::ffi, L::jit); lua.new_enum("NodeType",{ {"TEXT", NodeType::TEXT}, {"H1", NodeType::H1}, {"IMAGE", NodeType::IMAGE}, {"UL", NodeType::UL} }); lua.new_usertype("Node", sol::constructors(), "type", &Node::type, "content", &Node::content, "addText", &Node::addText, "addConfig", &Node::addConfig); lua.new_usertype("Slide", "addConfig", &Slide::addConfig, "addNode", &Slide::addNode); lua.new_usertype("Deck", "addSlide", &Deck::addSlide, "addConfig", &Deck::addConfig); lua.script_file("lua/test.lua"); } fuc2::Set TESTS{ .name="slides", .options={ .fail_fast=false }, .tests={ TEST(test_load_slides), } }; }