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.
36 lines
1.4 KiB
GDScript
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)
|