import shutil import unittest from pathlib import Path from cadpy import render as cad_render from tests.python.support.cad_test_roots import IsolatedCadRoots class CadpyRenderTests(unittest.TestCase): def setUp(self) -> None: self._isolated_roots = IsolatedCadRoots(self, prefix="cadjs-") tempdir = self._isolated_roots.temporary_cad_directory(prefix="tmp-cadjs-") self._tempdir = tempdir self.temp_root = Path(tempdir.name) self.relative_dir = self.temp_root.relative_to(cad_render.CAD_ROOT).as_posix() self.cleanup_paths: set[Path] = set() def tearDown(self) -> None: for path in self.cleanup_paths: path.unlink(missing_ok=True) shutil.rmtree(self.temp_root, ignore_errors=True) self._tempdir.cleanup() def _write_step(self, name: str, *, extension: str = ".step") -> Path: step_path = self.temp_root / f"{name}{extension}" step_path.write_text("ISO-10303-21; END-ISO-10303-21;\n") self.cleanup_paths.update( ( cad_render.part_glb_path(step_path), ) ) return step_path def test_direct_step_has_no_persistent_stl_path(self) -> None: step_path = self._write_step("part") with self.assertRaisesRegex(ValueError, "no configured STL output"): cad_render.part_stl_path(step_path) def test_glb_path_uses_adjacent_hidden_step_glb(self) -> None: step_path = self._write_step("part") glb_path = cad_render.part_glb_path(step_path) self.assertEqual(self.temp_root / ".part.step.glb", glb_path) self.assertEqual(self.temp_root / ".part.step" / "model.glb", cad_render.legacy_part_glb_path(step_path)) def test_glb_path_preserves_stp_extension(self) -> None: step_path = self._write_step("part-stp", extension=".stp") glb_path = cad_render.part_glb_path(step_path) self.assertEqual(self.temp_root / ".part-stp.stp.glb", glb_path) self.assertEqual(self.temp_root / ".part-stp.stp" / "model.glb", cad_render.legacy_part_glb_path(step_path)) if __name__ == "__main__": unittest.main()