1// Copyright 2016 Google Inc. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package uuid 6 7import ( 8 "encoding/json" 9 "reflect" 10 "testing" 11) 12 13var testUUID = Must(Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479")) 14 15func TestJSON(t *testing.T) { 16 type S struct { 17 ID1 UUID 18 ID2 UUID 19 } 20 s1 := S{ID1: testUUID} 21 data, err := json.Marshal(&s1) 22 if err != nil { 23 t.Fatal(err) 24 } 25 var s2 S 26 if err := json.Unmarshal(data, &s2); err != nil { 27 t.Fatal(err) 28 } 29 if !reflect.DeepEqual(&s1, &s2) { 30 t.Errorf("got %#v, want %#v", s2, s1) 31 } 32} 33 34func BenchmarkUUID_MarshalJSON(b *testing.B) { 35 x := &struct { 36 UUID UUID `json:"uuid"` 37 }{} 38 var err error 39 x.UUID, err = Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479") 40 if err != nil { 41 b.Fatal(err) 42 } 43 for i := 0; i < b.N; i++ { 44 js, err := json.Marshal(x) 45 if err != nil { 46 b.Fatalf("marshal json: %#v (%v)", js, err) 47 } 48 } 49} 50 51func BenchmarkUUID_UnmarshalJSON(b *testing.B) { 52 js := []byte(`{"uuid":"f47ac10b-58cc-0372-8567-0e02b2c3d479"}`) 53 var x *struct { 54 UUID UUID `json:"uuid"` 55 } 56 for i := 0; i < b.N; i++ { 57 err := json.Unmarshal(js, &x) 58 if err != nil { 59 b.Fatalf("marshal json: %#v (%v)", js, err) 60 } 61 } 62} 63