Files
TheTree_mock/tests/s1/test_dimension_batch_save.gd
T
Takeshi 5dde0c5ec2 Record original-alignment implementation and traceability checkpoint
Capture current source, content data, tests, asset licenses, and original-specification traceability. Original implementation remains incomplete. The accepted matching UI generation passed 154 suites and 12,253 checks, with eight rendered staff-contract screens reviewed. Latest native Windows and full-original acceptance remain outstanding.
2026-09-30 23:52:24 +09:00

57 lines
4.8 KiB
GDScript

extends SceneTree
var checks:=0
var failures:=0
var runtime: Variant
var clock: Variant
var state: Variant
func expect(ok: bool, message: String) -> void:
checks+=1
if not ok: failures+=1;push_error(message)
func _initialize() -> void: call_deferred("run")
func build(id: StringName, origin: Vector3i) -> bool:
var result: CommandResult=runtime.submit_command(&"build_facility",{&"definition_id":id,&"origin":origin})
expect(result.is_success(),"legacy batch build %s" % id)
if not result.is_success(): return false
clock.advance_minutes(runtime.definition_registry.get_facility(id).build_minutes)
return true
func run() -> void:
runtime=load("res://autoload/simulation_runtime.gd").new();clock=load("res://autoload/game_clock.gd").new();state=load("res://autoload/game_state.gd").new()
clock.reset(1,6,0);state.reset();runtime.initialize(clock,state,42506);clock.set_paused(true)
var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS
paths.append_array(["res://tests/fixtures/legacy_premium_room.tres","res://tests/fixtures/legacy_staff_dormitory.tres"])
expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"load both legacy definitions")
if not build(&"reception",Vector3i(-6,0,0)) or not build(&"premium_room",Vector3i(-6,2,0)) or not build(&"warehouse",Vector3i(-6,0,1)) or not build(&"staff_dormitory",Vector3i(-6,2,1)): finish();return
if not build(&"service_stairs",Vector3i(-7,1,1)) or not build(&"service_stairs",Vector3i(-7,2,1)) or not build(&"service_stairs",Vector3i(-7,3,1)): finish();return
paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.erase("res://tests/fixtures/legacy_staff_dormitory.tres");paths.append_array(FacilityCatalog.ORIGINAL_FACILITY_PATHS)
expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch batch to current definitions")
var before: Dictionary=runtime.create_snapshot()
var path: String="user://saves/dimension_batch_%d" % Time.get_ticks_usec()
expect(SaveService.save_snapshot(path,before)[&"ok"],"persist original two-facility source")
var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(path)
expect(migrated[&"ok"],"batch disk migration accepts both facilities")
var backup:=SaveService.load_snapshot(path+SaveService.MIGRATION_BACKUP_SUFFIX)
expect(backup[&"ok"] and backup[&"snapshot"]==before,"one backup contains both original footprints")
expect(runtime.create_snapshot()==before,"batch disk migration preserves live world")
var loaded:=SaveService.load_snapshot(path)
expect(loaded[&"ok"] and runtime.restore_snapshot(loaded[&"snapshot"]),"batch result restores all crosslinks")
for room: FacilityInstance in runtime.facility_service.get_instances():
if room.definition_id==&"premium_room": expect(room.occupied_cells.size()==4,"batch premium footprint is four cells")
if room.definition_id==&"staff_dormitory": expect(room.occupied_cells.size()==2,"batch dormitory footprint is two cells")
var repeated: Dictionary=runtime.migrate_facility_dimensions_at_path(path)
expect(repeated[&"ok"] and not repeated.get(&"backup_created",true) and SaveService.load_snapshot(path+SaveService.MIGRATION_BACKUP_SUFFIX)[&"snapshot"]==before,"repeat batch preserves first backup")
expect(runtime.restore_snapshot(before),"restore source to test late batch failure")
var dorm_id: StringName=&""
for room: FacilityInstance in runtime.facility_service.get_instances():
if room.definition_id==&"staff_dormitory": dorm_id=room.instance_id
expect(runtime.staff_service.create_task(&"maintenance",10,clock.absolute_minute,{&"target_entity_id":dorm_id,&"target_cell":Vector3i(-7,3,1)},&"batch_blocker").is_success(),"create valid task at disappearing second-facility entrance")
var rejected_source: Dictionary=runtime.create_snapshot()
expect(runtime.restore_snapshot(rejected_source) and SaveService.save_snapshot(path,rejected_source)[&"ok"],"late-failure source is valid and saved")
var rejected: Dictionary=runtime.migrate_facility_dimensions_at_path(path)
expect(not rejected[&"ok"] and rejected.get(&"details",{}).get(&"facility_id",&"")==dorm_id and rejected[&"details"].get(&"rolled_back",false),"second facility failure rolls back isolated first-facility conversion")
expect(SaveService.load_snapshot(path)[&"snapshot"]==rejected_source and runtime.create_snapshot()==rejected_source,"late rejection preserves entire disk source and live state")
expect(SaveService.load_snapshot(path+SaveService.MIGRATION_BACKUP_SUFFIX)[&"snapshot"]==before,"late rejected batch leaves prior backup intact")
SaveService.delete_save(path);SaveService.delete_save(path+SaveService.MIGRATION_BACKUP_SUFFIX)
finish()
func finish() -> void:
runtime.free();clock.free();state.free();print("Dimension batch save: %d checks, %d failures" % [checks,failures]);quit(failures)