Files
cadSet/text-to-cad/tests/python/skills/cad/cadpy/test_step_metadata.py
T
2026-07-22 19:38:36 +08:00

81 lines
3.3 KiB
Python

import unittest
from pathlib import Path
from cadpy.step_metadata import (
TEXT_TO_CAD_GENERATOR,
inject_text_to_cad_step_metadata,
read_text_to_cad_step_metadata,
)
from tests.python.support.tmp_root import temporary_directory
MINIMAL_STEP = """ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');
ENDSEC;
DATA;
#1=PRODUCT_DEFINITION('design','',#2,#3);
#4=PRODUCT_DEFINITION_SHAPE('','',#1);
#5=SHAPE_REPRESENTATION('',(#6),#7);
#7=(GEOMETRIC_REPRESENTATION_CONTEXT(3) REPRESENTATION_CONTEXT('Context #1','3D'));
ENDSEC;
END-ISO-10303-21;
"""
class TextToCadStepMetadataTests(unittest.TestCase):
def test_injects_and_reads_text_to_cad_metadata(self) -> None:
with temporary_directory(prefix="cad-step-metadata-") as temp_dir:
step_path = Path(temp_dir) / "fixture.step"
step_path.write_text(MINIMAL_STEP, encoding="utf-8")
inject_text_to_cad_step_metadata(
step_path,
entry_kind="assembly",
source_hash="source-hash-123",
)
metadata = read_text_to_cad_step_metadata(step_path)
self.assertEqual(TEXT_TO_CAD_GENERATOR, metadata.get("generator"))
self.assertEqual("assembly", metadata.get("entryKind"))
self.assertEqual("source-hash-123", metadata.get("sourceHash"))
step_text = step_path.read_text(encoding="utf-8")
self.assertIn("PROPERTY_DEFINITION('cadpy metadata','cadpy:entryKind'", step_text)
def test_reads_tail_metadata_without_full_file_scan(self) -> None:
with temporary_directory(prefix="cad-step-metadata-tail-") as temp_dir:
step_path = Path(temp_dir) / "large-fixture.step"
metadata_block = "\n".join(
[
"#100=DESCRIPTIVE_REPRESENTATION_ITEM('cadpy:generator','cadpy');",
"#101=REPRESENTATION('cadpy:generator',(#100),#7);",
"#102=PROPERTY_DEFINITION('cadpy metadata','cadpy:generator',#1);",
"#103=PROPERTY_DEFINITION_REPRESENTATION(#102,#101);",
"#104=DESCRIPTIVE_REPRESENTATION_ITEM('cadpy:entryKind','assembly');",
"#105=REPRESENTATION('cadpy:entryKind',(#104),#7);",
"#106=PROPERTY_DEFINITION('cadpy metadata','cadpy:entryKind',#1);",
"#107=PROPERTY_DEFINITION_REPRESENTATION(#106,#105);",
"#112=DESCRIPTIVE_REPRESENTATION_ITEM('cadpy:sourceHash','source-hash-tail');",
"#113=REPRESENTATION('cadpy:sourceHash',(#112),#7);",
"#114=PROPERTY_DEFINITION('cadpy metadata','cadpy:sourceHash',#1);",
"#115=PROPERTY_DEFINITION_REPRESENTATION(#114,#113);",
]
)
step_path.write_text(
"ISO-10303-21;\nDATA;\n"
+ ("#9=PRODUCT('padding','padding','',(#7));\n" * 40000)
+ metadata_block
+ "\nENDSEC;\nEND-ISO-10303-21;\n",
encoding="utf-8",
)
metadata = read_text_to_cad_step_metadata(step_path)
self.assertEqual(TEXT_TO_CAD_GENERATOR, metadata.get("generator"))
self.assertEqual("assembly", metadata.get("entryKind"))
self.assertEqual("source-hash-tail", metadata.get("sourceHash"))
if __name__ == "__main__":
unittest.main()