38 lines
3.3 KiB
GDScript
38 lines
3.3 KiB
GDScript
extends "res://tests/special/peeping_room_fixture.gd"
|
|
|
|
func _run() -> void:
|
|
var f := fixture()
|
|
var runtime: Variant = f[&"runtime"]
|
|
var room := place(f)
|
|
enable_fixture(f, room)
|
|
var old_target: StringName = f[&"target"]
|
|
var old_evidence: Dictionary = runtime.peeping_room_service.controlled_fixture_record_evidence(room, &"fixture.event", f[&"clock"].absolute_minute)
|
|
expect(old_evidence[&"ok"], "fixture evidence before removal")
|
|
expect(runtime.submit_command(&"demolish_facility", {&"instance_id": old_target}).is_success(), "real Runtime demolition")
|
|
var lost: Dictionary = runtime.peeping_room_service.get_room(room)
|
|
expect(lost[&"link_state"] == &"TARGET_LOST" and lost[&"stopped"], "target removal immediately marks lost and stopped")
|
|
expect(runtime.peeping_room_service.record_evidence(room, &"fixture.after_loss", f[&"clock"].absolute_minute)[&"reason"] == &"STOPPED", "collection rejected after loss with prescribed stopped precedence")
|
|
expect(not runtime.peeping_room_service.controlled_fixture_set_stopped(room, false), "lost target cannot resume even through fixture")
|
|
var lost_snapshot: Dictionary = runtime.create_snapshot()
|
|
expect(runtime.restore_snapshot(lost_snapshot), "lost reference roundtrip retains historical identity")
|
|
expect(var_to_bytes(lost_snapshot) == var_to_bytes(runtime.create_snapshot()), "lost snapshot exact typed roundtrip")
|
|
expect(runtime.submit_command(&"build_facility", {&"definition_id": &"public_bath", &"origin": Vector3i(-6, 0, 0)}).is_success(), "rebuild at same geometry starts")
|
|
f[&"clock"].advance_minutes(runtime.definition_registry.get_facility(&"public_bath").build_minutes)
|
|
var new_target: StringName = runtime.world_service.get_occupant(Vector3i(-6, 0, 0))
|
|
expect(new_target != old_target, "rebuild receives different target identity")
|
|
expect(runtime.peeping_room_service.get_room(room)[&"target_instance_id"] == old_target, "no implicit relink on geometry reuse")
|
|
var rejected: CommandResult = runtime.submit_command(&"peeping_room_relink", {&"room_id": room, &"target_instance_id": old_target})
|
|
expect(not rejected.is_success(), "explicit old target relink rejected")
|
|
expect(runtime.submit_command(&"peeping_room_relink", {&"room_id": room, &"target_instance_id": new_target}).is_success(), "explicit new target full validation")
|
|
var linked: Dictionary = runtime.peeping_room_service.get_room(room)
|
|
expect(linked[&"stopped"] and linked[&"stop_reason"] == &"RELINKED_PENDING_RESUME", "explicit relink never auto resumes")
|
|
f[&"target"] = new_target
|
|
enable_fixture(f, room)
|
|
var new_evidence: Dictionary = runtime.peeping_room_service.controlled_fixture_record_evidence(room, &"fixture.event", f[&"clock"].absolute_minute)
|
|
expect(new_evidence[&"ok"] and new_evidence[&"evidence_id"] != old_evidence.get(&"evidence_id"), "same room/event on different target never aliases")
|
|
var linked_snapshot: Dictionary = runtime.create_snapshot()
|
|
expect(runtime.restore_snapshot(linked_snapshot) and var_to_bytes(linked_snapshot) == var_to_bytes(runtime.create_snapshot()), "relinked ledger keeps both historical target bindings")
|
|
expect(runtime.facility_service.unregister_instance(new_target).is_success(), "equivalent FacilityService removal path")
|
|
expect(runtime.peeping_room_service.get_room(room)[&"link_state"] == &"TARGET_LOST", "unregister signal also invalidates target")
|
|
finish("Peeping room reference")
|