summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/project/example.gdextension2
-rw-r--r--test/project/main.gd50
-rw-r--r--test/project/project.godot2
-rw-r--r--test/src/example.cpp62
-rw-r--r--test/src/example.h15
5 files changed, 129 insertions, 2 deletions
diff --git a/test/project/example.gdextension b/test/project/example.gdextension
index 90fd53a..99c1746 100644
--- a/test/project/example.gdextension
+++ b/test/project/example.gdextension
@@ -1,7 +1,7 @@
[configuration]
entry_symbol = "example_library_init"
-compatibility_minimum = 4.1
+compatibility_minimum = "4.1"
[libraries]
diff --git a/test/project/main.gd b/test/project/main.gd
index cedd512..715b13e 100644
--- a/test/project/main.gd
+++ b/test/project/main.gd
@@ -23,6 +23,10 @@ func _ready():
# Property list.
example.property_from_list = Vector3(100, 200, 300)
assert_equal(example.property_from_list, Vector3(100, 200, 300))
+ var prop_list = example.get_property_list()
+ for prop_info in prop_list:
+ if prop_info['name'] == 'mouse_filter':
+ assert_equal(prop_info['usage'], PROPERTY_USAGE_NO_EDITOR)
# Call simple methods.
example.simple_func()
@@ -86,6 +90,9 @@ func _ready():
assert_equal(example.test_string_is_fourty_two("blah"), false)
assert_equal(example.test_string_is_fourty_two("fourty two"), true)
+ # String::resize().
+ assert_equal(example.test_string_resize("What"), "What!?")
+
# PackedArray iterators
assert_equal(example.test_vector_ops(), 105)
@@ -94,6 +101,49 @@ func _ready():
example.group_subgroup_custom_position = Vector2(50, 50)
assert_equal(example.group_subgroup_custom_position, Vector2(50, 50))
+ # Test Object::cast_to<>() and that correct wrappers are being used.
+ var control = Control.new()
+ var sprite = Sprite2D.new()
+ var example_ref = ExampleRef.new()
+
+ assert_equal(example.test_object_cast_to_node(control), true)
+ assert_equal(example.test_object_cast_to_control(control), true)
+ assert_equal(example.test_object_cast_to_example(control), false)
+
+ assert_equal(example.test_object_cast_to_node(example), true)
+ assert_equal(example.test_object_cast_to_control(example), true)
+ assert_equal(example.test_object_cast_to_example(example), true)
+
+ assert_equal(example.test_object_cast_to_node(sprite), true)
+ assert_equal(example.test_object_cast_to_control(sprite), false)
+ assert_equal(example.test_object_cast_to_example(sprite), false)
+
+ assert_equal(example.test_object_cast_to_node(example_ref), false)
+ assert_equal(example.test_object_cast_to_control(example_ref), false)
+ assert_equal(example.test_object_cast_to_example(example_ref), false)
+
+ control.queue_free()
+ sprite.queue_free()
+
+ # Test conversions to and from Variant.
+ assert_equal(example.test_variant_vector2i_conversion(Vector2i(1, 1)), Vector2i(1, 1))
+ assert_equal(example.test_variant_vector2i_conversion(Vector2(1.0, 1.0)), Vector2i(1, 1))
+ assert_equal(example.test_variant_int_conversion(10), 10)
+ assert_equal(example.test_variant_int_conversion(10.0), 10)
+ assert_equal(example.test_variant_float_conversion(10.0), 10.0)
+ assert_equal(example.test_variant_float_conversion(10), 10.0)
+
+ # Test that ptrcalls from GDExtension to the engine are correctly encoding Object and RefCounted.
+ var new_node = Node.new()
+ example.test_add_child(new_node)
+ assert_equal(new_node.get_parent(), example)
+
+ var new_tileset = TileSet.new()
+ var new_tilemap = TileMap.new()
+ example.test_set_tileset(new_tilemap, new_tileset)
+ assert_equal(new_tilemap.tile_set, new_tileset)
+ new_tilemap.queue_free()
+
# Constants.
assert_equal(Example.FIRST, 0)
assert_equal(Example.ANSWER_TO_EVERYTHING, 42)
diff --git a/test/project/project.godot b/test/project/project.godot
index eafcad3..3ed679b 100644
--- a/test/project/project.godot
+++ b/test/project/project.godot
@@ -12,7 +12,7 @@ config_version=5
config/name="GDExtension Test Project"
run/main_scene="res://main.tscn"
-config/features=PackedStringArray("4.1")
+config/features=PackedStringArray("4.2")
config/icon="res://icon.png"
[native_extensions]
diff --git a/test/src/example.cpp b/test/src/example.cpp
index fb47dd8..dc471dd 100644
--- a/test/src/example.cpp
+++ b/test/src/example.cpp
@@ -117,6 +117,14 @@ bool Example::_property_get_revert(const StringName &p_name, Variant &r_property
}
};
+void Example::_validate_property(PropertyInfo &p_property) const {
+ String name = p_property.name;
+ // Test hiding the "mouse_filter" property from the editor.
+ if (name == "mouse_filter") {
+ p_property.usage = PROPERTY_USAGE_NO_EDITOR;
+ }
+}
+
void Example::_bind_methods() {
// Methods.
ClassDB::bind_method(D_METHOD("simple_func"), &Example::simple_func);
@@ -139,8 +147,20 @@ void Example::_bind_methods() {
ClassDB::bind_method(D_METHOD("test_string_ops"), &Example::test_string_ops);
ClassDB::bind_method(D_METHOD("test_str_utility"), &Example::test_str_utility);
ClassDB::bind_method(D_METHOD("test_string_is_fourty_two"), &Example::test_string_is_fourty_two);
+ ClassDB::bind_method(D_METHOD("test_string_resize"), &Example::test_string_resize);
ClassDB::bind_method(D_METHOD("test_vector_ops"), &Example::test_vector_ops);
+ ClassDB::bind_method(D_METHOD("test_object_cast_to_node", "object"), &Example::test_object_cast_to_node);
+ ClassDB::bind_method(D_METHOD("test_object_cast_to_control", "object"), &Example::test_object_cast_to_control);
+ ClassDB::bind_method(D_METHOD("test_object_cast_to_example", "object"), &Example::test_object_cast_to_example);
+
+ ClassDB::bind_method(D_METHOD("test_variant_vector2i_conversion", "variant"), &Example::test_variant_vector2i_conversion);
+ ClassDB::bind_method(D_METHOD("test_variant_int_conversion", "variant"), &Example::test_variant_int_conversion);
+ ClassDB::bind_method(D_METHOD("test_variant_float_conversion", "variant"), &Example::test_variant_float_conversion);
+
+ ClassDB::bind_method(D_METHOD("test_add_child", "node"), &Example::test_add_child);
+ ClassDB::bind_method(D_METHOD("test_set_tileset", "tilemap", "tileset"), &Example::test_set_tileset);
+
ClassDB::bind_method(D_METHOD("test_bitfield", "flags"), &Example::test_bitfield);
ClassDB::bind_method(D_METHOD("test_rpc", "value"), &Example::test_rpc);
@@ -304,6 +324,16 @@ bool Example::test_string_is_fourty_two(const String &p_string) const {
return strcmp(p_string.utf8().ptr(), "fourty two") == 0;
}
+String Example::test_string_resize(String p_string) const {
+ int orig_len = p_string.length();
+ p_string.resize(orig_len + 3);
+ char32_t *data = p_string.ptrw();
+ data[orig_len + 0] = '!';
+ data[orig_len + 1] = '?';
+ data[orig_len + 2] = '\0';
+ return p_string;
+}
+
int Example::test_vector_ops() const {
PackedInt32Array arr;
arr.push_back(10);
@@ -348,6 +378,38 @@ Example *Example::test_node_argument(Example *p_node) const {
return p_node;
}
+bool Example::test_object_cast_to_node(Object *p_object) const {
+ return Object::cast_to<Node>(p_object) != nullptr;
+}
+
+bool Example::test_object_cast_to_control(Object *p_object) const {
+ return Object::cast_to<Control>(p_object) != nullptr;
+}
+
+bool Example::test_object_cast_to_example(Object *p_object) const {
+ return Object::cast_to<Example>(p_object) != nullptr;
+}
+
+Vector2i Example::test_variant_vector2i_conversion(const Variant &p_variant) const {
+ return p_variant;
+}
+
+int Example::test_variant_int_conversion(const Variant &p_variant) const {
+ return p_variant;
+}
+
+float Example::test_variant_float_conversion(const Variant &p_variant) const {
+ return p_variant;
+}
+
+void Example::test_add_child(Node *p_node) {
+ add_child(p_node);
+}
+
+void Example::test_set_tileset(TileMap *p_tilemap, const Ref<TileSet> &p_tileset) const {
+ p_tilemap->set_tileset(p_tileset);
+}
+
BitField<Example::Flags> Example::test_bitfield(BitField<Flags> flags) {
return flags;
}
diff --git a/test/src/example.h b/test/src/example.h
index a84efed..49d103e 100644
--- a/test/src/example.h
+++ b/test/src/example.h
@@ -18,6 +18,8 @@
#include <godot_cpp/classes/global_constants.hpp>
#include <godot_cpp/classes/image.hpp>
#include <godot_cpp/classes/input_event_key.hpp>
+#include <godot_cpp/classes/tile_map.hpp>
+#include <godot_cpp/classes/tile_set.hpp>
#include <godot_cpp/classes/viewport.hpp>
#include <godot_cpp/core/binder_common.hpp>
@@ -63,6 +65,7 @@ protected:
void _get_property_list(List<PropertyInfo> *p_list) const;
bool _property_can_revert(const StringName &p_name) const;
bool _property_get_revert(const StringName &p_name, Variant &r_property) const;
+ void _validate_property(PropertyInfo &p_property) const;
String _to_string() const;
@@ -118,8 +121,20 @@ public:
String test_string_ops() const;
String test_str_utility() const;
bool test_string_is_fourty_two(const String &p_str) const;
+ String test_string_resize(String p_original) const;
int test_vector_ops() const;
+ bool test_object_cast_to_node(Object *p_object) const;
+ bool test_object_cast_to_control(Object *p_object) const;
+ bool test_object_cast_to_example(Object *p_object) const;
+
+ Vector2i test_variant_vector2i_conversion(const Variant &p_variant) const;
+ int test_variant_int_conversion(const Variant &p_variant) const;
+ float test_variant_float_conversion(const Variant &p_variant) const;
+
+ void test_add_child(Node *p_node);
+ void test_set_tileset(TileMap *p_tilemap, const Ref<TileSet> &p_tileset) const;
+
BitField<Flags> test_bitfield(BitField<Flags> flags);
// RPC