65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
"""Unit tests for buffer objects.
|
|
|
|
For now, tests just new or changed functionality.
|
|
|
|
"""
|
|
|
|
import copy
|
|
import pickle
|
|
import sys
|
|
import unittest
|
|
import warnings
|
|
from test import test_support
|
|
|
|
class BufferTests(unittest.TestCase):
|
|
|
|
def test_extended_getslice(self):
|
|
# Test extended slicing by comparing with list slicing.
|
|
s = "".join(chr(c) for c in list(range(255, -1, -1)))
|
|
b = buffer(s)
|
|
indices = (0, None, 1, 3, 19, 300, -1, -2, -31, -300)
|
|
for start in indices:
|
|
for stop in indices:
|
|
# Skip step 0 (invalid)
|
|
for step in indices[1:]:
|
|
self.assertEqual(b[start:stop:step],
|
|
s[start:stop:step])
|
|
|
|
def test_newbuffer_interface(self):
|
|
# Test that the buffer object has the new buffer interface
|
|
# as used by the memoryview object
|
|
s = "".join(chr(c) for c in list(range(255, -1, -1)))
|
|
b = buffer(s)
|
|
m = memoryview(b) # Should not raise an exception
|
|
self.assertEqual(m.tobytes(), s)
|
|
|
|
def test_large_buffer_size_and_offset(self):
|
|
data = bytearray('hola mundo')
|
|
buf = buffer(data, sys.maxsize, sys.maxsize)
|
|
self.assertEqual(buf[:4096], "")
|
|
|
|
def test_copy(self):
|
|
buf = buffer(b'abc')
|
|
with self.assertRaises(TypeError), warnings.catch_warnings():
|
|
warnings.filterwarnings('ignore', ".*buffer", DeprecationWarning)
|
|
copy.copy(buf)
|
|
|
|
@test_support.cpython_only
|
|
def test_pickle(self):
|
|
buf = buffer(b'abc')
|
|
for proto in range(2):
|
|
with self.assertRaises(TypeError):
|
|
pickle.dumps(buf, proto)
|
|
with test_support.check_py3k_warnings(
|
|
(".*buffer", DeprecationWarning)):
|
|
pickle.dumps(buf, 2)
|
|
|
|
|
|
def test_main():
|
|
with test_support.check_py3k_warnings(("buffer.. not supported",
|
|
DeprecationWarning)):
|
|
test_support.run_unittest(BufferTests)
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|