summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/tests/scripts
diff options
context:
space:
mode:
authorA Thousand Ships <96648715+AThousandShips@users.noreply.github.com>2024-03-13 17:57:22 +0100
committerA Thousand Ships <96648715+AThousandShips@users.noreply.github.com>2024-03-20 20:24:44 +0100
commitdb455e5beef95b067bba0a534848f4555067a42b (patch)
tree8f578a4bf4c4637e0f9d1590986bdad96084f629 /modules/gdscript/tests/scripts
parentfe01776f05b1787b28b4a270d53037a3c25f4ca2 (diff)
downloadredot-engine-db455e5beef95b067bba0a534848f4555067a42b.tar.gz
[Core] Disconnect one-shot signals before calling callbacks
This prevents infinite recursion with one-shot connections emitting themselves
Diffstat (limited to 'modules/gdscript/tests/scripts')
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/emit_after_await.gd12
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/emit_after_await.out1
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.gd22
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.out5
4 files changed, 40 insertions, 0 deletions
diff --git a/modules/gdscript/tests/scripts/runtime/features/emit_after_await.gd b/modules/gdscript/tests/scripts/runtime/features/emit_after_await.gd
new file mode 100644
index 0000000000..21fd526acc
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/emit_after_await.gd
@@ -0,0 +1,12 @@
+# https://github.com/godotengine/godot/issues/89439
+extends Node
+
+signal my_signal
+
+func async_func():
+ await my_signal
+ my_signal.emit()
+
+func test():
+ async_func()
+ my_signal.emit()
diff --git a/modules/gdscript/tests/scripts/runtime/features/emit_after_await.out b/modules/gdscript/tests/scripts/runtime/features/emit_after_await.out
new file mode 100644
index 0000000000..d73c5eb7cd
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/emit_after_await.out
@@ -0,0 +1 @@
+GDTEST_OK
diff --git a/modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.gd b/modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.gd
new file mode 100644
index 0000000000..5c328dcfcd
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.gd
@@ -0,0 +1,22 @@
+# https://github.com/godotengine/godot/issues/89439
+
+signal my_signal
+
+func foo():
+ print("Foo")
+ my_signal.emit()
+
+func bar():
+ print("Bar")
+
+func baz():
+ print("Baz")
+
+func test():
+ @warning_ignore("return_value_discarded")
+ my_signal.connect(foo, CONNECT_ONE_SHOT)
+ @warning_ignore("return_value_discarded")
+ my_signal.connect(bar, CONNECT_ONE_SHOT)
+ @warning_ignore("return_value_discarded")
+ my_signal.connect(baz)
+ my_signal.emit()
diff --git a/modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.out b/modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.out
new file mode 100644
index 0000000000..3399e08878
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/emit_one_shot_is_non_recursive.out
@@ -0,0 +1,5 @@
+GDTEST_OK
+Foo
+Baz
+Bar
+Baz