✨ Implement core waiterr package with initial functionality and tests.
This commit is contained in:
parent
8c595a9080
commit
635126fc98
7 changed files with 132 additions and 2 deletions
66
waiterr_test.go
Normal file
66
waiterr_test.go
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
package waiterr_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/nalgeon/be"
|
||||
|
||||
"codeberg.org/danjones000/waiterr"
|
||||
)
|
||||
|
||||
func TestGo(t *testing.T) {
|
||||
we := new(waiterr.WaitErr)
|
||||
err := errors.New("uh-oh")
|
||||
var run bool
|
||||
we.Go(func() error {
|
||||
run = true
|
||||
return err
|
||||
})
|
||||
|
||||
be.Err(t, we.Wait(), err)
|
||||
be.True(t, run)
|
||||
}
|
||||
|
||||
func TestWait(t *testing.T) {
|
||||
we := new(waiterr.WaitErr)
|
||||
er1 := errors.New("uh-oh")
|
||||
er2 := errors.New("oops")
|
||||
we.Go(func() error { return er1 })
|
||||
we.Go(func() error { return nil })
|
||||
we.Go(func() error { return er2 })
|
||||
|
||||
err := we.Wait()
|
||||
be.Err(t, err, er1, er2)
|
||||
if ers, ok := err.(interface{ Unwrap() []error }); ok {
|
||||
all := ers.Unwrap()
|
||||
be.Equal(t, len(all), 2)
|
||||
be.True(t, all[0] == er1 || all[0] == er2)
|
||||
be.True(t, all[1] == er2 || all[1] == er1)
|
||||
} else {
|
||||
t.Fatal("Returned error should have Unwrap method")
|
||||
}
|
||||
}
|
||||
|
||||
func TestWaitForError(t *testing.T) {
|
||||
we := new(waiterr.WaitErr)
|
||||
er1 := errors.New("uh-oh")
|
||||
er2 := errors.New("oops")
|
||||
we.Go(func() error { return nil })
|
||||
we.Go(func() error { return er1 })
|
||||
we.Go(func() error { return er2 })
|
||||
|
||||
err := we.WaitForError()
|
||||
// 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)
|
||||
}
|
||||
|
||||
func TestWaitForErrorNoErr(t *testing.T) {
|
||||
we := new(waiterr.WaitErr)
|
||||
we.Go(func() error { return nil })
|
||||
we.Go(func() error { return nil })
|
||||
we.Go(func() error { return nil })
|
||||
|
||||
err := we.WaitForError()
|
||||
be.Err(t, err, nil)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue