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

Fix evaluatef argument handling and add regression test
This commit is contained in:
Brian Roberts 2023-09-16 17:38:50 -05:00 committed by GitHub
commit 7a19a3f2bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 3 deletions

View file

@ -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;
};

View file

@ -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);

View file

@ -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();
}