starcheese/tests/test_eventbus.gd
Elliot Stirling 7542472833 Event Bus
2024-10-03 18:12:33 +01:00

106 lines
3.4 KiB
GDScript

# res://tests/test_eventbus.gd
class_name EventBusTests
extends Node
func _ready():
run_tests()
func run_tests():
test_subscribe_and_publish()
test_dispose_subscription()
test_cancel_scope()
test_multiple_subscribers()
# Test function: Test subscribing and publishing events
func test_subscribe_and_publish() -> void:
var bus: DefaultEventBus = DefaultEventBus.new()
var scope: DefaultScope = DefaultScope.new()
var event_received: Flag = Flag.new()
var event_handler = func(_event: Event) -> int:
event_received.value = true
return EventResult.ResultType.KEEP_SUBSCRIPTION
bus.subscribe_to(scope, "TestEvent", event_handler)
var event: TestEvent = TestEvent.new(self)
bus.publish(scope, event)
# Assert that the event was received
assert(event_received.value == true, "Event was not received by subscriber")
bus.dispose()
# Test function: Test disposing of a subscription after handling an event
func test_dispose_subscription() -> void:
var bus: DefaultEventBus = DefaultEventBus.new()
var scope: DefaultScope = DefaultScope.new()
var event_received_times: Counter = Counter.new()
var event_handler = func(_event: Event) -> int:
event_received_times.value += 1
return EventResult.ResultType.DISPOSE_SUBSCRIPTION
bus.subscribe_to(scope, "TestEvent", event_handler)
var event: TestEvent = TestEvent.new(self)
bus.publish(scope, event)
bus.publish(scope, event) # Publish a second time
# Assert that the event handler was called only once
assert(event_received_times.value == 1, "Event handler should have been called only once due to disposal")
bus.dispose()
# Test function: Test canceling an event scope
func test_cancel_scope() -> void:
var bus: DefaultEventBus = DefaultEventBus.new()
var scope: DefaultScope = DefaultScope.new()
var event_received: Flag = Flag.new()
var event_handler = func(_event: Event) -> int:
event_received.value = true
return EventResult.ResultType.KEEP_SUBSCRIPTION
bus.subscribe_to(scope, "TestEvent", event_handler)
bus.cancel_scope(scope)
var event: TestEvent = TestEvent.new(self)
bus.publish(scope, event)
# Assert that the event was not received after scope cancellation
assert(event_received.value == false, "Event should not have been received after scope cancellation")
bus.dispose()
# Test function: Test multiple subscribers receiving the same event
func test_multiple_subscribers() -> void:
var bus: DefaultEventBus = DefaultEventBus.new()
var scope: DefaultScope = DefaultScope.new()
var event_received_by_handler1: Flag = Flag.new()
var event_received_by_handler2: Flag = Flag.new()
var event_handler1 = func(_event: Event) -> int:
event_received_by_handler1.value = true
return EventResult.ResultType.KEEP_SUBSCRIPTION
var event_handler2 = func(_event: Event) -> int:
event_received_by_handler2.value = true
return EventResult.ResultType.KEEP_SUBSCRIPTION
bus.subscribe_to(scope, "TestEvent", event_handler1)
bus.subscribe_to(scope, "TestEvent", event_handler2)
var event: TestEvent = TestEvent.new(self)
bus.publish(scope, event)
# Assert that both handlers received the event
assert(event_received_by_handler1.value == true, "First handler did not receive event")
assert(event_received_by_handler2.value == true, "Second handler did not receive event")
bus.dispose()
class Flag:
var value = false
class Counter:
var value = 0
class TestEvent extends Event:
func _init(_source: Variant = null) -> void:
super(_source)
type = "TestEvent"