mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -04:00
tests: test various things that could suffer from libc++ eof() bug
This commit is contained in:
parent
84a1315104
commit
e4daa0bf16
9
tests/express/test_hashval.py
Normal file
9
tests/express/test_hashval.py
Normal file
@ -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()
|
12
tests/express/test_multifile.py
Normal file
12
tests/express/test_multifile.py
Normal file
@ -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()
|
157
tests/prc/test_stream_reader.py
Normal file
157
tests/prc/test_stream_reader.py
Normal file
@ -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…
x
Reference in New Issue
Block a user