新增cdsl
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
import json
|
||||
import tempfile
|
||||
import unittest
|
||||
from copy import deepcopy
|
||||
from pathlib import Path
|
||||
@@ -9,7 +11,7 @@ from pathlib import Path
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
sys.path.insert(0, str(ROOT / "json_to_cdsl"))
|
||||
|
||||
from evidence_v2_to_cdsl import StepInspector, convert_evidence
|
||||
from evidence_v2_to_cdsl import StepInspector, batch_convert, convert_evidence
|
||||
|
||||
|
||||
def _identity(stable_id: str, *, kind: str = "feature", geometry: dict | None = None) -> dict:
|
||||
@@ -59,6 +61,42 @@ FIXTURE = {
|
||||
|
||||
|
||||
class EvidenceV2ToCdslTests(unittest.TestCase):
|
||||
def test_batch_conversion_recurses_and_records_relative_source_path(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temporary_directory:
|
||||
root = Path(temporary_directory)
|
||||
evidence_dir = root / "evidence"
|
||||
source = evidence_dir / "category" / "part.solidworks_evidence_v2.json"
|
||||
source.parent.mkdir(parents=True)
|
||||
source.write_text(json.dumps(FIXTURE), encoding="utf-8")
|
||||
|
||||
output_dir = root / "output"
|
||||
manifest = batch_convert(evidence_dir, output_dir)
|
||||
|
||||
self.assertEqual(manifest["input_count"], 1)
|
||||
self.assertEqual(manifest["converted_count"], 1)
|
||||
self.assertEqual(manifest["results"][0]["source"], "category/part.solidworks_evidence_v2.json")
|
||||
diagnostic = json.loads((output_dir / "part.diagnostic.json").read_text(encoding="utf-8"))
|
||||
self.assertEqual(diagnostic["source"], "category/part.solidworks_evidence_v2.json")
|
||||
|
||||
def test_batch_conversion_uses_full_filename_and_disambiguates_normalized_ids(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temporary_directory:
|
||||
root = Path(temporary_directory)
|
||||
evidence_dir = root / "evidence"
|
||||
sources = [
|
||||
evidence_dir / "first" / "14.Rod Nut.solidworks_evidence_v2.json",
|
||||
evidence_dir / "second" / "14 Rod Nut.solidworks_evidence_v2.json",
|
||||
]
|
||||
for source in sources:
|
||||
source.parent.mkdir(parents=True, exist_ok=True)
|
||||
source.write_text(json.dumps(FIXTURE), encoding="utf-8")
|
||||
|
||||
manifest = batch_convert(evidence_dir, root / "output")
|
||||
|
||||
self.assertEqual(manifest["converted_count"], 2)
|
||||
part_ids = {item["part_id"] for item in manifest["results"]}
|
||||
self.assertEqual(len(part_ids), 2)
|
||||
self.assertTrue(all(part_id.startswith("14-Rod-Nut-") for part_id in part_ids))
|
||||
|
||||
def test_converts_fixed_evidence_v2_fixture_to_semantic_cdsl(self) -> None:
|
||||
cdsl, diagnostic = convert_evidence(FIXTURE, source_name="fixture.solidworks_evidence_v2.json")
|
||||
atoms = {feature["atomic_id"] for feature in cdsl["features"]}
|
||||
|
||||
Reference in New Issue
Block a user