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