diff --git a/core/src/objects/datamodel.cpp b/core/src/objects/datamodel.cpp index a1934f9..8aa0303 100644 --- a/core/src/objects/datamodel.cpp +++ b/core/src/objects/datamodel.cpp @@ -15,12 +15,15 @@ #include #include +int _dbgDataModelDestroyCount = 0; + DataModel::DataModel() : Instance(&TYPE) { this->name = "Place"; } DataModel::~DataModel() { + _dbgDataModelDestroyCount++; #ifndef NDEBUG printf("Datamodel successfully destroyed\n"); #endif diff --git a/tests/src/objectmodel/datamodel.cpp b/tests/src/objectmodel/datamodel.cpp new file mode 100644 index 0000000..85ebe27 --- /dev/null +++ b/tests/src/objectmodel/datamodel.cpp @@ -0,0 +1,28 @@ +#include "objects/datamodel.h" +#include "objects/script.h" +#include + +extern int _dbgDataModelDestroyCount; + +TEST_CASE("Datamodel destruction") { + // Ensure no cyclic-dependency causing datamodel to not be destructed + + auto root = DataModel::New(); + root->Init(true); + + SECTION("Empty model") { + int prevCount = _dbgDataModelDestroyCount; + root = nullptr; + REQUIRE(_dbgDataModelDestroyCount == prevCount + 1); + } + + SECTION("Model with script") { + auto s = Script::New(); + root->AddChild(s); + s->source = "local x = game; wait(0)"; + s->Run(); + int prevCount = _dbgDataModelDestroyCount; + root = nullptr; + REQUIRE(_dbgDataModelDestroyCount == prevCount + 1); + } +} \ No newline at end of file