1 package pgtype_test
2
3 import (
4 "reflect"
5 "testing"
6
7 "github.com/jackc/pgtype"
8 "github.com/jackc/pgtype/testutil"
9 )
10
11 func TestPointTranscode(t *testing.T) {
12 testutil.TestSuccessfulTranscode(t, "point", []interface{}{
13 &pgtype.Point{P: pgtype.Vec2{1.234, 5.6789012345}, Status: pgtype.Present},
14 &pgtype.Point{P: pgtype.Vec2{-1.234, -5.6789}, Status: pgtype.Present},
15 &pgtype.Point{Status: pgtype.Null},
16 })
17 }
18
19 func TestPoint_Set(t *testing.T) {
20 tests := []struct {
21 name string
22 arg interface{}
23 status pgtype.Status
24 wantErr bool
25 }{
26 {
27 name: "first",
28 arg: "(12312.123123,123123.123123)",
29 status: pgtype.Present,
30 wantErr: false,
31 },
32 {
33 name: "second",
34 arg: "(1231s2.123123,123123.123123)",
35 status: pgtype.Undefined,
36 wantErr: true,
37 },
38 {
39 name: "third",
40 arg: []byte("(122.123123,123.123123)"),
41 status: pgtype.Present,
42 wantErr: false,
43 },
44 {
45 name: "third",
46 arg: nil,
47 status: pgtype.Null,
48 wantErr: false,
49 },
50 }
51 for _, tt := range tests {
52 t.Run(tt.name, func(t *testing.T) {
53 dst := &pgtype.Point{}
54 if err := dst.Set(tt.arg); (err != nil) != tt.wantErr {
55 t.Errorf("Set() error = %v, wantErr %v", err, tt.wantErr)
56 }
57 if dst.Status != tt.status {
58 t.Errorf("Expected status: %v; got: %v", tt.status, dst.Status)
59 }
60 })
61 }
62 }
63
64 func TestPoint_MarshalJSON(t *testing.T) {
65 tests := []struct {
66 name string
67 point pgtype.Point
68 want []byte
69 wantErr bool
70 }{
71 {
72 name: "first",
73 point: pgtype.Point{
74 P: pgtype.Vec2{},
75 Status: pgtype.Undefined,
76 },
77 want: nil,
78 wantErr: true,
79 },
80 {
81 name: "second",
82 point: pgtype.Point{
83 P: pgtype.Vec2{X: 12.245, Y: 432.12},
84 Status: pgtype.Present,
85 },
86 want: []byte(`"(12.245,432.12)"`),
87 wantErr: false,
88 },
89 {
90 name: "third",
91 point: pgtype.Point{
92 P: pgtype.Vec2{},
93 Status: pgtype.Null,
94 },
95 want: []byte("null"),
96 wantErr: false,
97 },
98 }
99 for _, tt := range tests {
100 t.Run(tt.name, func(t *testing.T) {
101 got, err := tt.point.MarshalJSON()
102 if (err != nil) != tt.wantErr {
103 t.Errorf("MarshalJSON() error = %v, wantErr %v", err, tt.wantErr)
104 return
105 }
106 if !reflect.DeepEqual(got, tt.want) {
107 t.Errorf("MarshalJSON() got = %v, want %v", got, tt.want)
108 }
109 })
110 }
111 }
112
113 func TestPoint_UnmarshalJSON(t *testing.T) {
114 tests := []struct {
115 name string
116 status pgtype.Status
117 arg []byte
118 wantErr bool
119 }{
120 {
121 name: "first",
122 status: pgtype.Present,
123 arg: []byte(`"(123.123,54.12)"`),
124 wantErr: false,
125 },
126 {
127 name: "second",
128 status: pgtype.Undefined,
129 arg: []byte(`"(123.123,54.1sad2)"`),
130 wantErr: true,
131 },
132 {
133 name: "third",
134 status: pgtype.Null,
135 arg: []byte("null"),
136 wantErr: false,
137 },
138 }
139 for _, tt := range tests {
140 t.Run(tt.name, func(t *testing.T) {
141 dst := &pgtype.Point{}
142 if err := dst.UnmarshalJSON(tt.arg); (err != nil) != tt.wantErr {
143 t.Errorf("UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr)
144 }
145 if dst.Status != tt.status {
146 t.Errorf("Status mismatch: %v != %v", dst.Status, tt.status)
147 }
148 })
149 }
150 }
151
View as plain text