import tempfile from pathlib import Path import unittest import ezdxf from pierzainer_ground.dxf_terrain import read_source_document class MetadataRepairTests(unittest.TestCase): def test_invalid_xdata_is_removed_only_in_cache(self): root=Path(__file__).resolve().parents[1]/'data/cache/test_metadata_repair' root.mkdir(parents=True,exist_ok=True) with tempfile.TemporaryDirectory(dir=root) as folder: folder=Path(folder);source=folder/'source.dxf' doc=ezdxf.new();doc.appids.new('SURVEY_APP') point=doc.modelspace().add_point((214500,447200,45.125)) point.set_xdata('SURVEY_APP',[(1000,'AUDIT_PAYLOAD')]);doc.saveas(source) original=source.read_bytes().replace(b'1000\nAUDIT_PAYLOAD',b'1002\nAUDIT_PAYLOAD').replace(b'1000\r\nAUDIT_PAYLOAD',b'1002\r\nAUDIT_PAYLOAD') source.write_bytes(original) repaired,_=read_source_document(source,folder/'cache') self.assertEqual(tuple(repaired.modelspace().query('POINT')[0].dxf.location),(214500,447200,45.125)) self.assertEqual(source.read_bytes(),original) self.assertFalse(repaired._ground_source_repair['geometry_tags_changed']) self.assertGreater(repaired._ground_source_repair['removed_xdata_tag_pairs'],0) if __name__=='__main__':unittest.main()