// Copyright 2014 Google Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package uuid import ( "bytes" "encoding/json" "reflect" "testing" ) var testUUID = Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479") var testArray = testUUID.Array() func TestJSON(t *testing.T) { type S struct { ID1 UUID ID2 UUID } s1 := S{ID1: testUUID} data, err := json.Marshal(&s1) if err != nil { t.Fatal(err) } var s2 S if err := json.Unmarshal(data, &s2); err != nil { t.Fatal(err) } if !reflect.DeepEqual(&s1, &s2) { t.Errorf("got %#v, want %#v", s2, s1) } } func TestJSONArray(t *testing.T) { type S struct { ID1 Array ID2 Array } s1 := S{ID1: testArray} data, err := json.Marshal(&s1) if err != nil { t.Fatal(err) } var s2 S if err := json.Unmarshal(data, &s2); err != nil { t.Fatal(err) } if !reflect.DeepEqual(&s1, &s2) { t.Errorf("got %#v, want %#v", s2, s1) } } func TestMarshal(t *testing.T) { data, err := testUUID.MarshalBinary() if err != nil { t.Fatalf("MarhsalBinary returned unexpected error %v", err) } if !bytes.Equal(data, testUUID) { t.Fatalf("MarhsalBinary returns %x, want %x", data, testUUID) } var u UUID u.UnmarshalBinary(data) if !Equal(data, u) { t.Fatalf("UnmarhsalBinary returns %v, want %v", u, testUUID) } } func TestMarshalArray(t *testing.T) { data, err := testArray.MarshalBinary() if err != nil { t.Fatalf("MarhsalBinary returned unexpected error %v", err) } if !bytes.Equal(data, testUUID) { t.Fatalf("MarhsalBinary returns %x, want %x", data, testUUID) } var a Array a.UnmarshalBinary(data) if a != testArray { t.Fatalf("UnmarhsalBinary returns %v, want %v", a, testArray) } } func TestMarshalTextArray(t *testing.T) { data, err := testArray.MarshalText() if err != nil { t.Fatalf("MarhsalText returned unexpected error %v", err) } var a Array a.UnmarshalText(data) if a != testArray { t.Fatalf("UnmarhsalText returns %v, want %v", a, testArray) } } func BenchmarkUUID_MarshalJSON(b *testing.B) { x := &struct { UUID UUID `json:"uuid"` }{} x.UUID = Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479") if x.UUID == nil { b.Fatal("invalid uuid") } for i := 0; i < b.N; i++ { js, err := json.Marshal(x) if err != nil { b.Fatalf("marshal json: %#v (%v)", js, err) } } } func BenchmarkUUID_UnmarshalJSON(b *testing.B) { js := []byte(`{"uuid":"f47ac10b-58cc-0372-8567-0e02b2c3d479"}`) var x *struct { UUID UUID `json:"uuid"` } for i := 0; i < b.N; i++ { err := json.Unmarshal(js, &x) if err != nil { b.Fatalf("marshal json: %#v (%v)", js, err) } } }