bpo-33176: Add a toreadonly() method to memoryviews. (GH-6466) · python/cpython@480ab05
@@ -924,23 +924,30 @@ def verify(self, result, obj=-1,
924924except BufferError: # re-exporter does not provide full information
925925return
926926ex = result.obj if isinstance(result, memoryview) else result
927-self.assertIs(m.obj, ex)
928-self.assertEqual(m.nbytes, expected_len)
929-self.assertEqual(m.itemsize, itemsize)
930-self.assertEqual(m.format, fmt)
931-self.assertEqual(m.readonly, readonly)
932-self.assertEqual(m.ndim, ndim)
933-self.assertEqual(m.shape, tuple(shape))
934-if not (sliced and suboffsets):
935-self.assertEqual(m.strides, tuple(strides))
936-self.assertEqual(m.suboffsets, tuple(suboffsets))
937-938-n = 1 if ndim == 0 else len(lst)
939-self.assertEqual(len(m), n)
940927941-rep = result.tolist() if fmt else result.tobytes()
942-self.assertEqual(rep, lst)
943-self.assertEqual(m, result)
928+def check_memoryview(m, expected_readonly=readonly):
929+self.assertIs(m.obj, ex)
930+self.assertEqual(m.nbytes, expected_len)
931+self.assertEqual(m.itemsize, itemsize)
932+self.assertEqual(m.format, fmt)
933+self.assertEqual(m.readonly, expected_readonly)
934+self.assertEqual(m.ndim, ndim)
935+self.assertEqual(m.shape, tuple(shape))
936+if not (sliced and suboffsets):
937+self.assertEqual(m.strides, tuple(strides))
938+self.assertEqual(m.suboffsets, tuple(suboffsets))
939+940+n = 1 if ndim == 0 else len(lst)
941+self.assertEqual(len(m), n)
942+943+rep = result.tolist() if fmt else result.tobytes()
944+self.assertEqual(rep, lst)
945+self.assertEqual(m, result)
946+947+check_memoryview(m)
948+with m.toreadonly() as mm:
949+check_memoryview(mm, expected_readonly=True)
950+m.tobytes() # Releasing mm didn't release m
944951945952def verify_getbuf(self, orig_ex, ex, req, sliced=False):
946953def simple_fmt(ex):