package simplelog import ( "log/slog" "testing" "time" ) // TestJSONHandlerDeadlock verifies that JSONHandler.Handle does not deadlock // when the default slog handler routes log.Println back through slog. // On the unfixed code this test will hang (deadlock); with the fix it completes. func TestJSONHandlerDeadlock(t *testing.T) { handler := NewJSONHandler() // Set our handler as the default so log.Println routes through slog logger := slog.New(handler) slog.SetDefault(logger) done := make(chan struct{}) go func() { // This call deadlocks on unfixed code because Handle() calls // log.Println() which re-enters slog → Handle() → log.Println() … slog.Info("test message") close(done) }() select { case <-done: // success case <-time.After(5 * time.Second): t.Fatal("JSONHandler.Handle deadlocked: timed out after 5 seconds") } }