mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-129813, PEP 782: Add PyBytesWriter C API (#138822)
This commit is contained in:
parent
3d521a62e7
commit
adb414044f
10 changed files with 873 additions and 0 deletions
|
|
@ -299,5 +299,80 @@ def test_join(self):
|
|||
bytes_join(b'', NULL)
|
||||
|
||||
|
||||
class BytesWriterTest(unittest.TestCase):
|
||||
result_type = bytes
|
||||
|
||||
def create_writer(self, alloc=0, string=b''):
|
||||
return _testcapi.PyBytesWriter(alloc, string, 0)
|
||||
|
||||
def test_create(self):
|
||||
# Test PyBytesWriter_Create()
|
||||
writer = self.create_writer()
|
||||
self.assertEqual(writer.get_size(), 0)
|
||||
self.assertEqual(writer.finish(), self.result_type(b''))
|
||||
|
||||
writer = self.create_writer(3, b'abc')
|
||||
self.assertEqual(writer.get_size(), 3)
|
||||
self.assertEqual(writer.finish(), self.result_type(b'abc'))
|
||||
|
||||
writer = self.create_writer(10, b'abc')
|
||||
self.assertEqual(writer.get_size(), 10)
|
||||
self.assertEqual(writer.finish_with_size(3), self.result_type(b'abc'))
|
||||
|
||||
def test_write_bytes(self):
|
||||
# Test PyBytesWriter_WriteBytes()
|
||||
writer = self.create_writer()
|
||||
writer.write_bytes(b'Hello World!', -1)
|
||||
self.assertEqual(writer.finish(), self.result_type(b'Hello World!'))
|
||||
|
||||
writer = self.create_writer()
|
||||
writer.write_bytes(b'Hello ', -1)
|
||||
writer.write_bytes(b'World! <truncated>', 6)
|
||||
self.assertEqual(writer.finish(), self.result_type(b'Hello World!'))
|
||||
|
||||
def test_resize(self):
|
||||
# Test PyBytesWriter_Resize()
|
||||
writer = self.create_writer()
|
||||
writer.resize(len(b'number=123456'), b'number=123456')
|
||||
writer.resize(len(b'number=123456'), b'')
|
||||
self.assertEqual(writer.get_size(), len(b'number=123456'))
|
||||
self.assertEqual(writer.finish(), self.result_type(b'number=123456'))
|
||||
|
||||
writer = self.create_writer()
|
||||
writer.resize(0, b'')
|
||||
writer.resize(len(b'number=123456'), b'number=123456')
|
||||
self.assertEqual(writer.finish(), self.result_type(b'number=123456'))
|
||||
|
||||
writer = self.create_writer()
|
||||
writer.resize(len(b'number='), b'number=')
|
||||
writer.resize(len(b'number=123456'), b'123456')
|
||||
self.assertEqual(writer.finish(), self.result_type(b'number=123456'))
|
||||
|
||||
writer = self.create_writer()
|
||||
writer.resize(len(b'number='), b'number=')
|
||||
writer.resize(len(b'number='), b'')
|
||||
writer.resize(len(b'number=123456'), b'123456')
|
||||
self.assertEqual(writer.finish(), self.result_type(b'number=123456'))
|
||||
|
||||
writer = self.create_writer()
|
||||
writer.resize(len(b'number'), b'number')
|
||||
writer.resize(len(b'number='), b'=')
|
||||
writer.resize(len(b'number=123'), b'123')
|
||||
writer.resize(len(b'number=123456'), b'456')
|
||||
self.assertEqual(writer.finish(), self.result_type(b'number=123456'))
|
||||
|
||||
def test_example_abc(self):
|
||||
self.assertEqual(_testcapi.byteswriter_abc(), b'abc')
|
||||
|
||||
def test_example_resize(self):
|
||||
self.assertEqual(_testcapi.byteswriter_resize(), b'Hello World')
|
||||
|
||||
|
||||
class ByteArrayWriterTest(BytesWriterTest):
|
||||
result_type = bytearray
|
||||
|
||||
def create_writer(self, alloc=0, string=b''):
|
||||
return _testcapi.PyBytesWriter(alloc, string, 1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue