mirror of
https://github.com/Relintai/gdnative_python.git
synced 2024-11-12 10:25:08 +01:00
102 lines
2.4 KiB
Python
102 lines
2.4 KiB
Python
# TODO:
|
|
# - allow inheritance from GDScript class
|
|
# - overload native method ?
|
|
import pytest
|
|
|
|
from godot import GDString, ResourceLoader, GDScript, PluginScript
|
|
|
|
|
|
def test_native_method(node):
|
|
original_name = node.get_name()
|
|
try:
|
|
node.set_name("foo")
|
|
name = node.get_name()
|
|
assert name == GDString("foo")
|
|
finally:
|
|
node.set_name(original_name)
|
|
|
|
|
|
@pytest.mark.xfail
|
|
def test_overloaded_native_method(node, subnode):
|
|
expected = """
|
|
*
|
|
***
|
|
*****
|
|
|
|
|
"""
|
|
ret = node.print_tree()
|
|
assert ret == expected
|
|
ret = subnode.print_tree()
|
|
assert ret == expected
|
|
|
|
|
|
def test_node_ready_called(node):
|
|
assert node.is_ready_called()
|
|
|
|
|
|
def test_subnode_ready_called(subnode):
|
|
assert subnode.is_ready_called()
|
|
assert subnode.is_sub_ready_called()
|
|
|
|
|
|
def test_method_call(anynode):
|
|
ret = anynode.meth("foo")
|
|
assert ret == GDString("foo")
|
|
|
|
|
|
def test_overloaded_method_call(subnode):
|
|
ret = subnode.overloaded_by_child_meth("foo")
|
|
assert ret == GDString("sub:foo")
|
|
|
|
|
|
def test_property_without_default_value(anynode):
|
|
value = anynode.prop
|
|
assert value is None
|
|
|
|
|
|
def test_property(anynode):
|
|
anynode.prop = 42
|
|
value = anynode.prop
|
|
assert value == 42
|
|
|
|
|
|
@pytest.mark.xfail(reason="default value seems to be only set in .tscn")
|
|
def test_overloaded_property_default_value(pynode, pysubnode):
|
|
# Parent property
|
|
value = pynode.overloaded_by_child_prop
|
|
assert value == "default"
|
|
# Overloaded property
|
|
value = pysubnode.overloaded_by_child_prop
|
|
assert value == "sub:default"
|
|
|
|
|
|
def test_overloaded_property(pynode, pysubnode):
|
|
# Not supported by GDScript
|
|
|
|
# Parent property
|
|
pynode.overloaded_by_child_prop = "foo"
|
|
value = pynode.overloaded_by_child_prop
|
|
assert value == GDString("foo")
|
|
|
|
# Overloaded property
|
|
pysubnode.overloaded_by_child_prop = "foo"
|
|
value = pysubnode.overloaded_by_child_prop
|
|
assert value == GDString("sub:foo")
|
|
|
|
|
|
def test_static_method_call(node):
|
|
value = node.static_meth("foo")
|
|
assert value == GDString("static:foo")
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"path,expected_type", [("res://gdnode.gd", GDScript), ("res://pynode.py", PluginScript)]
|
|
)
|
|
def test_load_script(path, expected_type):
|
|
script = ResourceLoader.load(path, "", False)
|
|
try:
|
|
assert isinstance(script, expected_type)
|
|
assert script.can_instance()
|
|
finally:
|
|
script.free()
|