mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-20 20:54:46 +00:00
199 lines
7 KiB
C++
199 lines
7 KiB
C++
#include "testing/unitTesting.h"
|
|
|
|
#include "platform/platform.h"
|
|
#include "console/simBase.h"
|
|
#include "console/consoleTypes.h"
|
|
#include "console/scriptObjects.h"
|
|
#include "console/simBase.h"
|
|
#include "console/engineAPI.h"
|
|
#include "math/mMath.h"
|
|
#include "console/script.h"
|
|
#include "console/stringStack.h"
|
|
#include "console/consoleInternal.h"
|
|
|
|
using ::testing::Matcher;
|
|
using ::testing::TypedEq;
|
|
|
|
class ConsoleTest : public ::testing::Test
|
|
{
|
|
protected:
|
|
ConsoleTest()
|
|
{
|
|
}
|
|
|
|
void SetUp() override
|
|
{
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
TEST_F(ConsoleTest, executef)
|
|
{
|
|
char buffer[128];
|
|
Con::evaluate("function testExecutef(%a,%b,%c,%d,%e,%f,%g,%h,%i,%j,%k){return %a SPC %b SPC %c SPC %d SPC %e SPC %f SPC %g SPC %h SPC %i SPC %j SPC %k;}\r\nfunction testThisFunction(%a,%b,%c,%d,%e,%f,%g,%h,%i,%j, %this){ return %a SPC %b SPC %c SPC %d SPC %e SPC %f SPC %g SPC %h SPC %i SPC %j;}\r\n", false, "test");
|
|
|
|
// Check basic calls with SimObject. We'll do this for every single possible call just to make sure.
|
|
ConsoleValue returnValue;
|
|
|
|
returnValue = Con::executef("testThisFunction");
|
|
EXPECT_STREQ(returnValue, " ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a");
|
|
EXPECT_STREQ(returnValue, "a ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b");
|
|
EXPECT_STREQ(returnValue, "a b ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b", "c");
|
|
EXPECT_STREQ(returnValue, "a b c ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b", "c", "d");
|
|
EXPECT_STREQ(returnValue, "a b c d ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b", "c", "d", "e");
|
|
EXPECT_STREQ(returnValue, "a b c d e ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b", "c", "d", "e", "f");
|
|
EXPECT_STREQ(returnValue, "a b c d e f ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b", "c", "d", "e", "f", "g");
|
|
EXPECT_STREQ(returnValue, "a b c d e f g ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b", "c", "d", "e", "f", "g", "h");
|
|
EXPECT_STREQ(returnValue, "a b c d e f g h ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testThisFunction", "a", "b", "c", "d", "e", "f", "g", "h", "i");
|
|
EXPECT_STREQ(returnValue, "a b c d e f g h i ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
// Now test without the object
|
|
|
|
returnValue = Con::executef("testExecutef");
|
|
EXPECT_STREQ(returnValue, " ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a");
|
|
EXPECT_STREQ(returnValue, "a ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b");
|
|
EXPECT_STREQ(returnValue, "a b ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c");
|
|
EXPECT_STREQ(returnValue, "a b c ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c", "d");
|
|
EXPECT_STREQ(returnValue, "a b c d ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c", "d", "e");
|
|
EXPECT_STREQ(returnValue, "a b c d e ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c", "d", "e", "f");
|
|
EXPECT_STREQ(returnValue, "a b c d e f ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c", "d", "e", "f", "g");
|
|
EXPECT_STREQ(returnValue, "a b c d e f g ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c", "d", "e", "f", "g", "h");
|
|
EXPECT_STREQ(returnValue, "a b c d e f g h ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c", "d", "e", "f", "g", "h", "i");
|
|
EXPECT_STREQ(returnValue, "a b c d e f g h i ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
returnValue = Con::executef("testExecutef", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
|
|
EXPECT_STREQ(returnValue, "a b c d e f g h i j ") <<
|
|
"All values should be printed in the correct order";
|
|
|
|
// Test type conversions with and without SimObject...
|
|
|
|
// Integer
|
|
returnValue = Con::executef("testThisFunction", 123);
|
|
EXPECT_STREQ(returnValue, "123 ") <<
|
|
"Integer should be converted";
|
|
returnValue = Con::executef("testExecutef", 123);
|
|
EXPECT_STREQ(returnValue, "123 ") <<
|
|
"Integer should be converted";
|
|
|
|
// Float
|
|
returnValue = Con::executef("testThisFunction", (F32)123.0);
|
|
EXPECT_STREQ(returnValue, "123 ") <<
|
|
"Float should be converted";
|
|
returnValue = Con::executef("testExecutef", (F32)123.0);
|
|
EXPECT_STREQ(returnValue, "123 ") <<
|
|
"Float should be converted";
|
|
|
|
|
|
// Point3F
|
|
Point3F point(1,2,3);
|
|
returnValue = Con::executef("testThisFunction", point);
|
|
EXPECT_STREQ(returnValue, "1 2 3 ") <<
|
|
"Point3F should be converted";
|
|
returnValue = Con::executef("testExecutef", point);
|
|
EXPECT_STREQ(returnValue, "1 2 3 ") <<
|
|
"Point3F should be converted";
|
|
|
|
// Finally test the function arg offset. This should be consistently 0 after each call
|
|
|
|
EXPECT_EQ(STR.mFunctionOffset, 0) <<
|
|
"Function offset should be 0";
|
|
|
|
const char *floatArg = Con::getFloatArg(1.23);
|
|
EXPECT_GT(STR.mFunctionOffset, 0) <<
|
|
"Function offset should not be 0";
|
|
|
|
Con::executef("testExecutef", floatArg);
|
|
|
|
EXPECT_EQ(STR.mFunctionOffset, 0) <<
|
|
"Function offset should be 0";
|
|
|
|
floatArg = Con::getFloatArg(1.23);
|
|
EXPECT_GT(STR.mFunctionOffset, 0) <<
|
|
"Function offset should not be 0";
|
|
}
|
|
|
|
TEST_F(ConsoleTest, execute)
|
|
{
|
|
Con::evaluate("function testScriptExecuteFunction(%a,%b) {return %a SPC %b;}\nfunction testScriptExecuteFunction(%a,%b,%this) {return %a SPC %b;}\r\n", false, "testExecute");
|
|
|
|
U32 startStackPos = Con::getFrameStack().size();
|
|
U32 startStringStackPos = STR.mStart;
|
|
|
|
// const char* versions of execute should maintain stack
|
|
const char *argv[] = {"testScriptExecuteFunction", "1", "2"};
|
|
const char *argvObject[] = {"testScriptExecuteFunction", "1", "2", ""};
|
|
ConsoleValue returnValue = Con::execute(3, argv);
|
|
|
|
EXPECT_STREQ(returnValue, "1 2") <<
|
|
"execute should return 1 2";
|
|
|
|
EXPECT_EQ(Con::getFrameStack().size(), startStackPos) <<
|
|
"execute should restore stack";
|
|
|
|
returnValue = Con::execute(4, argvObject);
|
|
|
|
EXPECT_STREQ(returnValue, "1 2") <<
|
|
"execute should return 1 2";
|
|
|
|
EXPECT_EQ(Con::getFrameStack().size(), startStackPos) <<
|
|
"execute should restore stack";
|
|
}
|