@@ -4,9 +4,12 @@ import (
44 "bytes"
55 "errors"
66 "fmt"
7- "io/ioutil "
7+ "io"
88 "reflect"
99 "testing"
10+
11+ "github.com/google/go-cmp/cmp"
12+ "github.com/google/go-cmp/cmp/cmpopts"
1013)
1114
1215func TestSafeString (t * testing.T ) {
@@ -29,23 +32,23 @@ func TestSafeMarshal(t *testing.T) {
2932func TestWriteKeyStrings (t * testing.T ) {
3033 keygen := []struct {
3134 name string
32- fn func (string ) interface {}
35+ fn func (string ) any
3336 }{
3437 {
3538 name : "string" ,
36- fn : func (s string ) interface {} { return s },
39+ fn : func (s string ) any { return s },
3740 },
3841 {
3942 name : "named-string" ,
40- fn : func (s string ) interface {} { return stringData (s ) },
43+ fn : func (s string ) any { return stringData (s ) },
4144 },
4245 {
4346 name : "Stringer" ,
44- fn : func (s string ) interface {} { return stringStringer (s ) },
47+ fn : func (s string ) any { return stringStringer (s ) },
4548 },
4649 {
4750 name : "TextMarshaler" ,
48- fn : func (s string ) interface {} { return stringMarshaler (s ) },
51+ fn : func (s string ) any { return stringMarshaler (s ) },
4952 },
5053 }
5154
@@ -99,7 +102,7 @@ func TestWriteKey(t *testing.T) {
99102 )
100103
101104 data := []struct {
102- key interface {}
105+ key any
103106 want string
104107 err error
105108 }{
@@ -110,7 +113,6 @@ func TestWriteKey(t *testing.T) {
110113 {key : (* stringerMarshaler )(nil ), err : ErrNilKey },
111114 {key : ptr , want : "1" },
112115
113- {key : errorMarshaler {}, err : & MarshalerError {Type : reflect .TypeOf (errorMarshaler {}), Err : errMarshaling }},
114116 {key : make (chan int ), err : ErrUnsupportedKeyType },
115117 {key : []int {}, err : ErrUnsupportedKeyType },
116118 {key : map [int ]int {}, err : ErrUnsupportedKeyType },
@@ -122,8 +124,8 @@ func TestWriteKey(t *testing.T) {
122124 for _ , d := range data {
123125 w := & bytes.Buffer {}
124126 err := writeKey (w , d .key )
125- if ! reflect . DeepEqual ( err , d . err ) {
126- t .Errorf ("%#v: got error: %v, want error: %v " , d .key , err , d . err )
127+ if diff := cmp . Diff ( d . err , err , cmpopts . EquateErrors ()); diff != "" {
128+ t .Errorf ("%#v: error value mismatch (-want,+got): \n %s " , d .key , diff )
127129 }
128130 if err != nil {
129131 continue
@@ -134,13 +136,42 @@ func TestWriteKey(t *testing.T) {
134136 }
135137}
136138
139+ func TestWriteKeyMarshalError (t * testing.T ) {
140+ data := []struct {
141+ key any
142+ want string
143+ err error
144+ }{
145+ {key : errorMarshaler {}, err : & MarshalerError {Type : reflect .TypeOf (errorMarshaler {}), Err : errMarshaling }},
146+ }
147+
148+ for _ , d := range data {
149+ w := & bytes.Buffer {}
150+ err := writeKey (w , d .key )
151+
152+ switch err := err .(type ) {
153+ case nil :
154+ t .Errorf ("%#v: err == nil, want: not nil" , d .key )
155+ case * MarshalerError :
156+ if got , want := err .Type , reflect .TypeOf (errorMarshaler {}); got != want {
157+ t .Errorf ("%#v: MarshalerError.Type == %v, want: %v" , d .key , got , want )
158+ }
159+ if diff := cmp .Diff (errMarshaling , err .Err , cmpopts .EquateErrors ()); diff != "" {
160+ t .Errorf ("%#v: MarshalerError.Err value mismatch (-want,+got):\n %s" , d .key , diff )
161+ }
162+ default :
163+ t .Errorf ("%#v: unexpected error, got: %q, want: a MarshalerError" , d .key , err )
164+ }
165+ }
166+ }
167+
137168func TestWriteValueStrings (t * testing.T ) {
138- keygen := []func (string ) interface {} {
139- func (s string ) interface {} { return s },
140- func (s string ) interface {} { return errors .New (s ) },
141- func (s string ) interface {} { return stringData (s ) },
142- func (s string ) interface {} { return stringStringer (s ) },
143- func (s string ) interface {} { return stringMarshaler (s ) },
169+ keygen := []func (string ) any {
170+ func (s string ) any { return s },
171+ func (s string ) any { return errors .New (s ) },
172+ func (s string ) any { return stringData (s ) },
173+ func (s string ) any { return stringStringer (s ) },
174+ func (s string ) any { return stringMarshaler (s ) },
144175 }
145176
146177 data := []struct {
@@ -188,7 +219,7 @@ func TestWriteValue(t *testing.T) {
188219 )
189220
190221 data := []struct {
191- value interface {}
222+ value any
192223 want string
193224 err error
194225 }{
@@ -199,7 +230,6 @@ func TestWriteValue(t *testing.T) {
199230 {value : (* stringerMarshaler )(nil ), want : "null" },
200231 {value : ptr , want : "1" },
201232
202- {value : errorMarshaler {}, err : & MarshalerError {Type : reflect .TypeOf (errorMarshaler {}), Err : errMarshaling }},
203233 {value : make (chan int ), err : ErrUnsupportedValueType },
204234 {value : []int {}, err : ErrUnsupportedValueType },
205235 {value : map [int ]int {}, err : ErrUnsupportedValueType },
@@ -211,8 +241,8 @@ func TestWriteValue(t *testing.T) {
211241 for _ , d := range data {
212242 w := & bytes.Buffer {}
213243 err := writeValue (w , d .value )
214- if ! reflect . DeepEqual ( err , d . err ) {
215- t .Errorf ("%#v: got error: %v, want error: %v " , d .value , err , d . err )
244+ if diff := cmp . Diff ( d . err , err , cmpopts . EquateErrors ()); diff != "" {
245+ t .Errorf ("%#v: error value mismatch (-want,+got): \n %s " , d .value , diff )
216246 }
217247 if err != nil {
218248 continue
@@ -223,6 +253,35 @@ func TestWriteValue(t *testing.T) {
223253 }
224254}
225255
256+ func TestWriteValueMarshalError (t * testing.T ) {
257+ data := []struct {
258+ value any
259+ want string
260+ err error
261+ }{
262+ {value : errorMarshaler {}, err : & MarshalerError {Type : reflect .TypeOf (errorMarshaler {}), Err : errMarshaling }},
263+ }
264+
265+ for _ , d := range data {
266+ w := & bytes.Buffer {}
267+ err := writeValue (w , d .value )
268+
269+ switch err := err .(type ) {
270+ case nil :
271+ t .Errorf ("%#v: err == nil, want: not nil" , d .value )
272+ case * MarshalerError :
273+ if got , want := err .Type , reflect .TypeOf (errorMarshaler {}); got != want {
274+ t .Errorf ("%#v: MarshalerError.Type == %v, want: %v" , d .value , got , want )
275+ }
276+ if diff := cmp .Diff (errMarshaling , err .Err , cmpopts .EquateErrors ()); diff != "" {
277+ t .Errorf ("%#v: MarshalerError.Err value mismatch (-want,+got):\n %s" , d .value , diff )
278+ }
279+ default :
280+ t .Errorf ("%#v: unexpected error, got: %q, want: a MarshalerError" , d .value , err )
281+ }
282+ }
283+ }
284+
226285type stringData string
227286
228287type stringStringer string
@@ -266,7 +325,7 @@ func BenchmarkWriteStringKey(b *testing.B) {
266325 for _ , k := range keys {
267326 b .Run (k , func (b * testing.B ) {
268327 for i := 0 ; i < b .N ; i ++ {
269- writeStringKey (ioutil .Discard , k )
328+ writeStringKey (io .Discard , k )
270329 }
271330 })
272331 }
0 commit comments