mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-11-15 03:36:53 -06:00
Add VariableRef wrapper and variable reference collector
Just a wrapper around weark_ptr<Variable> to make tracking usage easier
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
#include "catch.hpp"
|
||||
|
||||
#include <variable-ref.hpp>
|
||||
#include <variable.hpp>
|
||||
|
||||
#include <obs.hpp>
|
||||
#include <thread>
|
||||
|
||||
TEST_CASE("Variable", "[variable]")
|
||||
@@ -50,3 +53,70 @@ TEST_CASE("Variable", "[variable]")
|
||||
variable.SetValue(123);
|
||||
REQUIRE(*variable.GetSecondsSinceLastChange() > 0);
|
||||
}
|
||||
|
||||
static std::shared_ptr<advss::Variable> addVariable(const std::string &name)
|
||||
{
|
||||
OBSDataAutoRelease data = obs_data_create();
|
||||
obs_data_set_string(data, "name", name.c_str());
|
||||
auto variable = std::make_shared<advss::Variable>();
|
||||
variable->Load(data);
|
||||
advss::GetVariables().emplace_back(variable);
|
||||
return variable;
|
||||
}
|
||||
|
||||
TEST_CASE("VariableRef", "[variable]")
|
||||
{
|
||||
auto var = addVariable("var");
|
||||
addVariable("var2");
|
||||
addVariable("Var");
|
||||
|
||||
SECTION("Save reports and writes name")
|
||||
{
|
||||
advss::VariableRefCollector collector;
|
||||
advss::VariableRef ref(var);
|
||||
OBSDataAutoRelease data = obs_data_create();
|
||||
ref.Save(data, "key");
|
||||
REQUIRE(std::string(obs_data_get_string(data, "key")) == "var");
|
||||
REQUIRE(collector.Counts().at("var") == 1);
|
||||
|
||||
advss::VariableRef loaded;
|
||||
loaded.Load(data, "key");
|
||||
REQUIRE(loaded.lock() == var);
|
||||
}
|
||||
|
||||
SECTION("Expired ref is not saved or reported")
|
||||
{
|
||||
advss::VariableRefCollector collector;
|
||||
advss::VariableRef ref;
|
||||
OBSDataAutoRelease data = obs_data_create();
|
||||
ref.Save(data, "key");
|
||||
REQUIRE_FALSE(obs_data_has_user_value(data, "key"));
|
||||
REQUIRE(collector.Counts().empty());
|
||||
}
|
||||
|
||||
SECTION("Text references")
|
||||
{
|
||||
advss::VariableRefCollector collector;
|
||||
advss::ReportVariableRefsInText(
|
||||
"${var} ${var2} ${var} var Var");
|
||||
const auto &counts = collector.Counts();
|
||||
REQUIRE(counts.at("var") == 2);
|
||||
REQUIRE(counts.at("var2") == 1);
|
||||
REQUIRE(counts.find("Var") == counts.end());
|
||||
}
|
||||
|
||||
SECTION("Nested collectors")
|
||||
{
|
||||
advss::VariableRefCollector outer;
|
||||
{
|
||||
advss::VariableRefCollector inner;
|
||||
advss::ReportVariableRef(var);
|
||||
REQUIRE(inner.Counts().at("var") == 1);
|
||||
}
|
||||
REQUIRE(outer.Counts().empty());
|
||||
advss::ReportVariableRef(var);
|
||||
REQUIRE(outer.Counts().at("var") == 1);
|
||||
}
|
||||
|
||||
advss::GetVariables().clear();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user