chore(client): add gdUnit4 test framework addon
Vendor gdUnit4 for Godot 4 client testing (D-030). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
# GdUnit generated TestSuite
|
||||
extends GdUnitTestSuite
|
||||
|
||||
# TestSuite generated from
|
||||
const __source = 'res://addons/gdUnit4/src/network/GdUnitTcpServer.gd'
|
||||
|
||||
var tcp_server: GdUnitTcpServer
|
||||
var tcp_client: GdUnitTcpClient
|
||||
|
||||
|
||||
## We start a custom test server for this suite
|
||||
func before() -> void:
|
||||
tcp_server = GdUnitTcpServer.new("Test TCP Server")
|
||||
tcp_client = GdUnitTcpClient.new("Test TCP Client", true)
|
||||
add_child(tcp_server)
|
||||
add_child(tcp_client)
|
||||
|
||||
var result := tcp_server.start(62222)
|
||||
if not result.is_success():
|
||||
return
|
||||
|
||||
var server_port: int = result.value()
|
||||
tcp_client.start("127.0.0.1", server_port)
|
||||
|
||||
# wait until the client is connected
|
||||
for n in 200:
|
||||
await await_idle_frame()
|
||||
if tcp_client.is_client_connected():
|
||||
break
|
||||
|
||||
|
||||
## Shutdown the test server
|
||||
func after() -> void:
|
||||
tcp_client.stop()
|
||||
tcp_client.queue_free()
|
||||
await await_idle_frame()
|
||||
tcp_server.stop()
|
||||
tcp_server.queue_free()
|
||||
await await_idle_frame()
|
||||
|
||||
|
||||
func test_receive_single_message() -> void:
|
||||
var signal_collector_ := signal_collector(tcp_server)
|
||||
await await_idle_frame()
|
||||
|
||||
# send a single test message
|
||||
tcp_client.send(RPCMessage.of("Test Message"))
|
||||
await await_idle_frame()
|
||||
|
||||
# expect the RPCMessage is received and emitted
|
||||
assert_bool(signal_collector_.is_emitted("rpc_data", [RPCMessage.of("Test Message")])).is_true()
|
||||
|
||||
|
||||
func test_receive_multy_message() -> void:
|
||||
var signal_collector_ := signal_collector(tcp_server)
|
||||
await await_idle_frame()
|
||||
|
||||
# send a two test message
|
||||
tcp_client.send(RPCMessage.of("Test Message A"))
|
||||
tcp_client.send(RPCMessage.of("Test Message B"))
|
||||
await await_idle_frame()
|
||||
|
||||
# expect the RPCMessage is received and emitted
|
||||
assert_bool(signal_collector_.is_emitted("rpc_data", [RPCMessage.of("Test Message A")])).is_true()
|
||||
assert_bool(signal_collector_.is_emitted("rpc_data", [RPCMessage.of("Test Message B")])).is_true()
|
||||
|
||||
|
||||
func add_data(package: StreamPeerBuffer, rpc_data: RPC) -> int:
|
||||
var buffer := rpc_data.serialize().to_utf8_buffer()
|
||||
var package_size := buffer.size()
|
||||
package.put_u32(0xDEADBEEF)
|
||||
package.put_u32(buffer.size())
|
||||
package.put_data(buffer)
|
||||
return package_size
|
||||
|
||||
|
||||
|
||||
# TODO refactor out and provide as public interface to can be reuse on other tests
|
||||
class TestGdUnitSignalCollector:
|
||||
var _signalCollector: GdUnitSignalCollector
|
||||
var _emitter: Object
|
||||
|
||||
|
||||
func _init(emitter: Object) -> void:
|
||||
_emitter = emitter
|
||||
_signalCollector = GdUnitSignalCollector.new()
|
||||
_signalCollector.register_emitter(emitter)
|
||||
|
||||
|
||||
func is_emitted(signal_name: String, expected_args: Array) -> bool:
|
||||
return _signalCollector.match(_emitter, signal_name, expected_args)
|
||||
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
if what == NOTIFICATION_PREDELETE:
|
||||
_signalCollector.unregister_emitter(_emitter)
|
||||
|
||||
|
||||
func signal_collector(instance: Object) -> TestGdUnitSignalCollector:
|
||||
return TestGdUnitSignalCollector.new(instance)
|
||||
Reference in New Issue
Block a user