diff --git a/Source/Engine/Tests/TestScripting.cpp b/Source/Engine/Tests/TestScripting.cpp new file mode 100644 index 000000000..ecea80db7 --- /dev/null +++ b/Source/Engine/Tests/TestScripting.cpp @@ -0,0 +1,40 @@ +// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved. + +#include "TestScripting.h" +#include "Engine/Scripting/Scripting.h" +#include + +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* 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()); + 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); + } +} diff --git a/Source/Engine/Tests/TestScripting.cs b/Source/Engine/Tests/TestScripting.cs new file mode 100644 index 000000000..6abc667a1 --- /dev/null +++ b/Source/Engine/Tests/TestScripting.cs @@ -0,0 +1,23 @@ +// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved. + +#if FLAX_TESTS +namespace FlaxEngine +{ + /// + /// Test class. + /// + public class TestClassManaged : TestClassNative + { + TestClassManaged() + { + SimpleField = 2; + } + + /// + public override int Test(string str) + { + return str.Length + base.Test(str); + } + } +} +#endif diff --git a/Source/Engine/Tests/TestScripting.h b/Source/Engine/Tests/TestScripting.h new file mode 100644 index 000000000..06b5dddb5 --- /dev/null +++ b/Source/Engine/Tests/TestScripting.h @@ -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(); + } +}; diff --git a/Source/FlaxTests.Build.cs b/Source/FlaxTests.Build.cs index 1c02439f7..06bc06d23 100644 --- a/Source/FlaxTests.Build.cs +++ b/Source/FlaxTests.Build.cs @@ -45,6 +45,8 @@ public class FlaxTestsTarget : FlaxEditor { base.SetupTargetEnvironment(options); + options.ScriptingAPI.Defines.Add("FLAX_TESTS"); + // Produce console program options.LinkEnv.LinkAsConsoleProgram = true; }