| 306 | } |
| 307 | |
| 308 | func TestSyncWriter(t *testing.T) { |
| 309 | buf := &bytes.Buffer{} |
| 310 | |
| 311 | // Test SyncWriter with regular io.Writer |
| 312 | syncWriter := SyncWriter(buf) |
| 313 | |
| 314 | // Test Write |
| 315 | data := []byte("test data") |
| 316 | n, err := syncWriter.Write(data) |
| 317 | if err != nil { |
| 318 | t.Errorf("Write failed: %v", err) |
| 319 | } |
| 320 | if n != len(data) { |
| 321 | t.Errorf("Write returned wrong length: got %d, want %d", n, len(data)) |
| 322 | } |
| 323 | if got := buf.String(); got != string(data) { |
| 324 | t.Errorf("Write wrote wrong data: got %q, want %q", got, string(data)) |
| 325 | } |
| 326 | |
| 327 | // Test SyncWriter with LevelWriter - use it with a logger |
| 328 | levelBuf := &bytes.Buffer{} |
| 329 | levelWriter := LevelWriterAdapter{levelBuf} |
| 330 | syncLevelWriter := SyncWriter(levelWriter) |
| 331 | |
| 332 | logger := New(syncLevelWriter) |
| 333 | logger.Info().Msg("test message") |
| 334 | |
| 335 | expected := `{"level":"info","message":"test message"}` + "\n" |
| 336 | if got := levelBuf.String(); got != expected { |
| 337 | t.Errorf("SyncWriter with LevelWriter failed: got %q, want %q", got, expected) |
| 338 | } |
| 339 | |
| 340 | // Test SyncWriter Close with closable writer |
| 341 | closableBuf := &closableBuffer{Buffer: &bytes.Buffer{}, closed: false} |
| 342 | closableSyncWriter := SyncWriter(closableBuf) |
| 343 | |
| 344 | if closeable, ok := closableSyncWriter.(io.Closer); !ok { |
| 345 | t.Error("SyncWriter should implement Close method") |
| 346 | } else { |
| 347 | err := closeable.Close() |
| 348 | if err != nil { |
| 349 | t.Errorf("Close failed: %v", err) |
| 350 | } |
| 351 | } |
| 352 | if !closableBuf.closed { |
| 353 | t.Error("Close should have been called on closable writer") |
| 354 | } |
| 355 | |
| 356 | // Test SyncWriter Close with closable writer that returns error |
| 357 | errorBuf := &closableBuffer{Buffer: &bytes.Buffer{}, closed: false, closeError: io.EOF} |
| 358 | errorSyncWriter := SyncWriter(errorBuf) |
| 359 | |
| 360 | if closeable, ok := errorSyncWriter.(io.Closer); !ok { |
| 361 | t.Error("SyncWriter should implement Close method") |
| 362 | } else { |
| 363 | err := closeable.Close() |
| 364 | if err != io.EOF { |
| 365 | t.Errorf("Close should have returned EOF error, got: %v", err) |