@@ -268,3 +268,42 @@ func TestJsonUnmarshal(t *testing.T) {
268268 assert .Nil (t , err )
269269 assert .Equal (t , r .String (), testValWoutTag )
270270}
271+
272+ func FuzzJsonMarshalUnmarshal (f * testing.F ) {
273+ f .Add (Must (New ()).ToHexString ())
274+ f .Add (Must (New ()).ToBase32String ())
275+ f .Add (Must (New ()).ToBase64String ())
276+ f .Add (Must (NewTagged (1 )).ToHexString ())
277+ f .Add (Must (NewTagged (1 )).ToBase32String ())
278+ f .Add (Must (NewTagged (1 )).ToBase64String ())
279+ f .Add (Must (NewRandom ()).ToHexString ())
280+ f .Add (Must (NewRandom ()).ToBase32String ())
281+ f .Add (Must (NewRandom ()).ToBase64String ())
282+ f .Add (Must (NewRandomTagged (1 )).ToHexString ())
283+ f .Add (Must (NewRandomTagged (1 )).ToBase32String ())
284+ f .Add (Must (NewRandomTagged (1 )).ToBase64String ())
285+
286+ f .Fuzz (func (t * testing.T , input string ) {
287+ p , err := Parse (input )
288+ if err != nil {
289+ t .Skip ()
290+ }
291+
292+ j , err := json .Marshal (p )
293+ if err != nil {
294+ t .Fatalf ("failed marshal json value: %q" , input )
295+ }
296+
297+ var r ID
298+ if err := json .Unmarshal (j , & r ); err != nil {
299+ t .Fatalf ("failed to unmarshal json: %q => %q" , input , string (j ))
300+ }
301+
302+ if ! p .Equal (r ) {
303+ t .Fatalf ("bytes were not equal: %v != %v" , p .Bytes (), r .Bytes ())
304+ }
305+ if p .String () != r .String () {
306+ t .Fatalf ("strings were not equal: %q != %q" , p .String (), r .String ())
307+ }
308+ })
309+ }
0 commit comments