Files
MovementTests/addons/gdUnit4/src/core/GdUnitSignals.gd
Minimata caeae26a09
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 22s
Create tag and build when new code gets to main / Test (push) Failing after 2m10s
Create tag and build when new code gets to main / Export (push) Has been skipped
fixed camera and sword animation issue and upgraded to Godot 4.6
2026-01-27 17:47:19 +01:00

119 lines
3.9 KiB
GDScript

class_name GdUnitSignals
extends RefCounted
## Singleton class that handles GdUnit's signal communication.[br]
## [br]
## This class manages all signals used to communicate test events, discovery, and status changes.[br]
## It uses a singleton pattern stored in Engine metadata to ensure a single instance.[br]
## [br]
## Signals are grouped by purpose:[br]
## - Client connection handling[br]
## - Test execution events[br]
## - Test discovery events[br]
## - Settings and status updates[br]
## [br]
## Example usage:[br]
## [codeblock]
## # Connect to test discovery
## GdUnitSignals.instance().gdunit_test_discovered.connect(self._on_test_discovered)
##
## # Emit test event
## GdUnitSignals.instance().gdunit_event.emit(test_event)
## [/codeblock]
## Emitted when a client connects to the GdUnit server.[br]
## [param client_id] The ID of the connected client.
@warning_ignore("unused_signal")
signal gdunit_client_connected(client_id: int)
## Emitted when a client disconnects from the GdUnit server.[br]
## [param client_id] The ID of the disconnected client.
@warning_ignore("unused_signal")
signal gdunit_client_disconnected(client_id: int)
## Emitted when a the user stops (terminates) the current test session
@warning_ignore("unused_signal")
signal gdunit_test_session_terminate()
## Emitted when a test execution event occurs.[br]
## [param event] The test event containing details about test execution.
@warning_ignore("unused_signal")
signal gdunit_event(event: GdUnitEvent)
## Emitted for test debug events during execution.[br]
## [param event] The debug event containing test execution details.
@warning_ignore("unused_signal")
signal gdunit_event_debug(event: GdUnitEvent)
## Emitted to broadcast a general message.[br]
## [param message] The message to broadcast.
@warning_ignore("unused_signal")
signal gdunit_message(message: String)
## Emitted to update test failure status.[br]
## [param is_failed] Whether the test has failed.
@warning_ignore("unused_signal")
signal gdunit_set_test_failed(is_failed: bool)
## Emitted when a GdUnit setting changes.[br]
## [param property] The property that was changed.
@warning_ignore("unused_signal")
signal gdunit_settings_changed(property: GdUnitProperty)
## Called when a new test case is discovered during the discovery process.
## Custom implementations should connect to this signal and store the discovered test case as needed.[br]
## [param test_case] The discovered test case instance to be processed.
@warning_ignore("unused_signal")
signal gdunit_test_discover_added(test_case: GdUnitTestCase)
## Emitted when a test case is deleted.[br]
## [param test_case] The test case that was deleted.
@warning_ignore("unused_signal")
signal gdunit_test_discover_deleted(test_case: GdUnitTestCase)
## Emitted when a test case is modified.[br]
## [param test_case] The test case that was modified.
@warning_ignore("unused_signal")
signal gdunit_test_discover_modified(test_case: GdUnitTestCase)
const META_KEY := "GdUnitSignals"
## Returns the singleton instance of GdUnitSignals.[br]
## Creates a new instance if none exists.[br]
## [br]
## Returns: The GdUnitSignals singleton instance.
static func instance() -> GdUnitSignals:
if Engine.has_meta(META_KEY):
return Engine.get_meta(META_KEY)
var instance_ := GdUnitSignals.new()
Engine.set_meta(META_KEY, instance_)
return instance_
## Cleans up the singleton instance and disconnects all signals.[br]
## [br]
## Should be called when GdUnit is shutting down or needs to reset.[br]
## Ensures proper cleanup of signal connections and resources.
static func dispose() -> void:
var signals := instance()
# cleanup connected signals
for signal_ in signals.get_signal_list():
@warning_ignore("unsafe_cast")
for connection in signals.get_signal_connection_list(signal_["name"] as StringName):
var _signal: Signal = connection["signal"]
var _callable: Callable = connection["callable"]
_signal.disconnect(_callable)
signals = null
Engine.remove_meta(META_KEY)