104 lines
3.7 KiB
GDScript
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)
|