test_iostream.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. from panda3d.core import StringStream
  2. import pytest
  3. ISTREAM_DATA = b'abcdefghijklmnopqrstuvwxyz' * 500
  4. @pytest.fixture
  5. def istream():
  6. return StringStream(ISTREAM_DATA)
  7. def test_istream_readall(istream):
  8. assert istream.readall() == ISTREAM_DATA
  9. assert istream.readall() == b''
  10. assert istream.readall() == b''
  11. assert istream.tellg() == len(ISTREAM_DATA)
  12. def test_istream_read(istream):
  13. assert istream.read() == ISTREAM_DATA
  14. assert istream.read() == b''
  15. assert istream.read() == b''
  16. assert istream.tellg() == len(ISTREAM_DATA)
  17. def test_istream_read_size(istream):
  18. assert istream.read(100) == ISTREAM_DATA[:100]
  19. assert istream.read(5000) == ISTREAM_DATA[100:5100]
  20. assert istream.read(5000) == ISTREAM_DATA[5100:10100]
  21. assert istream.read(5000) == ISTREAM_DATA[10100:15100]
  22. assert istream.read() == b''
  23. assert istream.tellg() == len(ISTREAM_DATA)
  24. def test_istream_read1(istream):
  25. accumulated = b''
  26. data = istream.read1()
  27. while data:
  28. accumulated += data
  29. data = istream.read1()
  30. assert accumulated == ISTREAM_DATA
  31. assert istream.tellg() == len(ISTREAM_DATA)
  32. def test_istream_read1_size(istream):
  33. accumulated = b''
  34. data = istream.read1(4000)
  35. while data:
  36. accumulated += data
  37. data = istream.read1(4000)
  38. assert accumulated == ISTREAM_DATA
  39. assert istream.tellg() == len(ISTREAM_DATA)
  40. def test_istream_readinto(istream):
  41. ba = bytearray()
  42. assert istream.readinto(ba) == 0
  43. assert istream.tellg() == 0
  44. ba = bytearray(10)
  45. assert istream.readinto(ba) == 10
  46. assert ba == ISTREAM_DATA[:10]
  47. assert istream.tellg() == 10
  48. ba = bytearray(len(ISTREAM_DATA))
  49. assert istream.readinto(ba) == len(ISTREAM_DATA) - 10
  50. assert ba[:len(ISTREAM_DATA)-10] == ISTREAM_DATA[10:]
  51. assert istream.tellg() == len(ISTREAM_DATA)
  52. def test_istream_readline():
  53. # Empty stream
  54. stream = StringStream(b'')
  55. assert stream.readline() == b''
  56. assert stream.readline() == b''
  57. # Single line without newline
  58. stream = StringStream(b'A')
  59. assert stream.readline() == b'A'
  60. assert stream.readline() == b''
  61. # Single newline
  62. stream = StringStream(b'\n')
  63. assert stream.readline() == b'\n'
  64. assert stream.readline() == b''
  65. # Line with text followed by empty line
  66. stream = StringStream(b'A\n\n')
  67. assert stream.readline() == b'A\n'
  68. assert stream.readline() == b'\n'
  69. assert stream.readline() == b''
  70. # Preserve null byte
  71. stream = StringStream(b'\x00\x00')
  72. assert stream.readline() == b'\x00\x00'
  73. def test_istream_readlines():
  74. istream = StringStream(b'a')
  75. assert istream.readlines() == [b'a']
  76. assert istream.readlines() == []
  77. istream = StringStream(b'a\nb\nc\n')
  78. assert istream.readlines() == [b'a\n', b'b\n', b'c\n']
  79. istream = StringStream(b'\na\nb\nc')
  80. assert istream.readlines() == [b'\n', b'a\n', b'b\n', b'c']
  81. istream = StringStream(b'\n\n\n')
  82. assert istream.readlines() == [b'\n', b'\n', b'\n']
  83. def test_istream_iter():
  84. istream = StringStream(b'a')
  85. assert tuple(istream) == (b'a',)
  86. assert tuple(istream) == ()
  87. istream = StringStream(b'a\nb\nc\n')
  88. assert tuple(istream) == (b'a\n', b'b\n', b'c\n')
  89. istream = StringStream(b'\na\nb\nc')
  90. assert tuple(istream) == (b'\n', b'a\n', b'b\n', b'c')
  91. istream = StringStream(b'\n\n\n')
  92. assert tuple(istream) == (b'\n', b'\n', b'\n')