diff options
| author | Carlos Alexandro Becker <caarlos0@gmail.com> | 2020-09-13 02:12:02 +0000 |
|---|---|---|
| committer | Emmanuel Odeke <emm.odeke@gmail.com> | 2020-09-13 03:19:24 +0000 |
| commit | 95bb00d1088767ed14e3bd1a5f533a690d619a5f (patch) | |
| tree | 8f1d284be08a69c25adf7d3280034044b8dc22a9 /src/encoding/json/encode_test.go | |
| parent | b3ef90ec7304a28b89f616ced20b09f56be30cc4 (diff) | |
| download | go-95bb00d1088767ed14e3bd1a5f533a690d619a5f.tar.xz | |
encoding/json: implement Is on all errors
Allows users to check:
errors.Is(err, &UnmarshalTypeError{})
errors.Is(err, &UnmarshalFieldError{})
errors.Is(err, &InvalidUnmarshalError{})
errors.Is(err, &UnsupportedValueError{})
errors.Is(err, &MarshalerError{})
which is the recommended way of checking for kinds of errors.
SyntaxError.Is was implemented in CL 253037.
As and Unwrap relevant methods will be added in future CLs.
Change-Id: I1f8a503b8fdc0f3afdfe9669a91f3af8d960e028
GitHub-Last-Rev: 930cda5384c987a0b31f277ba3b4ab690ea74ac3
GitHub-Pull-Request: golang/go#41360
Reviewed-on: https://go-review.googlesource.com/c/go/+/254537
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Trust: Emmanuel Odeke <emm.odeke@gmail.com>
Diffstat (limited to 'src/encoding/json/encode_test.go')
| -rw-r--r-- | src/encoding/json/encode_test.go | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/encoding/json/encode_test.go b/src/encoding/json/encode_test.go index 7290eca06f..90826a7f47 100644 --- a/src/encoding/json/encode_test.go +++ b/src/encoding/json/encode_test.go @@ -7,6 +7,7 @@ package json import ( "bytes" "encoding" + "errors" "fmt" "log" "math" @@ -211,7 +212,7 @@ var unsupportedValues = []interface{}{ func TestUnsupportedValues(t *testing.T) { for _, v := range unsupportedValues { if _, err := Marshal(v); err != nil { - if _, ok := err.(*UnsupportedValueError); !ok { + if !errors.Is(err, &UnsupportedValueError{}) { t.Errorf("for %v, got %T want UnsupportedValueError", v, err) } } else { @@ -1155,3 +1156,24 @@ func TestMarshalerError(t *testing.T) { } } } + +func TestMarshalerErrorIs(t *testing.T) { + err := fmt.Errorf("apackage: %w: failed to parse struct", &MarshalerError{ + reflect.TypeOf("a"), + fmt.Errorf("something"), + "TestMarshalerErrorIs", + }) + if !errors.Is(err, &MarshalerError{}) { + t.Fatalf("%v should be unwrapped to a MarshalerError", err) + } +} + +func TestUnsupportedValueErrorIs(t *testing.T) { + err := fmt.Errorf("apackage: %w: failed to parse struct", &UnsupportedValueError{ + Value: reflect.Value{}, + Str: "Foo", + }) + if !errors.Is(err, &UnsupportedValueError{}) { + t.Fatalf("%v should be unwrapped to a UnsupportedValueError", err) + } +} |
