81 lines
3.3 KiB
Python
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()
|