cpython/Lib/test/test_buffer.py

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()