67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
"""Tests for I/O nodes (LoadMesh, SaveMesh)."""
|
|
|
|
import pytest
|
|
from pathlib import Path
|
|
from nodes.io import LoadMesh, SaveMesh
|
|
|
|
|
|
@pytest.mark.unit
|
|
def test_load_mesh_stl(bunny_mesh, render_helper, save_mesh_helper):
|
|
"""Test loading STL file."""
|
|
if bunny_mesh is None:
|
|
pytest.skip("Stanford_Bunny.stl not found in assets")
|
|
|
|
node = LoadMesh()
|
|
mesh = node.load_mesh(file_path="Stanford_Bunny.stl")[0]
|
|
|
|
assert mesh is not None
|
|
assert mesh.vertices.shape[0] > 0
|
|
assert mesh.faces.shape[0] > 0
|
|
|
|
save_mesh_helper(mesh, "loaded_bunny", "obj")
|
|
render_helper(mesh, "loaded_bunny")
|
|
|
|
|
|
@pytest.mark.unit
|
|
def test_save_mesh_obj(cube_mesh, meshes_output_dir):
|
|
"""Test saving mesh to OBJ format."""
|
|
node = SaveMesh()
|
|
status = node.save_mesh(trimesh=cube_mesh, file_path="test_cube.obj")[0]
|
|
|
|
assert "successfully" in status.lower()
|
|
assert (meshes_output_dir / "test_cube.obj").exists()
|
|
|
|
|
|
@pytest.mark.unit
|
|
def test_save_mesh_ply(sphere_mesh, meshes_output_dir):
|
|
"""Test saving mesh to PLY format."""
|
|
node = SaveMesh()
|
|
status = node.save_mesh(trimesh=sphere_mesh, file_path="test_sphere.ply")[0]
|
|
|
|
assert "successfully" in status.lower()
|
|
assert (meshes_output_dir / "test_sphere.ply").exists()
|
|
|
|
|
|
@pytest.mark.unit
|
|
@pytest.mark.parametrize("format", ["obj", "ply", "stl", "off"])
|
|
def test_save_load_cycle(cube_mesh, meshes_output_dir, format):
|
|
"""Test save/load cycle for different formats."""
|
|
save_node = SaveMesh()
|
|
load_node = LoadMesh()
|
|
|
|
filename = f"cycle_test.{format}"
|
|
# Save to output directory
|
|
save_node.save_mesh(trimesh=cube_mesh, file_path=filename)
|
|
|
|
# Load from output directory (files are saved there)
|
|
from pathlib import Path
|
|
saved_path = meshes_output_dir / filename
|
|
if not saved_path.exists():
|
|
pytest.skip(f"File {filename} was not saved correctly")
|
|
|
|
loaded_mesh = load_node.load_mesh(file_path=str(saved_path))[0]
|
|
|
|
assert loaded_mesh is not None
|
|
assert loaded_mesh.vertices.shape[0] > 0
|
|
assert loaded_mesh.faces.shape[0] > 0
|