scopedvr-map-editor/tests/probe_t_efb3d022_repro.gd
Hermes (scopedvr-dev) 7c7dc38566 U-Nachlauf t_efb3d022: assets_panel _library_load_open_states robuster Typ-Check
bool(cfg.get_value()) warf SCRIPT ERROR "Nonexistent bool constructor" bei
Nicht-Bool-Eintraegen in [library] (Array-Eintraege neben zuletzt_benutzt) —
die Klapp-Zustaende luden dann gar nicht (STATES leer).

Fix: nur echte Bool-Werte uebernehmen, String/Int/Array auf Fallback true,
kein Crash mehr.

Beweis-Probe tests/probe_t_efb3d022_repro.gd:
  vorher: 2x SCRIPT ERROR "Invalid call. Nonexistent 'bool' constructor",
          STATES leer
  nachher: 0 Fehler, 3 Zustaende geladen (Array-Eintrag -> Fallback true)

Suite test_assets_panel.gd erweitert um Testgruppe 0
"Klapp-Zustaende aus kaputter cfg" (6 neue Checks, 75 -> 81, ALL OK):
Array/String/Int-Eintraege + save->load-Rundtrip.

test_inspector 47/47, test_gui_smoke 92/92, --import 0 Parse-Errors.
2026-10-20 09:52:26 +00:00

36 lines
1.4 KiB
GDScript

extends SceneTree
## Beweis-Probe t_efb3d022: `[library]` enthält einen Array-Eintrag.
## Vor dem Fix: SCRIPT ERROR "Invalid call. Nonexistent 'bool' constructor"
## beim Laden der Klapp-Zustände (bool(<Array>) ist kein gültiger Konstruktor).
## Nach dem Fix: sauberes Laden, Zustände kommen zurück, keine Fehler.
##
## godot4 --headless --path . -s res://tests/probe_t_efb3d022_repro.gd
##
## Grep-Muster für den Gegenbeweis: "SCRIPT ERROR" + "Nonexistent 'bool' constructor"
func _initialize() -> void:
_run.call_deferred()
func _run() -> void:
# Kaputte cfg simulieren: Array-Eintrag (Nicht-Bool) neben echtem Bool,
# plus zuletzt_benutzt (U4 schreibt das Array in dieselbe Sektion).
var cfg := ConfigFile.new()
cfg.set_value("library", "zuletzt_benutzt", PackedStringArray(["crate_metal", "crate_wood"]))
cfg.set_value("library", "gruppen_kisten", true)
cfg.set_value("library", "gruppen_bauteile", false)
cfg.set_value("library", "array_gruppe", PackedStringArray(["a", "b"]))
cfg.save("user://scopedvr_editor.cfg")
var scene: PackedScene = load("res://scenes/main.tscn")
var main: Control = scene.instantiate()
root.add_child(main)
await process_frame
await process_frame
var assets = main.assets_mod
var states: Dictionary = assets._library_load_open_states()
print("STATES=", states)
print("PROBE_ENDE states=", states.size(), " kisten=", states.get("gruppen_kisten", "?"),
" bauteile=", states.get("gruppen_bauteile", "?"))
quit(0)