@@ -943,6 +943,71 @@ def test_readinto(self):
943943 self .assertEqual (bufio .readinto (b ), 1 )
944944 self .assertEqual (b , b"cb" )
945945
946+ def test_readinto1 (self ):
947+ buffer_size = 10
948+ rawio = self .MockRawIO ((b"abc" , b"de" , b"fgh" , b"jkl" ))
949+ bufio = self .tp (rawio , buffer_size = buffer_size )
950+ b = bytearray (2 )
951+ self .assertEqual (bufio .peek (3 ), b'abc' )
952+ self .assertEqual (rawio ._reads , 1 )
953+ self .assertEqual (bufio .readinto1 (b ), 2 )
954+ self .assertEqual (b , b"ab" )
955+ self .assertEqual (rawio ._reads , 1 )
956+ self .assertEqual (bufio .readinto1 (b ), 1 )
957+ self .assertEqual (b [:1 ], b"c" )
958+ self .assertEqual (rawio ._reads , 1 )
959+ self .assertEqual (bufio .readinto1 (b ), 2 )
960+ self .assertEqual (b , b"de" )
961+ self .assertEqual (rawio ._reads , 2 )
962+ b = bytearray (2 * buffer_size )
963+ self .assertEqual (bufio .peek (3 ), b'fgh' )
964+ self .assertEqual (rawio ._reads , 3 )
965+ self .assertEqual (bufio .readinto1 (b ), 6 )
966+ self .assertEqual (b [:6 ], b"fghjkl" )
967+ self .assertEqual (rawio ._reads , 4 )
968+
969+ def test_readinto_array (self ):
970+ buffer_size = 60
971+ data = b"a" * 26
972+ rawio = self .MockRawIO ((data ,))
973+ bufio = self .tp (rawio , buffer_size = buffer_size )
974+
975+ # Create an array with element size > 1 byte
976+ b = array .array ('i' , b'x' * 32 )
977+ assert len (b ) != 16
978+
979+ # Read into it. We should get as many *bytes* as we can fit into b
980+ # (which is more than the number of elements)
981+ n = bufio .readinto (b )
982+ self .assertGreater (n , len (b ))
983+
984+ # Check that old contents of b are preserved
985+ bm = memoryview (b ).cast ('B' )
986+ self .assertLess (n , len (bm ))
987+ self .assertEqual (bm [:n ], data [:n ])
988+ self .assertEqual (bm [n :], b'x' * (len (bm [n :])))
989+
990+ def test_readinto1_array (self ):
991+ buffer_size = 60
992+ data = b"a" * 26
993+ rawio = self .MockRawIO ((data ,))
994+ bufio = self .tp (rawio , buffer_size = buffer_size )
995+
996+ # Create an array with element size > 1 byte
997+ b = array .array ('i' , b'x' * 32 )
998+ assert len (b ) != 16
999+
1000+ # Read into it. We should get as many *bytes* as we can fit into b
1001+ # (which is more than the number of elements)
1002+ n = bufio .readinto1 (b )
1003+ self .assertGreater (n , len (b ))
1004+
1005+ # Check that old contents of b are preserved
1006+ bm = memoryview (b ).cast ('B' )
1007+ self .assertLess (n , len (bm ))
1008+ self .assertEqual (bm [:n ], data [:n ])
1009+ self .assertEqual (bm [n :], b'x' * (len (bm [n :])))
1010+
9461011 def test_readlines (self ):
9471012 def bufio ():
9481013 rawio = self .MockRawIO ((b"abc\n " , b"d\n " , b"ef" ))
@@ -3050,6 +3115,8 @@ def test_io_after_close(self):
30503115 self .assertRaises (ValueError , f .readall )
30513116 if hasattr (f , "readinto" ):
30523117 self .assertRaises (ValueError , f .readinto , bytearray (1024 ))
3118+ if hasattr (f , "readinto1" ):
3119+ self .assertRaises (ValueError , f .readinto1 , bytearray (1024 ))
30533120 self .assertRaises (ValueError , f .readline )
30543121 self .assertRaises (ValueError , f .readlines )
30553122 self .assertRaises (ValueError , f .seek , 0 )
0 commit comments