| |
|
|
| 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): |
|
|
| @property |
| 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): |
|
|
| @cached_property |
| 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()): |
| |
| 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)) |
|
|