...
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