Skip to content

Commit 5536853

Browse files
committed
More tests
1 parent 9ee8eb5 commit 5536853

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

Lib/test/test_buffer.py

+59
Original file line numberDiff line numberDiff line change
@@ -4690,6 +4690,65 @@ def __release_buffer__(self, buffer):
46904690
c.buffer.release()
46914691
ba.clear()
46924692

4693+
def test_multiple_inheritance_buffer_last(self):
4694+
class A:
4695+
def __buffer__(self, flags):
4696+
return memoryview(b"hello A")
4697+
4698+
class B(A, bytearray):
4699+
def __buffer__(self, flags):
4700+
return super().__buffer__(flags)
4701+
4702+
b = B(b"hello")
4703+
with memoryview(b) as mv:
4704+
self.assertEqual(mv.tobytes(), b"hello A")
4705+
4706+
class Releaser:
4707+
def __release_buffer__(self, buffer):
4708+
self.buffer = buffer
4709+
4710+
class C(Releaser, bytearray):
4711+
def __buffer__(self, flags):
4712+
return super().__buffer__(flags)
4713+
4714+
c = C(b"hello C")
4715+
with memoryview(c) as mv:
4716+
self.assertEqual(mv.tobytes(), b"hello C")
4717+
c.clear()
4718+
with self.assertRaises(ValueError):
4719+
c.buffer.tobytes()
4720+
4721+
def test_multiple_inheritance_buffer_last(self):
4722+
class A:
4723+
def __buffer__(self, flags):
4724+
raise RuntimeError("should not be called")
4725+
4726+
def __release_buffer__(self, buffer):
4727+
raise RuntimeError("should not be called")
4728+
4729+
class B(bytearray, A):
4730+
def __buffer__(self, flags):
4731+
return super().__buffer__(flags)
4732+
4733+
b = B(b"hello")
4734+
with memoryview(b) as mv:
4735+
self.assertEqual(mv.tobytes(), b"hello")
4736+
4737+
class Releaser:
4738+
buffer = None
4739+
def __release_buffer__(self, buffer):
4740+
self.buffer = buffer
4741+
4742+
class C(bytearray, Releaser):
4743+
def __buffer__(self, flags):
4744+
return super().__buffer__(flags)
4745+
4746+
c = C(b"hello")
4747+
with memoryview(c) as mv:
4748+
self.assertEqual(mv.tobytes(), b"hello")
4749+
c.clear()
4750+
self.assertIs(c.buffer, None)
4751+
46934752

46944753
if __name__ == "__main__":
46954754
unittest.main()

0 commit comments

Comments
 (0)