Procházet zdrojové kódy

Merge pull request #1091 from lukaspj/fix/inspector-field-evaluation

Fix evaluatef argument handling and add regression test
Brian Roberts před 2 roky
rodič
revize
7a19a3f2bb

+ 5 - 2
Engine/source/console/script.h

@@ -50,10 +50,13 @@ namespace Con
    /// NOTE: This function restores the console stack on return.
    inline EvalResult evaluatef(const char* string, ...)
    {
+      char buffer[4096];
       va_list args;
-      va_start(args, string);
-      EvalResult result = setLastEvalResult(getRuntime()->evaluatef(string, args));
+      va_start(args, &string);
+      dVsprintf(buffer, sizeof(buffer), string, args);
       va_end(args);
+
+      EvalResult result = setLastEvalResult(getRuntime()->evaluate(buffer));
       return result;
    };
 

+ 1 - 1
Engine/source/console/torquescript/runtime.cpp

@@ -97,7 +97,7 @@ namespace TorqueScript
    {
       char buffer[4096];
       va_list args;
-      va_start(args, string);
+      va_start(args, &string);
       dVsprintf(buffer, sizeof(buffer), string, args);
       va_end(args);
       return evaluate(buffer);

+ 33 - 0
Engine/source/testing/inspectorFieldTest.cpp

@@ -0,0 +1,33 @@
+#include <gtest/gtest.h>
+
+#include "gui/editor/inspector/group.h"
+#include "console/script.h"
+#include "T3D/fx/particle.h"
+
+TEST(InspectorFieldTest, SetData_Should_Update_The_Field)
+{
+   GuiInspector* inspector = new GuiInspector();
+   ASSERT_TRUE(inspector->registerObject());
+
+   ParticleData* exampleObj = new ParticleData();
+   ASSERT_TRUE(exampleObj->registerObject());
+   // Add it to inspector so inspector field can find it
+   inspector->addInspectObject(exampleObj);
+
+   AbstractClassRep::Field* field = const_cast<AbstractClassRep::Field*>(exampleObj->findField(StringTable->insert("lifetimeMS")));
+
+   GuiInspectorGroup* group = new GuiInspectorGroup("testing", NULL);
+   ASSERT_TRUE(group->registerObject());
+
+   GuiInspectorField* inspectorField = new GuiInspectorField(inspector, group, field);
+   ASSERT_TRUE(inspectorField->registerObject());
+
+   inspectorField->setData("12345");
+   EXPECT_EQ(exampleObj->lifetimeMS, 12345);
+
+   // Cleanup
+   inspectorField->deleteObject();
+   group->deleteObject();
+   inspector->deleteObject();
+   exampleObj->deleteObject();
+}