...
1
2
3
4
5 package uuid
6
7 import (
8 "bytes"
9 "encoding/json"
10 "reflect"
11 "testing"
12 )
13
14 var testUUID = Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479")
15 var testArray = testUUID.Array()
16
17 func TestJSON(t *testing.T) {
18 type S struct {
19 ID1 UUID
20 ID2 UUID
21 }
22 s1 := S{ID1: testUUID}
23 data, err := json.Marshal(&s1)
24 if err != nil {
25 t.Fatal(err)
26 }
27 var s2 S
28 if err := json.Unmarshal(data, &s2); err != nil {
29 t.Fatal(err)
30 }
31 if !reflect.DeepEqual(&s1, &s2) {
32 t.Errorf("got %#v, want %#v", s2, s1)
33 }
34 }
35
36 func TestJSONArray(t *testing.T) {
37 type S struct {
38 ID1 Array
39 ID2 Array
40 }
41 s1 := S{ID1: testArray}
42 data, err := json.Marshal(&s1)
43 if err != nil {
44 t.Fatal(err)
45 }
46 var s2 S
47 if err := json.Unmarshal(data, &s2); err != nil {
48 t.Fatal(err)
49 }
50 if !reflect.DeepEqual(&s1, &s2) {
51 t.Errorf("got %#v, want %#v", s2, s1)
52 }
53 }
54
55 func TestMarshal(t *testing.T) {
56 data, err := testUUID.MarshalBinary()
57 if err != nil {
58 t.Fatalf("MarhsalBinary returned unexpected error %v", err)
59 }
60 if !bytes.Equal(data, testUUID) {
61 t.Fatalf("MarhsalBinary returns %x, want %x", data, testUUID)
62 }
63 var u UUID
64 u.UnmarshalBinary(data)
65 if !Equal(data, u) {
66 t.Fatalf("UnmarhsalBinary returns %v, want %v", u, testUUID)
67 }
68 }
69
70 func TestMarshalArray(t *testing.T) {
71 data, err := testArray.MarshalBinary()
72 if err != nil {
73 t.Fatalf("MarhsalBinary returned unexpected error %v", err)
74 }
75 if !bytes.Equal(data, testUUID) {
76 t.Fatalf("MarhsalBinary returns %x, want %x", data, testUUID)
77 }
78 var a Array
79 a.UnmarshalBinary(data)
80 if a != testArray {
81 t.Fatalf("UnmarhsalBinary returns %v, want %v", a, testArray)
82 }
83 }
84
85 func TestMarshalTextArray(t *testing.T) {
86 data, err := testArray.MarshalText()
87 if err != nil {
88 t.Fatalf("MarhsalText returned unexpected error %v", err)
89 }
90 var a Array
91 a.UnmarshalText(data)
92 if a != testArray {
93 t.Fatalf("UnmarhsalText returns %v, want %v", a, testArray)
94 }
95 }
96
97 func BenchmarkUUID_MarshalJSON(b *testing.B) {
98 x := &struct {
99 UUID UUID `json:"uuid"`
100 }{}
101 x.UUID = Parse("f47ac10b-58cc-0372-8567-0e02b2c3d479")
102 if x.UUID == nil {
103 b.Fatal("invalid uuid")
104 }
105 for i := 0; i < b.N; i++ {
106 js, err := json.Marshal(x)
107 if err != nil {
108 b.Fatalf("marshal json: %#v (%v)", js, err)
109 }
110 }
111 }
112
113 func BenchmarkUUID_UnmarshalJSON(b *testing.B) {
114 js := []byte(`{"uuid":"f47ac10b-58cc-0372-8567-0e02b2c3d479"}`)
115 var x *struct {
116 UUID UUID `json:"uuid"`
117 }
118 for i := 0; i < b.N; i++ {
119 err := json.Unmarshal(js, &x)
120 if err != nil {
121 b.Fatalf("marshal json: %#v (%v)", js, err)
122 }
123 }
124 }
125
View as plain text