Skip to content

Commit 6fa39b0

Browse files
committed
add a test for _input, rename some stuff in TestContext
1 parent ad4b4c6 commit 6fa39b0

File tree

7 files changed

+86
-14
lines changed

7 files changed

+86
-14
lines changed

godot-codegen/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ const SELECTED_CLASSES: &[&str] = &[
278278
"Image",
279279
"ImageTextureLayered",
280280
"Input",
281+
"InputEvent",
282+
"InputEventAction",
281283
"Label",
282284
"MainLoop",
283285
"Marker2D",
@@ -303,4 +305,6 @@ const SELECTED_CLASSES: &[&str] = &[
303305
"TextureLayered",
304306
"Time",
305307
"Timer",
308+
"Window",
309+
"Viewport",
306310
];

itest/godot/TestRunner.gd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ func _ready():
3838
gdscript_tests,
3939
gdscript_suites.size(),
4040
allow_focus,
41+
get_tree().root,
4142
self,
43+
get_tree()
4244
)
4345

4446
var exit_code: int = 0 if success else 1

itest/rust/src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
55
*/
66

7-
use godot::engine::{Engine, Node};
7+
use godot::engine::{Engine, Node, Window};
88
use godot::init::{gdextension, ExtensionLibrary};
99
use godot::obj::Gd;
10+
use godot::prelude::SceneTree;
1011
use godot::sys;
1112

1213
mod array_test;
@@ -103,7 +104,9 @@ fn collect_rust_tests() -> (Vec<RustTestCase>, usize, bool) {
103104
}
104105

105106
pub struct TestContext {
106-
scene_tree: Gd<Node>,
107+
_scene_tree: Gd<SceneTree>,
108+
root_node: Gd<Window>,
109+
test_node: Gd<Node>,
107110
}
108111

109112
#[derive(Copy, Clone)]

itest/rust/src/node_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ fn node_scene_tree() {
8585
// FIXME: call_group() crashes
8686
#[itest(skip)]
8787
fn node_call_group(ctx: &TestContext) {
88-
let mut node = ctx.scene_tree.share();
88+
let mut node = ctx.test_node.share();
8989
let mut tree = node.get_tree().unwrap();
9090

9191
node.add_to_group("group".into(), true);

itest/rust/src/object_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ fn object_call_with_args() {
614614
fn object_get_scene_tree(ctx: &TestContext) {
615615
let node = Node3D::new_alloc();
616616

617-
let mut tree = ctx.scene_tree.share();
617+
let mut tree = ctx.test_node.share();
618618
tree.add_child(node.upcast(), false, InternalMode::INTERNAL_MODE_DISABLED);
619619

620620
let count = tree.get_child_count(false);

itest/rust/src/runner.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ use std::time::{Duration, Instant};
88

99
use godot::bind::{godot_api, GodotClass};
1010
use godot::builtin::{ToVariant, Variant, VariantArray};
11-
use godot::engine::Node;
11+
use godot::engine::{Node, Window};
1212
use godot::obj::Gd;
13+
use godot::prelude::SceneTree;
1314

1415
use crate::{RustTestCase, TestContext};
1516

@@ -31,7 +32,9 @@ impl IntegrationTests {
3132
gdscript_tests: VariantArray,
3233
gdscript_file_count: i64,
3334
allow_focus: bool,
34-
scene_tree: Gd<Node>,
35+
root_node: Gd<Window>,
36+
test_node: Gd<Node>,
37+
scene_tree: Gd<SceneTree>,
3538
) -> bool {
3639
println!("{}Run{} Godot integration tests...", FMT_CYAN_BOLD, FMT_END);
3740

@@ -54,7 +57,7 @@ impl IntegrationTests {
5457
}
5558

5659
let clock = Instant::now();
57-
self.run_rust_tests(rust_tests, scene_tree);
60+
self.run_rust_tests(rust_tests, root_node, test_node, scene_tree);
5861
let rust_time = clock.elapsed();
5962
let gdscript_time = if !focus_run {
6063
self.run_gdscript_tests(gdscript_tests);
@@ -66,8 +69,18 @@ impl IntegrationTests {
6669
self.conclude(rust_time, gdscript_time, allow_focus)
6770
}
6871

69-
fn run_rust_tests(&mut self, tests: Vec<RustTestCase>, scene_tree: Gd<Node>) {
70-
let ctx = TestContext { scene_tree };
72+
fn run_rust_tests(
73+
&mut self,
74+
tests: Vec<RustTestCase>,
75+
root_node: Gd<Window>,
76+
test_node: Gd<Node>,
77+
scene_tree: Gd<SceneTree>,
78+
) {
79+
let ctx = TestContext {
80+
_scene_tree: scene_tree,
81+
root_node,
82+
test_node,
83+
};
7184

7285
let mut last_file = None;
7386
for test in tests {

itest/rust/src/virtual_methods_test.rs

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ use crate::TestContext;
1010
use godot::bind::{godot_api, GodotClass};
1111
use godot::builtin::GodotString;
1212
use godot::engine::node::InternalMode;
13-
use godot::engine::{Node, Node2D, Node2DVirtual, RefCounted, RefCountedVirtual};
13+
use godot::engine::{
14+
InputEvent, InputEventAction, Node, Node2D, Node2DVirtual, RefCounted, RefCountedVirtual,
15+
};
1416
use godot::obj::{Base, Gd, Share};
1517
use godot::test::itest;
1618

@@ -91,6 +93,30 @@ impl Node2DVirtual for TreeVirtualTest {
9193
}
9294
}
9395

96+
#[derive(GodotClass, Debug)]
97+
#[class(base=Node2D)]
98+
struct InputVirtualTest {
99+
#[base]
100+
base: Base<Node2D>,
101+
event: Option<Gd<InputEvent>>,
102+
}
103+
104+
#[godot_api]
105+
impl Node2DVirtual for InputVirtualTest {
106+
fn init(base: Base<Node2D>) -> Self {
107+
InputVirtualTest { base, event: None }
108+
}
109+
110+
fn input(&mut self, event: Gd<InputEvent>) {
111+
println!("nya");
112+
self.event = Some(event);
113+
}
114+
115+
fn process(&mut self, delta: f64) {
116+
println!("proc! {delta}");
117+
}
118+
}
119+
94120
// ----------------------------------------------------------------------------------------------------------------------------------------------
95121

96122
#[itest]
@@ -104,7 +130,7 @@ fn test_ready(test_context: &TestContext) {
104130
assert_eq!(obj.bind().implementation_value, 0);
105131

106132
// Add to scene tree
107-
let mut test_node = test_context.scene_tree.share();
133+
let mut test_node = test_context.test_node.share();
108134
test_node.add_child(
109135
obj.share().upcast(),
110136
false,
@@ -120,7 +146,7 @@ fn test_ready_multiple_fires(test_context: &TestContext) {
120146
let obj = Gd::<ReadyVirtualTest>::new_default();
121147
assert_eq!(obj.bind().implementation_value, 0);
122148

123-
let mut test_node = test_context.scene_tree.share();
149+
let mut test_node = test_context.test_node.share();
124150

125151
// Add to scene tree
126152
test_node.add_child(
@@ -149,7 +175,7 @@ fn test_ready_request_ready(test_context: &TestContext) {
149175
let obj = Gd::<ReadyVirtualTest>::new_default();
150176
assert_eq!(obj.bind().implementation_value, 0);
151177

152-
let mut test_node = test_context.scene_tree.share();
178+
let mut test_node = test_context.test_node.share();
153179

154180
// Add to scene tree
155181
test_node.add_child(
@@ -192,7 +218,7 @@ fn test_tree_enters_exits(test_context: &TestContext) {
192218
let obj = Gd::<TreeVirtualTest>::new_default();
193219
assert_eq!(obj.bind().tree_enters, 0);
194220
assert_eq!(obj.bind().tree_exits, 0);
195-
let mut test_node = test_context.scene_tree.share();
221+
let mut test_node = test_context.test_node.share();
196222

197223
// Add to scene tree
198224
test_node.add_child(
@@ -215,3 +241,27 @@ fn test_tree_enters_exits(test_context: &TestContext) {
215241
assert_eq!(obj.bind().tree_enters, 2);
216242
assert_eq!(obj.bind().tree_exits, 1);
217243
}
244+
245+
#[itest]
246+
fn test_input_event(test_context: &TestContext) {
247+
let obj = Gd::<InputVirtualTest>::new_default();
248+
assert_eq!(obj.bind().event, None);
249+
250+
// Add to scene tree
251+
test_context.test_node.share().add_child(
252+
obj.share().upcast(),
253+
false,
254+
InternalMode::INTERNAL_MODE_DISABLED,
255+
);
256+
257+
let mut event = InputEventAction::new();
258+
event.set_action("debug".into());
259+
event.set_pressed(true);
260+
261+
test_context
262+
.root_node
263+
.share()
264+
.push_input(event.share().upcast(), false);
265+
266+
assert_eq!(obj.bind().event, Some(event.upcast()));
267+
}

0 commit comments

Comments
 (0)