From 0d86a9628dc0464d0376208d4ca14d7e678f92b9 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Mon, 15 Aug 2022 01:23:41 +0300 Subject: [PATCH] go1.19: core/errgroup minor fix --- core/errgroup/errgroup.go | 2 +- core/errgroup/errgroup_test.go | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/errgroup/errgroup.go b/core/errgroup/errgroup.go index c22d447a..ba8c4dc0 100644 --- a/core/errgroup/errgroup.go +++ b/core/errgroup/errgroup.go @@ -147,7 +147,7 @@ func (e *Error) As(target interface{}) bool { } } - return errors.As(e.Err, &te.Err) + return errors.As(te.Err, &e) } return ok diff --git a/core/errgroup/errgroup_test.go b/core/errgroup/errgroup_test.go index f01fbfff..bb82a798 100644 --- a/core/errgroup/errgroup_test.go +++ b/core/errgroup/errgroup_test.go @@ -32,13 +32,22 @@ func TestErrorIs(t *testing.T) { } } +// errorString is a trivial implementation of error. +type errorString struct { + s string +} + +func (e *errorString) Error() string { + return e.s +} + func TestErrorAs(t *testing.T) { - testErr := errors.New("as") + testErr := &errorString{"as"} err := &Error{Err: testErr} if expected, got := true, errors.As(err, &testErr); expected != got { t.Fatalf("[testErr as err] expected %v but got %v", expected, got) } - if expected, got := true, errors.As(testErr, &err); expected != got { + if expected, got := false, errors.As(testErr, &err); expected != got /* errorString does not implemeny As, so the std/default functionality will be applied */ { t.Fatalf("[err as testErr] expected %v but got %v", expected, got) } }