|
@@ -0,0 +1,67 @@
|
|
|
+#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");
|
|
|
+}
|
|
|
+
|
|
|
+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");
|
|
|
+}
|
|
|
+
|
|
|
+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);
|
|
|
+}
|