mirror of
https://github.com/wassname/segpy.git
synced 2026-06-27 18:25:38 +08:00
Test round-tripping of binary reel headers to and from a byte stream.
This commit is contained in:
@@ -55,6 +55,22 @@ class Header:
|
||||
def __getattr__(self, name):
|
||||
raise AttributeError("Object of type {!r} has no attribute {!r}".format(self.__class__.__name__, name))
|
||||
|
||||
def __repr__(self):
|
||||
return "{}({})".format(
|
||||
self.__class__.__name__,
|
||||
', '.join("{}={}".format(k, getattr(self, k)) for k in self.ordered_field_names()))
|
||||
|
||||
|
||||
def are_equal(self, other):
|
||||
"""Compare two headers for equality.
|
||||
|
||||
Note:
|
||||
This is not implemented as __eq__() to prevent recursive behaviour in the header descriptor.
|
||||
"""
|
||||
if type(self) != type(other):
|
||||
return False
|
||||
return all(getattr(self, field_name) == getattr(other, field_name) for field_name in self.ordered_field_names())
|
||||
|
||||
|
||||
class FormatMeta(type):
|
||||
"""A metaclass for header format classes.
|
||||
|
||||
@@ -169,7 +169,6 @@ def read_binary_reel_header(fh, endian='>'):
|
||||
little-endian (non-standard)
|
||||
"""
|
||||
header_packer = make_header_packer(BinaryReelHeader, endian)
|
||||
fh.seek(TEXTUAL_HEADER_NUM_BYTES) # Consider using from_one_based(BinaryReelHeader.START_OFFSET_IN_BYTES)
|
||||
buffer = fh.read(BinaryReelHeader.LENGTH_IN_BYTES)
|
||||
reel_header = header_packer.unpack(buffer)
|
||||
return reel_header
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import unittest
|
||||
from hypothesis import given
|
||||
from io import BytesIO
|
||||
from hypothesis.specifiers import sampled_from
|
||||
from segpy.binary_reel_header import BinaryReelHeader
|
||||
from segpy.header import are_equal
|
||||
|
||||
from segpy.toolkit import write_binary_reel_header, read_binary_reel_header
|
||||
from test.strategies import header
|
||||
|
||||
|
||||
class TestBinaryReelHeader(unittest.TestCase):
|
||||
|
||||
@given(header(BinaryReelHeader),
|
||||
sampled_from(['<', '>']))
|
||||
def test_roundtrip(self, write_header, endian):
|
||||
with BytesIO() as write_stream:
|
||||
write_binary_reel_header(write_stream, write_header, endian)
|
||||
written_steam = write_stream.getvalue()
|
||||
|
||||
with BytesIO(written_steam) as read_stream:
|
||||
read_header = read_binary_reel_header(read_stream, endian)
|
||||
|
||||
self.assertTrue(are_equal(write_header, read_header))
|
||||
Reference in New Issue
Block a user