Spaces:
Running
Running
| # -*- coding: utf-8 -*- | |
| from io import BytesIO | |
| import json | |
| from hwp5 import recordstream as RS | |
| from hwp5.recordstream import RecordStream | |
| from hwp5.recordstream import dump_record | |
| from hwp5.recordstream import read_record | |
| from hwp5.recordstream import record_to_json | |
| from hwp5.storage import ExtraItemStorage | |
| from hwp5.tagids import HWPTAG_DOCUMENT_PROPERTIES | |
| from hwp5.tagids import HWPTAG_ID_MAPPINGS | |
| from hwp5.tagids import HWPTAG_PARA_HEADER | |
| from hwp5.utils import cached_property | |
| from . import test_filestructure | |
| class TestBase(test_filestructure.TestBase): | |
| def hwp5file_rec(self): | |
| return RS.Hwp5File(self.olestg) | |
| hwp5file = hwp5file_rec | |
| class TestRecord(TestBase): | |
| def test_read_record(self): | |
| docinfo_stream = self.hwp5file['DocInfo'] | |
| record = read_record(docinfo_stream.open(), 0) | |
| self.assertEqual(HWPTAG_DOCUMENT_PROPERTIES, record['tagid']) | |
| def test_dump_record(self): | |
| docinfo_stream = self.hwp5file['DocInfo'] | |
| record = read_record(docinfo_stream.open(), 0) | |
| stream = BytesIO() | |
| dump_record(stream, record) | |
| stream.seek(0) | |
| record2 = read_record(stream, 0) | |
| self.assertEqual(record2, record) | |
| class TestRecordStream(TestBase): | |
| def docinfo(self): | |
| return RecordStream(self.hwp5file_fs['DocInfo'], | |
| self.hwp5file_fs.header.version) | |
| def test_records(self): | |
| self.assertEqual(67, len(list(self.docinfo.records()))) | |
| def test_records_kwargs_treegroup(self): | |
| records = self.docinfo.records(treegroup=1) | |
| self.assertEqual(66, len(records)) | |
| self.assertEqual(HWPTAG_ID_MAPPINGS, records[0]['tagid']) | |
| records = self.docinfo.records(treegroup=0) | |
| self.assertEqual(1, len(records)) | |
| self.assertEqual(HWPTAG_DOCUMENT_PROPERTIES, records[0]['tagid']) | |
| records = self.bodytext.section(0).records(treegroup=5) | |
| self.assertEqual(26, records[0]['seqno']) | |
| self.assertEqual(37, len(records)) | |
| def test_record(self): | |
| record = self.docinfo.record(0) | |
| self.assertEqual(0, record['seqno']) | |
| record = self.docinfo.record(10) | |
| self.assertEqual(10, record['seqno']) | |
| def test_records_treegrouped(self): | |
| groups = self.docinfo.records_treegrouped() | |
| document_properties_treerecords = next(groups) | |
| self.assertEqual(1, len(document_properties_treerecords)) | |
| idmappings_treerecords = next(groups) | |
| self.assertEqual(66, len(idmappings_treerecords)) | |
| section = self.bodytext.section(0) | |
| for group_idx, records in enumerate(section.records_treegrouped()): | |
| # print group_idx, records[0]['seqno'], len(records) | |
| self.assertEqual(HWPTAG_PARA_HEADER, records[0]['tagid']) | |
| def test_records_treegrouped_as_iterable(self): | |
| groups = self.docinfo.records_treegrouped(group_as_list=False) | |
| group = next(groups) | |
| self.assertFalse(isinstance(group, list)) | |
| def test_records_treegroped_as_list(self): | |
| groups = self.docinfo.records_treegrouped() | |
| group = next(groups) | |
| self.assertTrue(isinstance(group, list)) | |
| def test_records_treegroup(self): | |
| records = self.docinfo.records_treegroup(1) | |
| self.assertEqual(66, len(records)) | |
| self.assertEqual(HWPTAG_ID_MAPPINGS, records[0]['tagid']) | |
| records = self.docinfo.records_treegroup(0) | |
| self.assertEqual(1, len(records)) | |
| self.assertEqual(HWPTAG_DOCUMENT_PROPERTIES, records[0]['tagid']) | |
| records = self.bodytext.section(0).records_treegroup(5) | |
| self.assertEqual(26, records[0]['seqno']) | |
| self.assertEqual(37, len(records)) | |
| class TestHwp5File(TestBase): | |
| def test_if_hwp5file_contains_other_formats(self): | |
| stg = ExtraItemStorage(self.hwp5file) | |
| self.assertTrue('DocInfo.records' in list(stg)) | |
| def test_docinfo(self): | |
| docinfo = self.hwp5file.docinfo | |
| self.assertTrue(isinstance(docinfo, RS.RecordStream)) | |
| records = list(docinfo.records()) | |
| self.assertEqual(67, len(records)) | |
| def test_bodytext(self): | |
| bodytext = self.hwp5file.bodytext | |
| self.assertTrue(isinstance(bodytext, RS.Sections)) | |
| stg = ExtraItemStorage(bodytext) | |
| self.assertEqual(['Section0', 'Section0.records'], list(stg)) | |
| class TestJson(TestBase): | |
| def test_record_to_json(self): | |
| record = next(self.hwp5file.docinfo.records()) | |
| json_string = record_to_json(record) | |
| jsonobject = json.loads(json_string) | |
| self.assertEqual(16, jsonobject['tagid']) | |
| self.assertEqual(0, jsonobject['level']) | |
| self.assertEqual(26, jsonobject['size']) | |
| self.assertEqual(['01 00 01 00 01 00 01 00 01 00 01 00 01 00 00 00', | |
| '00 00 07 00 00 00 05 00 00 00'], | |
| jsonobject['payload']) | |
| self.assertEqual(0, jsonobject['seqno']) | |
| self.assertEqual('HWPTAG_DOCUMENT_PROPERTIES', jsonobject['tagname']) | |
| def test_generate_json(self): | |
| records_json = self.hwp5file.docinfo.records_json() | |
| json_string = ''.join(records_json.generate()) | |
| jsonobject = json.loads(json_string) | |
| self.assertEqual(67, len(jsonobject)) | |