github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/shared/sharedtest/io.go (about)

     1  // Copyright 2018 The WPT Dashboard Project. All rights reserved.
     2  // Use of this source code is governed by a BSD-style license that can be
     3  // found in the LICENSE file.
     4  
     5  package sharedtest
     6  
     7  import (
     8  	"bytes"
     9  	"io"
    10  	"io/ioutil"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  // MockWriteCloser is a mock io.WriteCloser for testing.
    17  type MockWriteCloser struct {
    18  	b      bytes.Buffer
    19  	closed bool
    20  	t      *testing.T
    21  }
    22  
    23  func (mwc *MockWriteCloser) Write(p []byte) (n int, err error) {
    24  	assert.False(mwc.t, mwc.closed)
    25  	return mwc.b.Write(p)
    26  }
    27  
    28  // Close closes the WriteCloser.
    29  func (mwc *MockWriteCloser) Close() error {
    30  	mwc.closed = true
    31  	return nil
    32  }
    33  
    34  // IsClosed indicates whether the WriteCloser has been closed.
    35  func (mwc *MockWriteCloser) IsClosed() bool {
    36  	return mwc.closed
    37  }
    38  
    39  // Bytes returns the bytes written to the WriteCloser.
    40  func (mwc *MockWriteCloser) Bytes() []byte {
    41  	return mwc.b.Bytes()
    42  }
    43  
    44  // NewMockWriteCloser creates a new MockWriteCloser.
    45  func NewMockWriteCloser(t *testing.T) *MockWriteCloser {
    46  	return &MockWriteCloser{
    47  		b:      bytes.Buffer{},
    48  		closed: false,
    49  		t:      t,
    50  	}
    51  }
    52  
    53  // MockReadCloser is a mock io.ReadCloser for testing.
    54  type MockReadCloser struct {
    55  	rc     io.ReadCloser
    56  	closed bool
    57  	t      *testing.T
    58  }
    59  
    60  func (mrc *MockReadCloser) Read(p []byte) (n int, err error) {
    61  	assert.False(mrc.t, mrc.closed)
    62  	return mrc.rc.Read(p)
    63  }
    64  
    65  // Close closes the ReadCloser.
    66  func (mrc *MockReadCloser) Close() error {
    67  	mrc.closed = true
    68  	return nil
    69  }
    70  
    71  // NewMockReadCloser creates a new MockWriteCloser.
    72  func NewMockReadCloser(t *testing.T, data []byte) *MockReadCloser {
    73  	return &MockReadCloser{
    74  		rc:     ioutil.NopCloser(bytes.NewReader(data)),
    75  		closed: false,
    76  		t:      t,
    77  	}
    78  }
    79  
    80  // IsClosed returns whether the ReadCloser has been closed.
    81  func (mrc *MockReadCloser) IsClosed() bool {
    82  	return mrc.closed
    83  }