feat: integrate SimpleCADAPI 2.0.2 CAD workflows
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
"""Host-independent tests for the SolidWorks translator backend."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
import simplecadapi as scad
|
||||
from simplecadapi import GraphSession
|
||||
from simplecadapi.translator.errors import TranslationRequestError
|
||||
|
||||
|
||||
def _rectangle_extrusion_model() -> str:
|
||||
with GraphSession() as session:
|
||||
profile = scad.make_rectangle_rface(width=2.0, height=1.0)
|
||||
scad.extrude_rsolid(
|
||||
profile=profile,
|
||||
direction=(0.0, 0.0, 1.0),
|
||||
distance=3.0,
|
||||
)
|
||||
return scad.export_model_json(session=session)
|
||||
|
||||
|
||||
class TestSolidWorksTranslator(unittest.TestCase):
|
||||
def test_backend_imports_without_target_runtime_modules(self):
|
||||
before = set(sys.modules)
|
||||
|
||||
solidworks = importlib.import_module(
|
||||
"simplecadapi.translator.solidworks_translator"
|
||||
)
|
||||
|
||||
self.assertNotIn("pythoncom", set(sys.modules) - before)
|
||||
self.assertNotIn("win32com.client", set(sys.modules) - before)
|
||||
self.assertEqual(solidworks.CAPABILITIES.backend_id, "solidworks")
|
||||
|
||||
def test_supported_graph_emits_deterministic_compilable_script(self):
|
||||
model_json = _rectangle_extrusion_model()
|
||||
from simplecadapi.translator.solidworks_translator import SolidWorksTranslator
|
||||
|
||||
translator = SolidWorksTranslator(document_name="ContractSolidWorks")
|
||||
first = translator.translate_model_json(model_json)
|
||||
second = translator.translate_model_json(model_json)
|
||||
|
||||
self.assertEqual(first.content, second.content)
|
||||
compile(first.content, "<solidworks-script>", "exec")
|
||||
self.assertFalse(first.metadata["target_runtime_validated"])
|
||||
self.assertTrue(translator.capabilities.targets[0].requires_external_runtime)
|
||||
|
||||
def test_fallback_scripts_are_deterministic(self):
|
||||
with GraphSession() as session:
|
||||
profile = scad.make_rectangle_rface(3.0, 3.0)
|
||||
solid = scad.extrude_rsolid(profile, (0.0, 0.0, 1.0), 3.0)
|
||||
scad.fillet_rsolid(solid, [solid.get_edges(0)], 0.2)
|
||||
model_json = scad.export_model_json(session)
|
||||
|
||||
from simplecadapi.translator.solidworks_translator import SolidWorksTranslator
|
||||
|
||||
translator = SolidWorksTranslator(source_kernel_fallback=True)
|
||||
first = translator.translate_model_json(model_json).content
|
||||
second = translator.translate_model_json(model_json).content
|
||||
|
||||
self.assertEqual(first, second)
|
||||
compile(first, "<solidworks-fallback-script>", "exec")
|
||||
|
||||
def test_script_owns_com_and_only_its_created_document(self):
|
||||
from simplecadapi.translator.solidworks_translator import SolidWorksTranslator
|
||||
|
||||
script = (
|
||||
SolidWorksTranslator(visible=True)
|
||||
.translate_model_json(_rectangle_extrusion_model())
|
||||
.content
|
||||
)
|
||||
|
||||
main_offset = script.index("def main():")
|
||||
coinit_offset = script.index("pythoncom.CoInitialize()", main_offset)
|
||||
runtime_offset = script.index(
|
||||
"runtime = SimpleCADSolidWorksRuntime", main_offset
|
||||
)
|
||||
self.assertLess(coinit_offset, runtime_offset)
|
||||
self.assertEqual(script.count("pythoncom.CoInitialize()"), 1)
|
||||
self.assertIn("self.sw.CloseDoc(str(_maybe_call(self.model.GetTitle)))", script)
|
||||
self.assertIn("if not self.visible:", script)
|
||||
self.assertIn("self.sw.ExitApp()", script)
|
||||
|
||||
def test_unsupported_result_operation_is_rejected_before_host_execution(self):
|
||||
with GraphSession() as session:
|
||||
scad.make_box_rsolid(width=1.0, height=2.0, depth=3.0)
|
||||
|
||||
from simplecadapi.translator.solidworks_translator import SolidWorksTranslator
|
||||
|
||||
with self.assertRaises(TranslationRequestError):
|
||||
SolidWorksTranslator().translate_model_json(scad.export_model_json(session))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user