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  }