From 59d38a4119471cd68db70ece12d5dd43f4b6e026 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Fri, 24 Sep 2021 17:11:50 +0200 Subject: [PATCH] Add test for extended object creation/deletion. --- test/demo/main.gd | 1 + test/src/example.cpp | 13 +++++++++++++ test/src/example.h | 12 ++++++++++++ test/src/register_types.cpp | 1 + 4 files changed, 27 insertions(+) diff --git a/test/demo/main.gd b/test/demo/main.gd index afda267a..81f45265 100644 --- a/test/demo/main.gd +++ b/test/demo/main.gd @@ -10,6 +10,7 @@ func _ready(): ($Example as Example).simple_const_func() # Force use of ptrcall prints("returned", $Example.return_something("some string")) prints("returned const", $Example.return_something_const()) + prints("returned ref", $Example.return_extended_ref()) prints("vararg args", $Example.varargs_func("some", "arguments", "to", "test")) # Use properties. diff --git a/test/src/example.cpp b/test/src/example.cpp index 43ad8b38..e3ed3164 100644 --- a/test/src/example.cpp +++ b/test/src/example.cpp @@ -38,12 +38,21 @@ using namespace godot; +ExampleRef::ExampleRef() { + UtilityFunctions::print("ExampleRef created."); +} + +ExampleRef::~ExampleRef() { + UtilityFunctions::print("ExampleRef destroyed."); +} + void Example::_bind_methods() { // Methods. ClassDB::bind_method(D_METHOD("simple_func"), &Example::simple_func); ClassDB::bind_method(D_METHOD("simple_const_func"), &Example::simple_const_func); ClassDB::bind_method(D_METHOD("return_something"), &Example::return_something); ClassDB::bind_method(D_METHOD("return_something_const"), &Example::return_something_const); + ClassDB::bind_method(D_METHOD("return_extended_ref"), &Example::return_extended_ref); { MethodInfo mi; @@ -94,6 +103,10 @@ Viewport *Example::return_something_const() const { return nullptr; } +ExampleRef *Example::return_extended_ref() const { + return memnew(ExampleRef()); +} + Variant Example::varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error) { UtilityFunctions::print("Varargs called with ", String::num(arg_count), " arguments"); return arg_count; diff --git a/test/src/example.h b/test/src/example.h index 6db6f9bc..e72051b5 100644 --- a/test/src/example.h +++ b/test/src/example.h @@ -39,6 +39,17 @@ using namespace godot; +class ExampleRef : public RefCounted { + GDCLASS(ExampleRef, RefCounted); + +protected: + static void _bind_methods() {} + +public: + ExampleRef(); + ~ExampleRef(); +}; + class Example : public Control { GDCLASS(Example, Control); @@ -64,6 +75,7 @@ public: void simple_const_func() const; String return_something(const String &base); Viewport *return_something_const() const; + ExampleRef *return_extended_ref() const; Variant varargs_func(const Variant **args, GDNativeInt arg_count, GDNativeCallError &error); void emit_custom_signal(const String &name, int value); diff --git a/test/src/register_types.cpp b/test/src/register_types.cpp index 35f2693e..52e5b57b 100644 --- a/test/src/register_types.cpp +++ b/test/src/register_types.cpp @@ -41,6 +41,7 @@ using namespace godot; void register_example_types() { + ClassDB::register_class(); ClassDB::register_class(); }