tests: test various things that could suffer from libc++ eof() bug
This commit is contained in:
parent
84a1315104
commit
e4daa0bf16
|
|
@ -0,0 +1,9 @@
|
|||
from panda3d import core
|
||||
import random
|
||||
|
||||
|
||||
def test_hashval_hex():
|
||||
hex = '%032x' % random.getrandbits(32 * 4)
|
||||
val = core.HashVal()
|
||||
val.input_hex(core.StringStream(hex.encode('ascii')))
|
||||
assert str(val) == hex.lower()
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
from panda3d.core import Multifile, StringStream, IStreamWrapper
|
||||
|
||||
|
||||
def test_multifile_read_empty():
|
||||
stream = StringStream(b'pmf\x00\n\r\x01\x00\x01\x00\x01\x00\x00\x00\xdb\x9d7\\\x00\x00\x00\x00')
|
||||
wrapper = IStreamWrapper(stream)
|
||||
|
||||
m = Multifile()
|
||||
assert m.open_read(wrapper)
|
||||
assert m.is_read_valid()
|
||||
assert m.get_num_subfiles() == 0
|
||||
m.close()
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
from panda3d.core import StreamReader, StringStream
|
||||
import pytest
|
||||
|
||||
|
||||
def test_streamreader_string():
|
||||
# Empty string
|
||||
stream = StringStream(b'\x00\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string() == ''
|
||||
|
||||
# String size but no string contents
|
||||
stream = StringStream(b'\x01\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string() == ''
|
||||
|
||||
# String of length 1
|
||||
stream = StringStream(b'\x01\x00A')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string() == 'A'
|
||||
|
||||
# String with excess data
|
||||
stream = StringStream(b'\x01\x00AB')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string() == 'A'
|
||||
|
||||
# EOF before end of string
|
||||
stream = StringStream(b'\x03\x00AB')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string() == 'AB'
|
||||
|
||||
# Preserves null bytes
|
||||
stream = StringStream(b'\x02\x00\x00\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string() == '\x00\x00'
|
||||
|
||||
|
||||
def test_streamreader_string32():
|
||||
# Empty string
|
||||
stream = StringStream(b'\x00\x00\x00\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string32() == ''
|
||||
|
||||
# String size but no string contents
|
||||
stream = StringStream(b'\x01\x00\x00\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string32() == ''
|
||||
|
||||
# String of length 1
|
||||
stream = StringStream(b'\x01\x00\x00\x00A')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string32() == 'A'
|
||||
|
||||
# String with excess data
|
||||
stream = StringStream(b'\x01\x00\x00\x00AB')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string32() == 'A'
|
||||
|
||||
# EOF before end of string
|
||||
stream = StringStream(b'\x04\x00\x00\x00AB')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string32() == 'AB'
|
||||
|
||||
# Preserves null bytes
|
||||
stream = StringStream(b'\x02\x00\x00\x00\x00\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_string32() == '\x00\x00'
|
||||
|
||||
|
||||
def test_streamreader_z_string():
|
||||
# Empty stream
|
||||
stream = StringStream(b'')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_z_string() == ''
|
||||
|
||||
# Empty string
|
||||
stream = StringStream(b'\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_z_string() == ''
|
||||
|
||||
# String of length 1
|
||||
stream = StringStream(b'A\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_z_string() == 'A'
|
||||
|
||||
# String with excess data
|
||||
stream = StringStream(b'ABC\x00AB')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_z_string() == 'ABC'
|
||||
|
||||
# EOF before end of string
|
||||
stream = StringStream(b'ABC')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_z_string() == 'ABC'
|
||||
|
||||
|
||||
def test_streamreader_fixed_string():
|
||||
# Zero-length string
|
||||
stream = StringStream(b'ABC')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_fixed_string(0) == ''
|
||||
|
||||
# Empty stream
|
||||
stream = StringStream(b'')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_fixed_string(1) == ''
|
||||
|
||||
# Empty string
|
||||
stream = StringStream(b'\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_fixed_string(1) == ''
|
||||
|
||||
# String of length 1
|
||||
stream = StringStream(b'A')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_fixed_string(1) == 'A'
|
||||
|
||||
# String of length 1, excess data
|
||||
stream = StringStream(b'ABC\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_fixed_string(1) == 'A'
|
||||
|
||||
# EOF before end of string
|
||||
stream = StringStream(b'AB')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.get_fixed_string(4) == 'AB'
|
||||
|
||||
|
||||
def test_streamreader_readline():
|
||||
# Empty stream
|
||||
stream = StringStream(b'')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.readline() == b''
|
||||
assert reader.readline() == b''
|
||||
|
||||
# Single line without newline
|
||||
stream = StringStream(b'A')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.readline() == b'A'
|
||||
assert reader.readline() == b''
|
||||
|
||||
# Single newline
|
||||
stream = StringStream(b'\n')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.readline() == b'\n'
|
||||
assert reader.readline() == b''
|
||||
|
||||
# Line with text followed by empty line
|
||||
stream = StringStream(b'A\n\n')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.readline() == b'A\n'
|
||||
assert reader.readline() == b'\n'
|
||||
assert reader.readline() == b''
|
||||
|
||||
# Preserve null byte
|
||||
stream = StringStream(b'\x00\x00')
|
||||
reader = StreamReader(stream, False)
|
||||
assert reader.readline() == b'\x00\x00'
|
||||
Loading…
Reference in New Issue