test_stream_reader.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from panda3d.core import StreamReader, StringStream
  2. import pytest
  3. def test_streamreader_string():
  4. # Empty string
  5. stream = StringStream(b'\x00\x00')
  6. reader = StreamReader(stream, False)
  7. assert reader.get_string() == ''
  8. # String size but no string contents
  9. stream = StringStream(b'\x01\x00')
  10. reader = StreamReader(stream, False)
  11. assert reader.get_string() == ''
  12. # String of length 1
  13. stream = StringStream(b'\x01\x00A')
  14. reader = StreamReader(stream, False)
  15. assert reader.get_string() == 'A'
  16. # String with excess data
  17. stream = StringStream(b'\x01\x00AB')
  18. reader = StreamReader(stream, False)
  19. assert reader.get_string() == 'A'
  20. # EOF before end of string
  21. stream = StringStream(b'\x03\x00AB')
  22. reader = StreamReader(stream, False)
  23. assert reader.get_string() == 'AB'
  24. # Preserves null bytes
  25. stream = StringStream(b'\x02\x00\x00\x00')
  26. reader = StreamReader(stream, False)
  27. assert reader.get_string() == '\x00\x00'
  28. def test_streamreader_string32():
  29. # Empty string
  30. stream = StringStream(b'\x00\x00\x00\x00')
  31. reader = StreamReader(stream, False)
  32. assert reader.get_string32() == ''
  33. # String size but no string contents
  34. stream = StringStream(b'\x01\x00\x00\x00')
  35. reader = StreamReader(stream, False)
  36. assert reader.get_string32() == ''
  37. # String of length 1
  38. stream = StringStream(b'\x01\x00\x00\x00A')
  39. reader = StreamReader(stream, False)
  40. assert reader.get_string32() == 'A'
  41. # String with excess data
  42. stream = StringStream(b'\x01\x00\x00\x00AB')
  43. reader = StreamReader(stream, False)
  44. assert reader.get_string32() == 'A'
  45. # EOF before end of string
  46. stream = StringStream(b'\x04\x00\x00\x00AB')
  47. reader = StreamReader(stream, False)
  48. assert reader.get_string32() == 'AB'
  49. # Preserves null bytes
  50. stream = StringStream(b'\x02\x00\x00\x00\x00\x00')
  51. reader = StreamReader(stream, False)
  52. assert reader.get_string32() == '\x00\x00'
  53. def test_streamreader_z_string():
  54. # Empty stream
  55. stream = StringStream(b'')
  56. reader = StreamReader(stream, False)
  57. assert reader.get_z_string() == ''
  58. # Empty string
  59. stream = StringStream(b'\x00')
  60. reader = StreamReader(stream, False)
  61. assert reader.get_z_string() == ''
  62. # String of length 1
  63. stream = StringStream(b'A\x00')
  64. reader = StreamReader(stream, False)
  65. assert reader.get_z_string() == 'A'
  66. # String with excess data
  67. stream = StringStream(b'ABC\x00AB')
  68. reader = StreamReader(stream, False)
  69. assert reader.get_z_string() == 'ABC'
  70. # EOF before end of string
  71. stream = StringStream(b'ABC')
  72. reader = StreamReader(stream, False)
  73. assert reader.get_z_string() == 'ABC'
  74. def test_streamreader_fixed_string():
  75. # Zero-length string
  76. stream = StringStream(b'ABC')
  77. reader = StreamReader(stream, False)
  78. assert reader.get_fixed_string(0) == ''
  79. # Empty stream
  80. stream = StringStream(b'')
  81. reader = StreamReader(stream, False)
  82. assert reader.get_fixed_string(1) == ''
  83. # Empty string
  84. stream = StringStream(b'\x00')
  85. reader = StreamReader(stream, False)
  86. assert reader.get_fixed_string(1) == ''
  87. # String of length 1
  88. stream = StringStream(b'A')
  89. reader = StreamReader(stream, False)
  90. assert reader.get_fixed_string(1) == 'A'
  91. # String of length 1, excess data
  92. stream = StringStream(b'ABC\x00')
  93. reader = StreamReader(stream, False)
  94. assert reader.get_fixed_string(1) == 'A'
  95. # EOF before end of string
  96. stream = StringStream(b'AB')
  97. reader = StreamReader(stream, False)
  98. assert reader.get_fixed_string(4) == 'AB'
  99. def test_streamreader_readline():
  100. # Empty stream
  101. stream = StringStream(b'')
  102. reader = StreamReader(stream, False)
  103. assert reader.readline() == b''
  104. assert reader.readline() == b''
  105. # Single line without newline
  106. stream = StringStream(b'A')
  107. reader = StreamReader(stream, False)
  108. assert reader.readline() == b'A'
  109. assert reader.readline() == b''
  110. # Single newline
  111. stream = StringStream(b'\n')
  112. reader = StreamReader(stream, False)
  113. assert reader.readline() == b'\n'
  114. assert reader.readline() == b''
  115. # Line with text followed by empty line
  116. stream = StringStream(b'A\n\n')
  117. reader = StreamReader(stream, False)
  118. assert reader.readline() == b'A\n'
  119. assert reader.readline() == b'\n'
  120. assert reader.readline() == b''
  121. # Preserve null byte
  122. stream = StringStream(b'\x00\x00')
  123. reader = StreamReader(stream, False)
  124. assert reader.readline() == b'\x00\x00'