77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
import pytest
|
|
|
|
xfail = pytest.mark.xfail
|
|
skip = pytest.mark.skip
|
|
skipif = pytest.mark.skipif
|
|
|
|
import os, math, random, collections, itertools, io, hashlib, binascii
|
|
|
|
from construct import *
|
|
from construct.lib import *
|
|
|
|
|
|
class ZeroIO(io.BufferedIOBase):
|
|
def read(self, __size=None):
|
|
if __size is not None:
|
|
return bytes(__size)
|
|
else:
|
|
return bytes(0)
|
|
|
|
def read1(self, __size=0):
|
|
return bytes(__size)
|
|
|
|
|
|
ident = lambda x: x
|
|
devzero = ZeroIO()
|
|
|
|
|
|
def raises(func, *args, **kw):
|
|
try:
|
|
return func(*args, **kw)
|
|
except Exception as e:
|
|
return e.__class__
|
|
|
|
|
|
def common(format, datasample, objsample, sizesample=SizeofError, **kw):
|
|
obj = format.parse(datasample, **kw)
|
|
assert obj == objsample
|
|
data = format.build(objsample, **kw)
|
|
assert data == datasample
|
|
# following are implied by above (re-parse and re-build)
|
|
# assert format.parse(format.build(obj)) == obj
|
|
# assert format.build(format.parse(data)) == data
|
|
if isinstance(sizesample, int):
|
|
size = format.sizeof(**kw)
|
|
assert size == sizesample
|
|
else:
|
|
size = raises(format.sizeof, **kw)
|
|
assert size == sizesample
|
|
|
|
|
|
def setattrs(obj, **kwargs):
|
|
for name, value in kwargs.items():
|
|
setattr(obj, name, value)
|
|
return obj
|
|
|
|
|
|
def commonhex(format, hexdata):
|
|
commonbytes(format, binascii.unhexlify(hexdata))
|
|
|
|
|
|
def commondumpdeprecated(format, filename):
|
|
filename = "tests/deprecated_gallery/blobs/" + filename
|
|
with open(filename, "rb") as f:
|
|
data = f.read()
|
|
commonbytes(format, data)
|
|
|
|
|
|
def commondump(format, filename):
|
|
filename = "tests/gallery/blobs/" + filename
|
|
with open(filename, "rb") as f:
|
|
data = f.read()
|
|
commonbytes(format, data)
|
|
|
|
|
|
def commonbytes(format, data):
|
|
obj = format.parse(data)
|
|
data2 = format.build(obj)
|