Test round-tripping of binary reel headers to and from a byte stream.

This commit is contained in:
Robert Smallshire
2015-05-12 10:01:42 +02:00
parent 5bfba47daf
commit d0a1eb5a47
3 changed files with 40 additions and 1 deletions
+16
View File
@@ -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.
-1
View File
@@ -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
+24
View File
@@ -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))