2023-09-16 21:29:13 +00:00
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include "console/script.h"
|
|
|
|
|
|
#include "T3D/fx/particle.h"
|
|
|
|
|
|
#include "T3D/gameBase/gameBase.h"
|
|
|
|
|
|
|
|
|
|
|
|
TEST(DatablockTest, Datablocks_Can_Be_Overridden)
|
|
|
|
|
|
{
|
|
|
|
|
|
Con::EvalResult result = Con::evaluatef(R"(
|
|
|
|
|
|
datablock SimDataBlock(testDb) {
|
|
|
|
|
|
foo = 2;
|
|
|
|
|
|
};
|
|
|
|
|
|
datablock SimDataBlock(testDb) {
|
|
|
|
|
|
foo = 3;
|
|
|
|
|
|
};
|
|
|
|
|
|
return testDb.foo;
|
|
|
|
|
|
)", false, "datablockTest.cpp");
|
|
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(result.valid);
|
|
|
|
|
|
// Successfully overrode the datablock
|
|
|
|
|
|
EXPECT_STREQ(result.value, "3");
|
2023-09-16 21:34:48 +00:00
|
|
|
|
|
|
|
|
|
|
// Cleanup
|
|
|
|
|
|
result = Con::evaluatef(R"(
|
|
|
|
|
|
testDb.delete();
|
|
|
|
|
|
return "done";
|
|
|
|
|
|
)", false, "datablockTest.cpp");
|
|
|
|
|
|
// Cleanup succesful
|
|
|
|
|
|
ASSERT_TRUE(result.valid);
|
2023-09-16 21:29:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TEST(DatablockTest, Datablocks_Must_Not_Change_Type)
|
|
|
|
|
|
{
|
|
|
|
|
|
Con::EvalResult result = Con::evaluatef(R"(
|
|
|
|
|
|
datablock SimDataBlock(testDb) {
|
|
|
|
|
|
foo = 2;
|
|
|
|
|
|
};
|
|
|
|
|
|
datablock ParticleData(testDb) {
|
|
|
|
|
|
foo = 3;
|
|
|
|
|
|
};
|
|
|
|
|
|
return testDb.foo;
|
|
|
|
|
|
)", false, "datablockTest.cpp");
|
|
|
|
|
|
|
|
|
|
|
|
// Not a syntax error
|
|
|
|
|
|
ASSERT_TRUE(result.valid);
|
|
|
|
|
|
// Did not override the datablock
|
|
|
|
|
|
EXPECT_STREQ(result.value, "2");
|
2023-09-16 21:34:48 +00:00
|
|
|
|
|
|
|
|
|
|
// Cleanup
|
|
|
|
|
|
result = Con::evaluatef(R"(
|
|
|
|
|
|
testDb.delete();
|
|
|
|
|
|
return "done";
|
|
|
|
|
|
)", false, "datablockTest.cpp");
|
|
|
|
|
|
// Cleanup succesful
|
|
|
|
|
|
ASSERT_TRUE(result.valid);
|
2023-09-16 21:29:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TEST(DatablockTest, Datablock_Can_Substitute_String)
|
|
|
|
|
|
{
|
|
|
|
|
|
Con::EvalResult result = Con::evaluatef(R"(
|
|
|
|
|
|
datablock ParticleData(testDb) {
|
|
|
|
|
|
lifetimeMS = "$$ %%%%.bar";
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
$simObj = new GameBase(testObj) {
|
|
|
|
|
|
bar = 1234;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
return "done";
|
|
|
|
|
|
)", false, "datablockTest.cpp");
|
|
|
|
|
|
|
|
|
|
|
|
EXPECT_TRUE(result.valid);
|
|
|
|
|
|
EXPECT_STREQ(result.value, "done");
|
|
|
|
|
|
|
|
|
|
|
|
ParticleData* testDb = NULL;
|
|
|
|
|
|
Sim::findObject("testDb", testDb);
|
|
|
|
|
|
GameBase* testObj = NULL;
|
|
|
|
|
|
Sim::findObject("testObj", testObj);
|
|
|
|
|
|
|
|
|
|
|
|
testDb->performSubstitutions(testDb, testObj);
|
|
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ(testDb->lifetimeMS, 1234);
|
2023-09-16 21:34:48 +00:00
|
|
|
|
|
|
|
|
|
|
// Cleanup
|
|
|
|
|
|
testDb->deleteObject();
|
|
|
|
|
|
testObj->deleteObject();
|
2023-09-16 21:29:13 +00:00
|
|
|
|
}
|