github.com/kaiiak/zaptext@v0.0.0-20220617014548-4ce28ef7833b/text_encoder_test.go (about) 1 package zaptext_test 2 3 import ( 4 "bytes" 5 "testing" 6 7 . "github.com/kaiiak/zaptext" 8 "go.uber.org/zap" 9 "go.uber.org/zap/zapcore" 10 ) 11 12 func TestNewTextEncoder(t *testing.T) { 13 var ( 14 cnf = zap.NewProductionEncoderConfig() 15 te = NewTextEncoder(cnf) 16 logger = zap.New(zapcore.NewCore(te, newTestingWriter(t), zap.NewAtomicLevel())) 17 ) 18 zap.ReplaceGlobals(logger) 19 } 20 21 // testingWriter is a WriteSyncer that writes to the given testing.TB. 22 type testingWriter struct { 23 t *testing.T 24 25 // If true, the test will be marked as failed if this testingWriter is 26 // ever used. 27 markFailed bool 28 } 29 30 func newTestingWriter(t *testing.T) testingWriter { 31 return testingWriter{t: t} 32 } 33 34 // WithMarkFailed returns a copy of this testingWriter with markFailed set to 35 // the provided value. 36 func (w testingWriter) WithMarkFailed(v bool) testingWriter { 37 w.markFailed = v 38 return w 39 } 40 41 func (w testingWriter) Write(p []byte) (n int, err error) { 42 n = len(p) 43 44 // Strip trailing newline because t.Log always adds one. 45 p = bytes.TrimRight(p, "\n") 46 47 // Note: t.Log is safe for concurrent use. 48 w.t.Logf("%s", p) 49 if w.markFailed { 50 w.t.Fail() 51 } 52 53 return n, nil 54 } 55 56 func (w testingWriter) Sync() error { 57 return nil 58 }