Add unit test for scripting features

This commit is contained in:
Wojtek Figat
2022-12-30 00:08:04 +01:00
parent 0e1da59f0c
commit a5e7ff6fc0
4 changed files with 88 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
#include "TestScripting.h"
#include "Engine/Scripting/Scripting.h"
#include <ThirdParty/catch2/catch.hpp>
TestClassNative::TestClassNative(const SpawnParams& params)
: ScriptingObject(params)
{
}
TEST_CASE("Scripting")
{
SECTION("Test Class")
{
// Test native class
ScriptingTypeHandle type = Scripting::FindScriptingType("FlaxEngine.TestClassNative");
CHECK(type == TestClassNative::TypeInitializer);
ScriptingObject* object = Scripting::NewObject(type.GetType().ManagedClass);
CHECK(object);
CHECK(object->Is<TestClassNative>());
TestClassNative* testClass = (TestClassNative*)object;
CHECK(testClass->SimpleField == 1);
int32 methodResult = testClass->Test(TEXT("123"));
CHECK(methodResult == 3);
// Test managed class
type = Scripting::FindScriptingType("FlaxEngine.TestClassManaged");
CHECK(type);
object = Scripting::NewObject(type.GetType().ManagedClass);
CHECK(object);
CHECK(object->Is<TestClassNative>());
testClass = (TestClassNative*)object;
MObject* managed = testClass->GetOrCreateManagedInstance(); // Ensure to create C# object and run it's ctor
CHECK(managed);
CHECK(testClass->SimpleField == 2);
methodResult = testClass->Test(TEXT("123"));
CHECK(methodResult == 6);
}
}

View File

@@ -0,0 +1,23 @@
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
#if FLAX_TESTS
namespace FlaxEngine
{
/// <summary>
/// Test class.
/// </summary>
public class TestClassManaged : TestClassNative
{
TestClassManaged()
{
SimpleField = 2;
}
/// <inheritdoc />
public override int Test(string str)
{
return str.Length + base.Test(str);
}
}
}
#endif

View File

@@ -0,0 +1,23 @@
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/ISerializable.h"
#include "Engine/Scripting/ScriptingObject.h"
// Test class.
API_CLASS() class TestClassNative : public ScriptingObject, public ISerializable
{
API_AUTO_SERIALIZATION();
DECLARE_SCRIPTING_TYPE(TestClassNative);
public:
// Test value
API_FIELD() int32 SimpleField = 1;
// Test virtual method
API_FUNCTION() virtual int32 Test(const String& str)
{
return str.Length();
}
};

View File

@@ -45,6 +45,8 @@ public class FlaxTestsTarget : FlaxEditor
{
base.SetupTargetEnvironment(options);
options.ScriptingAPI.Defines.Add("FLAX_TESTS");
// Produce console program
options.LinkEnv.LinkAsConsoleProgram = true;
}