Files
modbison/scripts/smoke_test_bison_palette.gd
T
2026-09-21 18:11:06 +00:00

104 lines
3.7 KiB
GDScript

extends SceneTree
## Headless smoke test verifying Bison model is present in the editor palette
## and loads properly via StaticObjectNode and EditorCore.
const ChunkEditorModelClass := preload("res://scripts/editor/chunk_editor_model.gd")
const EditorObjectCatalogClass := preload("res://scripts/editor/object_catalog.gd")
const EditorCoreClass := preload("res://scripts/editor/editor_core.gd")
const PalettePanelClass := preload("res://scripts/editor/ui/palette_panel.gd")
const StaticObjectNodeClass := preload("res://scripts/static_object_node.gd")
const WorldObjectClass := preload("res://scripts/world_object.gd")
var passed := 0
var failed := 0
func _check(label: String, cond: bool) -> void:
if cond:
passed += 1
print(" PASS: ", label)
else:
failed += 1
printerr(" FAIL: ", label)
func _initialize() -> void:
await _run()
func _run() -> void:
print("=== Running Bison Model in Editor Palette Smoke Test ===")
var root := Node.new()
root.name = "TestRoot"
get_root().add_child(root)
# 1. Check catalog loading
var catalog := EditorObjectCatalogClass.new()
var err := catalog.load_catalog()
_check("Loaded EditorObjectCatalog from JSON", err == OK)
# 2. Check bison in default ids
var all_ids := catalog.get_all_ids()
_check("Catalog contains 'bison'", all_ids.has("bison"))
var bison_entry := catalog.resolve("bison")
_check("Bison entry has asset_id props/bison.glb", bison_entry.get("asset_id") == "props/bison.glb")
_check("Bison entry display_name is Bison", bison_entry.get("display_name") == "Bison")
_check("Bison asset file exists in project", FileAccess.file_exists("res://assets/props/bison.glb"))
# 3. Check alias resolution for legacy custom import id
var alias_entry := catalog.resolve("custom_bizon_by_madtrollstudio_rqk_lny_pnfx")
_check("Legacy custom id resolves to bison", alias_entry.get("asset_id") == "props/bison.glb")
# 4. Check PalettePanel populates bison in list
var palette := PalettePanelClass.new()
root.add_child(palette)
await process_frame
palette.set_catalog(catalog)
var found_in_palette := false
for i in range(palette._list.item_count):
var item_text := palette._list.get_item_text(i)
if item_text == "Bison":
found_in_palette = true
break
_check("PalettePanel list contains 'Bison'", found_in_palette)
# 5. Place bison in a chunk model
var model := ChunkEditorModelClass.new()
var core := EditorCoreClass.new(model, catalog)
var obj_id := core.place_object("bison", Vector3(10.0, 0.0, 15.0))
_check("Placed bison via EditorCore", not obj_id.is_empty())
var placed_obj := model.find_object(obj_id)
_check("Placed object has props/bison.glb", placed_obj != null and placed_obj.asset_id == "props/bison.glb")
# 6. StaticObjectNode with default props/bison.glb
var wo1 := WorldObjectClass.new()
wo1.id = "test_bison_1"
wo1.type = "prop"
wo1.asset_id = "props/bison.glb"
wo1.position = Vector3(10.0, 0.0, 15.0)
var node1 := StaticObjectNodeClass.new()
node1.world_object = wo1
root.add_child(node1)
await process_frame
_check("StaticObjectNode loaded visuals for props/bison.glb", node1.get_child_count() > 0)
# 7. StaticObjectNode with legacy user:// path as saved in World 6
var wo2 := WorldObjectClass.new()
wo2.id = "test_bison_legacy"
wo2.type = "prop"
wo2.asset_id = "user://custom_assets/Bizon by madtrollstudio - RqkLNYPnfx.glb"
wo2.properties = {"catalog_id": "custom_bizon_by_madtrollstudio_rqk_lny_pnfx"}
var node2 := StaticObjectNodeClass.new()
node2.world_object = wo2
root.add_child(node2)
await process_frame
_check("StaticObjectNode loaded visuals for legacy world chunk bison", node2.get_child_count() > 0)
print("Bison Palette Smoke Test complete. Passed: %d, Failed: %d" % [passed, failed])
if failed > 0:
quit(1)
else:
quit(0)