package multierror import ( "errors" "strings" "testing" ) func TestGroup(t *testing.T) { err1 := errors.New("group_test: 1") err2 := errors.New("group_test: 2") cases := []struct { errs []error nilResult bool }{ {errs: []error{}, nilResult: true}, {errs: []error{nil}, nilResult: true}, {errs: []error{err1}}, {errs: []error{err1, nil}}, {errs: []error{err1, nil, err2}}, } for _, tc := range cases { var g Group for _, err := range tc.errs { err := err g.Go(func() error { return err }) } gErr := g.Wait() if gErr != nil { for i := range tc.errs { if tc.errs[i] != nil && !strings.Contains(gErr.Error(), tc.errs[i].Error()) { t.Fatalf("expected error to contain %q, actual: %v", tc.errs[i].Error(), gErr) } } } else if !tc.nilResult { t.Fatalf("Group.Wait() should not have returned nil for errs: %v", tc.errs) } } }