Files
cpython/Lib/test/test_buffer.py
Serhiy Storchaka b8e54dd806 Issue #22995: Instances of extension types with a state that aren't
subclasses of list or dict and haven't implemented any pickle-related
methods (__reduce__, __reduce_ex__, __getnewargs__, __getnewargs_ex__,
or __getstate__), can no longer be pickled.  Including memoryview.
2015-12-30 20:43:29 +02:00

59 lines
1.8 KiB
Python

"""Unit tests for buffer objects.
For now, tests just new or changed functionality.
"""
import copy
import pickle
import sys
import unittest
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):
copy.copy(buf)
def test_pickle(self):
buf = buffer(b'abc')
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
with self.assertRaises(TypeError):
pickle.dumps(buf, proto)
def test_main():
with test_support.check_py3k_warnings(("buffer.. not supported",
DeprecationWarning)):
test_support.run_unittest(BufferTests)
if __name__ == "__main__":
test_main()