...

Source file src/cdr.dev/slog/internal/syncwriter/syncwriter_test.go

Documentation: cdr.dev/slog/internal/syncwriter

     1  package syncwriter
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  	"testing"
     7  
     8  	"cdr.dev/slog/internal/assert"
     9  )
    10  
    11  type testWriter struct {
    12  	w      *Writer
    13  	errors int
    14  }
    15  
    16  func TestWriter_Sync(t *testing.T) {
    17  	t.Parallel()
    18  
    19  	newWriter := func(w io.Writer) *testWriter {
    20  		tw := &testWriter{
    21  			w: New(w),
    22  		}
    23  		tw.w.errorf = func(f string, v ...interface{}) {
    24  			tw.errors++
    25  		}
    26  		return tw
    27  	}
    28  
    29  	t.Run("nonSyncWriter", func(t *testing.T) {
    30  		t.Parallel()
    31  
    32  		tw := newWriter(nil)
    33  		tw.w.Sync("test")
    34  		assert.Equal(t, "errors", 0, tw.errors)
    35  	})
    36  
    37  	t.Run("syncWriter", func(t *testing.T) {
    38  		t.Parallel()
    39  
    40  		tw := newWriter(syncWriter{
    41  			wf: func([]byte) (int, error) {
    42  				return 0, io.EOF
    43  			},
    44  			sf: func() error {
    45  				return io.EOF
    46  			},
    47  		})
    48  		tw.w.Write("hello", nil)
    49  		assert.Equal(t, "errors", 1, tw.errors)
    50  		tw.w.Sync("test")
    51  		assert.Equal(t, "errors", 2, tw.errors)
    52  	})
    53  
    54  	t.Run("stdout", func(t *testing.T) {
    55  		t.Parallel()
    56  
    57  		tw := newWriter(os.Stdout)
    58  		tw.w.Sync("test")
    59  		assert.Equal(t, "errors", 0, tw.errors)
    60  	})
    61  
    62  	t.Run("errorf", func(t *testing.T) {
    63  		t.Parallel()
    64  
    65  		sw := New(syncWriter{
    66  			wf: func([]byte) (int, error) {
    67  				return 0, io.EOF
    68  			},
    69  			sf: func() error {
    70  				return io.EOF
    71  			},
    72  		})
    73  		sw.Write("hello", nil)
    74  	})
    75  }
    76  
    77  func Test_errorsIsAny(t *testing.T) {
    78  	t.Parallel()
    79  
    80  	assert.True(t, "err", errorsIsAny(io.EOF, io.ErrUnexpectedEOF, io.EOF))
    81  	assert.False(t, "err", errorsIsAny(io.EOF, io.ErrUnexpectedEOF, io.ErrClosedPipe))
    82  }
    83  
    84  type syncWriter struct {
    85  	wf func([]byte) (int, error)
    86  	sf func() error
    87  }
    88  
    89  var _ syncer = &syncWriter{}
    90  
    91  func (sw syncWriter) Write(p []byte) (int, error) {
    92  	return sw.wf(p)
    93  }
    94  
    95  func (sw syncWriter) Sync() error {
    96  	return sw.sf()
    97  }
    98  

View as plain text