diff --git a/backend/tests/test_evidence_v2_to_cdsl.py b/backend/tests/test_evidence_v2_to_cdsl.py index 4ddc3819..31efd0dc 100644 --- a/backend/tests/test_evidence_v2_to_cdsl.py +++ b/backend/tests/test_evidence_v2_to_cdsl.py @@ -174,6 +174,44 @@ class EvidenceV2ToCdslTests(unittest.TestCase): self.assertTrue(comparison["numeric_geometry_match"]) self.assertTrue(comparison["topology_counts_match"]) + def _chamfer_only_fixture(self, dimensions: list[float], props: dict | None = None) -> dict: + return { + "schema": "solidworks.cad_evidence.v2", + "status": "complete_with_blockers", + "self_validation": {"feature_contracts": []}, + "features": [{ + "sequence": 1, "name": "Chamfer", "effective_type": "Chamfer", "stable_id": "chamfer", + "definition_properties": {"values": props or {}}, + "definition_methods": {"values": {}}, "parents": [], "selections": [], + "dimensions": [{"system_value": value} for value in dimensions], + }], + } + + def test_chamfer_exports_radian_angle_instead_of_silent_equidistant_distance(self) -> None: + # Distance-Angle 倒角:dimensions=[0.001m, 0.785398],无 EdgeChamferAngle 属性, + # 走 raw 兜底路径。角度 system value 为弧度,distance_mm 按米→毫米换算。 + fixture = self._chamfer_only_fixture([0.001, 0.785398]) + cdsl, _ = convert_evidence(fixture, source_name="chamfer-angle.solidworks_evidence_v2.json") + params = next(item for item in cdsl["features"] if item["atomic_id"] == "chamfer")["params"] + self.assertAlmostEqual(params["distance_mm"], 1.0, places=9) + self.assertNotIn("distance_2_mm", params) + self.assertAlmostEqual(params["angle_rad"], 0.785398, places=5) + + def test_chamfer_prefers_edge_chamfer_angle_property(self) -> None: + fixture = self._chamfer_only_fixture([0.001, 0.785398], props={"EdgeChamferAngle": 1.047197551}) + cdsl, _ = convert_evidence(fixture, source_name="chamfer-prop.solidworks_evidence_v2.json") + params = next(item for item in cdsl["features"] if item["atomic_id"] == "chamfer")["params"] + self.assertAlmostEqual(params["distance_mm"], 1.0, places=9) + self.assertAlmostEqual(params["angle_rad"], 1.047197551, places=6) + + def test_chamfer_keeps_equidistant_form_when_angle_is_missing(self) -> None: + fixture = self._chamfer_only_fixture([0.001]) + cdsl, _ = convert_evidence(fixture, source_name="chamfer-eq.solidworks_evidence_v2.json") + params = next(item for item in cdsl["features"] if item["atomic_id"] == "chamfer")["params"] + self.assertAlmostEqual(params["distance_mm"], 1.0, places=9) + self.assertNotIn("angle_rad", params) + self.assertNotIn("distance_2_mm", params) + if __name__ == "__main__": unittest.main()