diff --git a/waiterr_test.go b/waiterr_test.go index 6e663a3..6f570a0 100644 --- a/waiterr_test.go +++ b/waiterr_test.go @@ -3,6 +3,7 @@ package waiterr_test import ( "errors" "testing" + "testing/synctest" "github.com/nalgeon/be" @@ -104,22 +105,21 @@ func TestWaitForErrorPanic(t *testing.T) { _ = we.WaitForError() } -func TestWaitForErrorFirstErrSet(t *testing.T) { +func TestWaitForErrorFirstErrSet(tt *testing.T) { we := new(waiterr.WaitErr) expectedErr := errors.New("pre-set error") - // Manually set firstErr (requires reflection or a way to access unexported fields) - // For testing purposes, we can simulate this by calling Go with an error first - we.Go(func() error { return expectedErr }) - we.Go(func() error { return errors.New("another error") }) - we.Go(func() error { return nil }) + synctest.Test(tt, func(t *testing.T) { + we.Go(func() error { return expectedErr }) + // synctest.Wait ensures that the gorouting has finished before anything else. + synctest.Wait() - // Wait for a short period to ensure the first error is processed - // In a real scenario, this might be handled by a channel or more robust synchronization - // For this test, we'll rely on the Go routine scheduling to set firstErr quickly - _ = we.WaitForError() // Call once to ensure firstErr is set internally + we.Go(func() error { return errors.New("another error") }) + synctest.Wait() - // Now call WaitForError again, expecting it to return the already set firstErr - actualErr := we.WaitForError() - be.Err(t, actualErr, expectedErr) + we.Go(func() error { return nil }) + + actualErr := we.WaitForError() + be.Err(t, actualErr, expectedErr) + }) }