@@ -1351,6 +1351,54 @@ func TestWriterReadFromErrNoProgress(t *testing.T) {
1351
1351
}
1352
1352
}
1353
1353
1354
+ type readFromWriter struct {
1355
+ buf []byte
1356
+ writeBytes int
1357
+ readFromBytes int
1358
+ }
1359
+
1360
+ func (w * readFromWriter ) Write (p []byte ) (int , error ) {
1361
+ w .buf = append (w .buf , p ... )
1362
+ w .writeBytes += len (p )
1363
+ return len (p ), nil
1364
+ }
1365
+
1366
+ func (w * readFromWriter ) ReadFrom (r io.Reader ) (int64 , error ) {
1367
+ b , err := io .ReadAll (r )
1368
+ w .buf = append (w .buf , b ... )
1369
+ w .readFromBytes += len (b )
1370
+ return int64 (len (b )), err
1371
+ }
1372
+
1373
+ // Test that calling (*Writer).ReadFrom with a partially-filled buffer
1374
+ // fills the buffer before switching over to ReadFrom.
1375
+ func TestWriterReadFromWithBufferedData (t * testing.T ) {
1376
+ const bufsize = 16
1377
+
1378
+ input := createTestInput (64 )
1379
+ rfw := & readFromWriter {}
1380
+ w := NewWriterSize (rfw , bufsize )
1381
+
1382
+ const writeSize = 8
1383
+ if n , err := w .Write (input [:writeSize ]); n != writeSize || err != nil {
1384
+ t .Errorf ("w.Write(%v bytes) = %v, %v; want %v, nil" , writeSize , n , err , writeSize )
1385
+ }
1386
+ n , err := w .ReadFrom (bytes .NewReader (input [writeSize :]))
1387
+ if wantn := len (input [writeSize :]); int (n ) != wantn || err != nil {
1388
+ t .Errorf ("io.Copy(w, %v bytes) = %v, %v; want %v, nil" , wantn , n , err , wantn )
1389
+ }
1390
+ if err := w .Flush (); err != nil {
1391
+ t .Errorf ("w.Flush() = %v, want nil" , err )
1392
+ }
1393
+
1394
+ if got , want := rfw .writeBytes , bufsize ; got != want {
1395
+ t .Errorf ("wrote %v bytes with Write, want %v" , got , want )
1396
+ }
1397
+ if got , want := rfw .readFromBytes , len (input )- bufsize ; got != want {
1398
+ t .Errorf ("wrote %v bytes with ReadFrom, want %v" , got , want )
1399
+ }
1400
+ }
1401
+
1354
1402
func TestReadZero (t * testing.T ) {
1355
1403
for _ , size := range []int {100 , 2 } {
1356
1404
t .Run (fmt .Sprintf ("bufsize=%d" , size ), func (t * testing.T ) {
0 commit comments