2026-09-20 22:14:47 +03:00
extends SceneTree
var checks : int = 0
var failures : int = 0
func _initialize () -> void :
call_deferred ( "run" )
func check ( value : bool , message : String ) -> void :
checks += 1
if not value :
failures += 1
push_error ( message )
func run () -> void :
var scene = load ( "res://world/world.tscn" ) . instantiate ()
var stage = scene . get_node ( "Stage" )
stage . owniverse . free ()
stage . set_script ( load ( "res://tests/fixtures/ui_stage.gd" ))
root . add_child ( scene )
await process_frame
await process_frame
stage . stage_page_scroller . scroll_horizontal = stage . PAGE_WIDTH
await process_frame
stage . owniverse . state . amount . H = 1000.0
stage . owniverse . state . amount . RD = 2.0
2026-09-29 20:23:20 +03:00
stage . owniverse . presentation . refresh ( stage . owniverse . state , stage . owniverse . catalog )
stage . set_owniverse_item_value ()
2026-09-20 22:14:47 +03:00
var hydrogen = stage . owniverse_items . H
var dwarf = stage . owniverse_items . RD
2026-09-29 20:23:20 +03:00
check ( hydrogen . description . text == "1 000" , "Pending quantities reach controls" )
check ( dwarf . description . text == "2" , "Other page receives its current quantity" )
check ( stage . owniverse . presentation . pending_amounts . is_empty (), "Published queue is consumed by Stage" )
stage . owniverse . presentation . deferred_updates = true
2026-09-20 22:14:47 +03:00
stage . owniverse . state . amount . H = 2000.0
2026-09-29 20:23:20 +03:00
stage . owniverse . presentation . refresh ( stage . owniverse . state , stage . owniverse . catalog )
check ( stage . owniverse . presentation . dirty and stage . owniverse . presentation . pending_amounts . is_empty (), "Deferred refresh marks dirty without republishing" )
stage . set_owniverse_item_value ()
check ( hydrogen . description . text == "1 000" , "Labels retain last published quantity" )
stage . owniverse . presentation . refresh ( stage . owniverse . state , stage . owniverse . catalog , true )
stage . set_owniverse_item_value ()
check ( hydrogen . description . text == "2 000" and not stage . owniverse . presentation . dirty , "Forced refresh publishes latest state" )
stage . owniverse . presentation . deferred_updates = false
2026-09-20 22:14:47 +03:00
stage . item_activated ( hydrogen )
2026-09-29 20:23:20 +03:00
stage . set_owniverse_item_value ()
check ( hydrogen . description . text == root . get_node ( "Global" ) . format_number ( stage . owniverse . state . amount . H ), "Player production publishes the new quantity" )
2026-09-20 22:14:47 +03:00
check ( stage . owniverse . state . amount . H > 2000.0 , "Production action actually executed" )
dwarf . visible = true
stage . stage_page_scroller . scroll_horizontal = 2 * stage . PAGE_WIDTH
await process_frame
2026-09-29 20:23:20 +03:00
stage . _refresh_universe_ui ()
2026-09-20 22:14:47 +03:00
check ( dwarf . description . text == "2" , "Newly visible page receives cached latest values" )
stage . owniverse . state . time . year = 1234.5
2026-09-29 20:23:20 +03:00
stage . _refresh_universe_ui ()
check ( stage . date_time . text == "1 234.5" , "Time displays tenths with thousands separator" )
for entity in stage . owniverse . catalog . entities . values (): entity . free ()
2026-09-20 22:14:47 +03:00
stage . owniverse . free ()
scene . free ()
print ( "UI updates: %d checks, %d failures" % [ checks , failures ])
quit ( 0 if failures == 0 else 1 )