♻️ Refactor: Organize waiterr_test.go with subtests

This commit is contained in:
Dan Jones 2025-11-14 12:00:06 -06:00
commit a68fc26481

View file

@ -43,27 +43,59 @@ func TestWait(t *testing.T) {
} }
} }
func TestWaitForError(t *testing.T) { func TestWaitForError(tt *testing.T) {
we := new(waiterr.WaitErr) tt.Run("first error", func(t *testing.T) {
er1 := errors.New("uh-oh") we := new(waiterr.WaitErr)
er2 := errors.New("oops") er1 := errors.New("uh-oh")
we.Go(func() error { return nil }) er2 := errors.New("oops")
we.Go(func() error { return er1 }) we.Go(func() error { return nil })
we.Go(func() error { return er2 }) we.Go(func() error { return er1 })
we.Go(func() error { return er2 })
err := we.WaitForError() err := we.WaitForError()
// Due to how goroutines run, it is possible that either of those return first. This is an acceptable limitation // Due to how goroutines run, it is possible that either of those return first. This is an acceptable limitation
be.True(t, err == er1 || err == er2) be.True(t, err == er1 || err == er2)
} })
func TestWaitForErrorNoErr(t *testing.T) { tt.Run("no error", func(t *testing.T) {
we := new(waiterr.WaitErr) we := new(waiterr.WaitErr)
we.Go(func() error { return nil }) we.Go(func() error { return nil })
we.Go(func() error { return nil }) we.Go(func() error { return nil })
we.Go(func() error { return nil }) we.Go(func() error { return nil })
err := we.WaitForError() err := we.WaitForError()
be.Err(t, err, nil) be.Err(t, err, nil)
})
tt.Run("panic", func(t *testing.T) {
defer func() {
if r := recover(); r == nil {
t.Errorf("The code did not panic")
}
}()
we := new(waiterr.WaitErr)
_ = we.WaitForError()
})
tt.Run("first error set", func(tt2 *testing.T) {
we := new(waiterr.WaitErr)
expectedErr := errors.New("pre-set error")
synctest.Test(tt2, func(t *testing.T) {
we.Go(func() error { return expectedErr })
// synctest.Wait ensures that the gorouting has finished before anything else.
synctest.Wait()
we.Go(func() error { return errors.New("another error") })
synctest.Wait()
we.Go(func() error { return nil })
actualErr := we.WaitForError()
be.Err(t, actualErr, expectedErr)
})
})
} }
func TestUnwrap(tt *testing.T) { func TestUnwrap(tt *testing.T) {
@ -93,33 +125,3 @@ func TestUnwrap(tt *testing.T) {
be.Equal(t, weNoErr.Unwrap(), nil) be.Equal(t, weNoErr.Unwrap(), nil)
}) })
} }
func TestWaitForErrorPanic(t *testing.T) {
defer func() {
if r := recover(); r == nil {
t.Errorf("The code did not panic")
}
}()
we := new(waiterr.WaitErr)
_ = we.WaitForError()
}
func TestWaitForErrorFirstErrSet(tt *testing.T) {
we := new(waiterr.WaitErr)
expectedErr := errors.New("pre-set error")
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()
we.Go(func() error { return errors.New("another error") })
synctest.Wait()
we.Go(func() error { return nil })
actualErr := we.WaitForError()
be.Err(t, actualErr, expectedErr)
})
}