|
1 | 1 | from enum import Enum |
2 | 2 | import clodotest |
3 | | -from clodotest import assert_eq, assert_isinstance, assert_issubclass |
| 3 | +from clodotest import assert_eq, assert_ne, assert_isinstance, assert_issubclass |
4 | 4 |
|
5 | 5 | import godot |
6 | 6 |
|
7 | 7 |
|
| 8 | +def test_eq_operator(): |
| 9 | + from godot.classes import Node |
| 10 | + |
| 11 | + node1 = Node.new() |
| 12 | + node2 = Node.new() |
| 13 | + try: |
| 14 | + assert_ne(node1, None) |
| 15 | + assert_ne(node1, 42) |
| 16 | + |
| 17 | + node1.name = "node1" |
| 18 | + node2.name = "node2" |
| 19 | + |
| 20 | + assert_ne(node1, node2) |
| 21 | + assert_eq(node1, node1) |
| 22 | + |
| 23 | + node1.add_child(node2) |
| 24 | + node2b = node1.get_child(0) |
| 25 | + assert_eq(node2, node2b) |
| 26 | + |
| 27 | + finally: |
| 28 | + node2.free() |
| 29 | + node1.free() |
| 30 | + |
| 31 | + |
8 | 32 | def test_bad_meth_to_create_non_refcounted_object(): |
9 | 33 | from godot.classes import Node2D |
10 | 34 |
|
@@ -61,11 +85,120 @@ def test_create_non_refcounted_object(): |
61 | 85 | node.free() |
62 | 86 |
|
63 | 87 |
|
64 | | -def test_method(): |
65 | | - clodotest.skip("TODO") |
| 88 | +@clodotest.parametrize( |
| 89 | + "kind", |
| 90 | + [ |
| 91 | + "normal_with_return_value", |
| 92 | + "normal_with_param", |
| 93 | + "normal_with_named_param", |
| 94 | + "inherited", |
| 95 | + "const", |
| 96 | + "virtual", |
| 97 | + "static", |
| 98 | + "vararg", |
| 99 | + ], |
| 100 | +) |
| 101 | +def test_method(kind: str): |
| 102 | + from godot.classes import Node, JSON |
| 103 | + |
| 104 | + node = Node.new() |
| 105 | + try: |
| 106 | + match kind: |
| 107 | + case "normal_with_return_value": |
| 108 | + assert_isinstance(node.get_tree_string(), godot.GDString) |
| 109 | + assert_eq(node.find_child("dummy"), None) # Return None or `Node` instance |
| 110 | + node2 = Node.new() |
| 111 | + try: |
| 112 | + node2.name = "child" |
| 113 | + node.add_child(node2) |
| 114 | + assert_eq(node.get_child(0), node2) |
| 115 | + finally: |
| 116 | + node2.free() |
| 117 | + |
| 118 | + case "normal_with_param": |
| 119 | + assert_isinstance(node.is_ancestor_of(node), bool) |
| 120 | + |
| 121 | + case "normal_with_named_param": |
| 122 | + clodotest.skip(reason="TODO: named param not supported yet") |
| 123 | + assert_isinstance(node.is_ancestor_of(node=node), bool) |
66 | 124 |
|
| 125 | + case "inherited": |
| 126 | + # `get_class` is defined in `Object` |
| 127 | + assert_isinstance(node.get_class(), godot.GDString) |
67 | 128 |
|
68 | | -def test_property(): |
| 129 | + case "const": |
| 130 | + assert_isinstance(node.can_process(), bool) |
| 131 | + |
| 132 | + case "virtual": |
| 133 | + clodotest.skip(reason="TODO: find a virtual method overwritten by a subclass ?") |
| 134 | + |
| 135 | + case "static": |
| 136 | + assert_isinstance(JSON.stringify(42), godot.GDString) |
| 137 | + |
| 138 | + case "vararg": |
| 139 | + assert_isinstance(node.call("is_ancestor_of", node), bool) |
| 140 | + |
| 141 | + case unknown: |
| 142 | + assert False, unknown |
| 143 | + |
| 144 | + finally: |
| 145 | + node.free() |
| 146 | + |
| 147 | + |
| 148 | +@clodotest.parametrize( |
| 149 | + "kind", |
| 150 | + [ |
| 151 | + "scalar", |
| 152 | + "enum", |
| 153 | + "class", |
| 154 | + ], |
| 155 | +) |
| 156 | +def test_property(kind: str): |
| 157 | + from godot.classes import Node |
| 158 | + |
| 159 | + node = Node.new() |
| 160 | + try: |
| 161 | + match kind: |
| 162 | + case "scalar": |
| 163 | + assert_eq(node.name, godot.StringName("")) |
| 164 | + |
| 165 | + node.name = godot.StringName("foo") |
| 166 | + assert_eq(node.name, godot.StringName("foo")) |
| 167 | + |
| 168 | + node.name = "bar" |
| 169 | + assert_eq(node.name, godot.StringName("bar")) |
| 170 | + |
| 171 | + case "enum": |
| 172 | + clodotest.skip( |
| 173 | + reason="TODO: enum currently return `int` instead of `Enum` instance" |
| 174 | + ) |
| 175 | + assert_eq( |
| 176 | + node.physics_interpolation_mode, |
| 177 | + node.PhysicsInterpolationMode.PHYSICS_INTERPOLATION_MODE_INHERIT, |
| 178 | + ) |
| 179 | + node.physics_interpolation_mode = ( |
| 180 | + node.PhysicsInterpolationMode.PHYSICS_INTERPOLATION_MODE_ON |
| 181 | + ) |
| 182 | + assert_eq( |
| 183 | + node.physics_interpolation_mode, |
| 184 | + node.PhysicsInterpolationMode.PHYSICS_INTERPOLATION_MODE_ON, |
| 185 | + ) |
| 186 | + |
| 187 | + case "class": |
| 188 | + node2 = Node.new() |
| 189 | + assert_eq(node2.owner, None) |
| 190 | + try: |
| 191 | + node.add_child(node2) |
| 192 | + assert_eq(node2.owner, None) |
| 193 | + node2.owner = node |
| 194 | + assert_eq(node2.owner, node) |
| 195 | + finally: |
| 196 | + node2.free() |
| 197 | + |
| 198 | + case unknown: |
| 199 | + assert False, unknown |
| 200 | + finally: |
| 201 | + node.free() |
69 | 202 | clodotest.skip("TODO") |
70 | 203 |
|
71 | 204 |
|
|
0 commit comments