From 95bb00d1088767ed14e3bd1a5f533a690d619a5f Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Sun, 13 Sep 2020 02:12:02 +0000 Subject: 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 TryBot-Result: Gobot Gobot Reviewed-by: Emmanuel Odeke Trust: Emmanuel Odeke --- src/encoding/json/decode_test.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/encoding/json/decode_test.go') diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go index 219e845c7b..b707dcfa99 100644 --- a/src/encoding/json/decode_test.go +++ b/src/encoding/json/decode_test.go @@ -2572,3 +2572,34 @@ func TestUnmarshalMaxDepth(t *testing.T) { } } } + +func TestInvalidUnmarshalErrorIs(t *testing.T) { + err := fmt.Errorf("apackage: %w: failed to parse struct", &InvalidUnmarshalError{reflect.TypeOf("a")}) + if !errors.Is(err, &InvalidUnmarshalError{}) { + t.Fatalf("%v should be unwrapped to a InvalidUnmarshalError", err) + } +} + +func TestUnmarshalFieldErrorIs(t *testing.T) { + err := fmt.Errorf("apackage: %w: failed to parse struct", &UnmarshalFieldError{ + Key: "foo", + Type: reflect.TypeOf("a"), + Field: reflect.StructField{Name: "b"}, + }) + if !errors.Is(err, &UnmarshalFieldError{}) { + t.Fatalf("%v should be unwrapped to a UnmarshalFieldError", err) + } +} + +func TestUnmarshalTypeErrorIs(t *testing.T) { + err := fmt.Errorf("apackage: %w: failed to parse struct", &UnmarshalTypeError{ + Value: "foo", + Type: reflect.TypeOf("a"), + Offset: 1, + Struct: "Foo", + Field: "Bar", + }) + if !errors.Is(err, &UnmarshalTypeError{}) { + t.Fatalf("%v should be unwrapped to a UnmarshalTypeError", err) + } +} -- cgit v1.3