"""Import surface: every Inc 0 module present, and nothing started a thread.""" import sys import threading import OCP def test_version_and_kernel(): assert OCP.__version__.startswith(OCP.__occt_version__), ( f"wheel version {OCP.__version__} must be prefixed by the OCCT it " f"wraps ({OCP.__occt_version__})" ) def test_every_module_is_importable_and_attribute_reachable(): for name in OCP._OCP.__all_modules__: assert f"OCP.{name}" in sys.modules, f"OCP.{name} not in sys.modules" assert getattr(OCP, name) is sys.modules[f"OCP.{name}"] def test_inc0_modules_present(): expected = { "Standard", "StdFail", "gp", "TopAbs", "TopLoc", "TopoDS", "TopTools", "TopExp", "Poly", "BRep", "BinTools", } assert expected <= set(OCP._OCP.__all_modules__) def test_classes_report_their_real_module(): from OCP.TopoDS import TopoDS_Shape # Anything importing OCP.TopoDS expects the class to belong there — a flat # extension namespace would break repr and stub generation alike. assert TopoDS_Shape.__module__ == "OCP.TopoDS" def test_import_starts_no_threads(): # cad_pool forks from a forkserver whose preload imports OCP. A thread # started at import would not survive the fork, so this invariant is what # keeps fillet isolation at ~30 ms per job instead of a ~1.3 s respawn. assert threading.active_count() == 1, threading.enumerate() def test_enums_export_their_values(): from OCP.TopAbs import TopAbs_FACE, TopAbs_ShapeEnum assert TopAbs_FACE == TopAbs_ShapeEnum.TopAbs_FACE assert int(TopAbs_FACE) == 4 # OCCT's numeric value, relied on by callers def test_static_methods_carry_the_s_suffix(): from OCP.BRep import BRep_Tool from OCP.TopExp import TopExp from OCP.TopoDS import TopoDS for holder, name in [ (TopExp, "MapShapes_s"), (TopoDS, "Face_s"), (BRep_Tool, "Triangulation_s"), ]: assert hasattr(holder, name), f"{holder.__name__}.{name} missing"