Files

46 lines
1.4 KiB
Python

import numpy as np
import pytest
import trimesh
from PIL import Image
from cxn.glb_loader import extract_embedded_textures, load_glb_as_scene
def _make_textured_glb(path):
mesh = trimesh.creation.box()
img = Image.new("RGB", (8, 8), (200, 100, 50))
uv = np.zeros((len(mesh.vertices), 2), dtype=np.float64)
mesh.visual = trimesh.visual.TextureVisuals(uv=uv, image=img)
trimesh.Scene(mesh).export(str(path), file_type="glb")
def test_load_glb_returns_scene_with_geometry(tmp_path):
p = tmp_path / "box.glb"
_make_textured_glb(p)
scene = load_glb_as_scene(str(p))
assert isinstance(scene, trimesh.Scene)
assert len(scene.geometry) >= 1
def test_extract_embedded_textures_finds_image(tmp_path):
p = tmp_path / "box.glb"
_make_textured_glb(p)
scene = load_glb_as_scene(str(p))
textures = extract_embedded_textures(scene)
assert len(textures) >= 1
assert all(isinstance(t, Image.Image) for t in textures)
def test_extract_embedded_textures_empty_when_none(tmp_path):
p = tmp_path / "plain.glb"
trimesh.Scene(trimesh.creation.box()).export(str(p), file_type="glb")
scene = load_glb_as_scene(str(p))
assert extract_embedded_textures(scene) == []
def test_load_glb_corrupt_file_raises(tmp_path):
p = tmp_path / "bad.glb"
p.write_bytes(b"not a real glb")
with pytest.raises(Exception):
load_glb_as_scene(str(p))