@@ -144,26 +144,32 @@ func testBody(t *testing.T, r *http.Request, want string) {
144
144
// to the want string.
145
145
func testJSONMarshal (t * testing.T , v interface {}, want string ) {
146
146
t .Helper ()
147
- // Unmarshal the wanted JSON, to verify its correctness, and marshal it back
148
- // to sort the keys.
149
- u := reflect .New (reflect .TypeOf (v )).Interface ()
150
- if err := json .Unmarshal ([]byte (want ), & u ); err != nil {
151
- t .Errorf ("Unable to unmarshal JSON for %v: %v" , want , err )
152
- }
153
- w , err := json .MarshalIndent (u , "" , " " )
147
+ got , err := json .Marshal (v )
154
148
if err != nil {
155
- t .Errorf ("Unable to marshal JSON for %#v" , u )
149
+ t .Errorf ("Unable to marshal JSON for %#v" , v )
150
+ }
151
+ got = normalizeJSON (t , got )
152
+ wantBytes := normalizeJSON (t , []byte (want ))
153
+ diff := cmp .Diff (string (wantBytes ), string (got ))
154
+ if diff != "" {
155
+ t .Errorf ("json.Marshal returned:\n %s\n want:\n %s\n diff:\n %v" , string (got ), string (wantBytes ), diff )
156
156
}
157
+ }
157
158
158
- // Marshal the target value.
159
- got , err := json .MarshalIndent (v , "" , " " )
159
+ // normalizeJSON normalizes the JSON in b by unmarshaling and marshaling it
160
+ // again.
161
+ func normalizeJSON (t * testing.T , b []byte ) []byte {
162
+ t .Helper ()
163
+ var v interface {}
164
+ err := json .Unmarshal (b , & v )
160
165
if err != nil {
161
- t .Errorf ("Unable to marshal JSON for %#v " , v )
166
+ t .Errorf ("Unable to unmarshal JSON for %v: %v " , string ( b ), err )
162
167
}
163
-
164
- if diff := cmp . Diff ( string ( w ), string ( got )); diff != "" {
165
- t .Errorf ("json.Marshal returned: \n %s \n want: \n %s \n diff: \n % v" , got , w , diff )
168
+ w , err := json . MarshalIndent ( v , "" , " " )
169
+ if err != nil {
170
+ t .Errorf ("Unable to marshal JSON for %# v" , v )
166
171
}
172
+ return w
167
173
}
168
174
169
175
// Test whether the v fields have the url tag and the parsing of v
0 commit comments