Gemini
Initial commit
fce10de
package log
import (
"bytes"
"strings"
"testing"
"log/slog"
"github.com/stretchr/testify/assert"
)
func TestLoggedReadWriter(t *testing.T) {
t.Run("Read method logs and passes data", func(t *testing.T) {
// Setup
inputData := "test input data"
reader := strings.NewReader(inputData)
// Create logger with buffer to capture output
var logBuffer bytes.Buffer
logger := slog.New(slog.NewTextHandler(&logBuffer, &slog.HandlerOptions{ReplaceAttr: removeTimeAttr}))
lrw := NewIOLogger(reader, nil, logger)
// Test Read
buf := make([]byte, 100)
n, err := lrw.Read(buf)
// Assertions
assert.NoError(t, err)
assert.Equal(t, len(inputData), n)
assert.Equal(t, inputData, string(buf[:n]))
assert.Contains(t, logBuffer.String(), "[stdin]")
assert.Contains(t, logBuffer.String(), inputData)
})
t.Run("Write method logs and passes data", func(t *testing.T) {
// Setup
outputData := "test output data"
var writeBuffer bytes.Buffer
// Create logger with buffer to capture output
var logBuffer bytes.Buffer
logger := slog.New(slog.NewTextHandler(&logBuffer, &slog.HandlerOptions{ReplaceAttr: removeTimeAttr}))
lrw := NewIOLogger(nil, &writeBuffer, logger)
// Test Write
n, err := lrw.Write([]byte(outputData))
// Assertions
assert.NoError(t, err)
assert.Equal(t, len(outputData), n)
assert.Equal(t, outputData, writeBuffer.String())
assert.Contains(t, logBuffer.String(), "[stdout]")
assert.Contains(t, logBuffer.String(), outputData)
})
}
func removeTimeAttr(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey && len(groups) == 0 {
return slog.Attr{}
}
return a
}