summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/core/runners/GdUnitTestRunner.gd
diff options
context:
space:
mode:
authorradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
committerradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
commita89e744ed0e8c759caf041a580112365bbfe4303 (patch)
treedd61e320904176995727e86a857d00c90d4933ba /addons/gdUnit4/src/core/runners/GdUnitTestRunner.gd
parent6d53d8cac78250dc888aa49d5f9d4175c6652feb (diff)
escoria updateHEADmain
Diffstat (limited to 'addons/gdUnit4/src/core/runners/GdUnitTestRunner.gd')
-rw-r--r--addons/gdUnit4/src/core/runners/GdUnitTestRunner.gd90
1 files changed, 90 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/core/runners/GdUnitTestRunner.gd b/addons/gdUnit4/src/core/runners/GdUnitTestRunner.gd
new file mode 100644
index 0000000..0fd8fc7
--- /dev/null
+++ b/addons/gdUnit4/src/core/runners/GdUnitTestRunner.gd
@@ -0,0 +1,90 @@
+@tool
+extends "res://addons/gdUnit4/src/core/runners/GdUnitTestSessionRunner.gd"
+## Runner implementation used by the editor UI.[br]
+## [br]
+## This runner connects to a GdUnit server via TCP to report test results.[br]
+## Test results are reported in real-time and displayed in the editor UI.[br]
+## [br]
+## The runner uses an RPC message protocol to communicate status and events:[br]
+## - Messages to report progress[br]
+## - Events to report test results[br]
+
+## The TCP client used to connect to the GdUnit server
+@onready var _client: GdUnitTcpClient = $GdUnitTcpClient
+@onready var _version_label: Control = %Version
+
+
+func _init() -> void:
+ super()
+ # We set the default max report history to 1
+ max_report_history = 1
+
+
+func _ready() -> void:
+ super()
+ GdUnit4Version.init_version_label(_version_label)
+
+ var config_result := _runner_config.load_config()
+ if config_result.is_error():
+ push_error(config_result.error_message())
+ _state = EXIT
+ return
+ @warning_ignore("return_value_discarded")
+ _client.connection_failed.connect(_on_connection_failed)
+ GdUnitSignals.instance().gdunit_message.connect(_on_send_message)
+ _executor.fail_fast(_runner_config.is_fail_fast())
+ var result := _client.start("127.0.0.1", _runner_config.server_port())
+ if result.is_error():
+ push_error(result.error_message())
+ return
+
+
+## Cleanup and quit the runner.[br]
+## [br]
+## [param code] The exit code to return.
+func quit(code: int) -> void:
+ if code != RETURN_SUCCESS:
+ _state = EXIT
+ await GdUnitMemoryObserver.gc_on_guarded_instances()
+ await super.quit(code)
+
+
+## Called when the TCP connection to the GdUnit server fails.[br]
+## Stops the test execution.[br]
+## [br]
+## [param message] The error message describing the failure.
+func _on_connection_failed(message: String) -> void:
+ prints("_on_connection_failed", message)
+ _state = STOP
+
+
+## Initializes the test runner.[br]
+## Waits for TCP client connection and then scans for test suites.[br]
+## Reports the number of found test suites via TCP message.
+func init_runner() -> void:
+ # wait until client is connected to the GdUnitServer
+ if _client.is_client_connected():
+ await gdUnitInit()
+ _state = RUN
+
+
+## Initializes the GdUnit framework.[br]
+## Sends initial message about number of test suites.
+func gdUnitInit() -> void:
+ #enable_manuall_polling()
+ _test_cases = _runner_config.test_cases()
+ await get_tree().process_frame
+
+
+## Sends a message via TCP to the GdUnit server.[br]
+## [br]
+## [param message] The message to send.
+func _on_send_message(message: String) -> void:
+ _client.send(RPCMessage.of(message))
+
+
+## Handles GdUnit events by sending them via TCP to the server.[br]
+## [br]
+## [param event] The event to send.
+func _on_gdunit_event(event: GdUnitEvent) -> void:
+ _client.send(RPCGdUnitEvent.of(event))