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 }