summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/lib/pq/array_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/lib/pq/array_test.go')
-rw-r--r--vendor/github.com/lib/pq/array_test.go164
1 files changed, 164 insertions, 0 deletions
diff --git a/vendor/github.com/lib/pq/array_test.go b/vendor/github.com/lib/pq/array_test.go
index 96402fd4a..10b843184 100644
--- a/vendor/github.com/lib/pq/array_test.go
+++ b/vendor/github.com/lib/pq/array_test.go
@@ -70,6 +70,10 @@ func TestParseArrayError(t *testing.T) {
{`{,}`, "unexpected ',' at offset 1"},
{`{,x}`, "unexpected ',' at offset 1"},
{`{x,}`, "unexpected '}' at offset 3"},
+ {`{x,{`, "unexpected '{' at offset 3"},
+ {`{x},`, "unexpected ',' at offset 3"},
+ {`{x}}`, "unexpected '}' at offset 3"},
+ {`{{x}`, "expected '}' at offset 4"},
{`{""x}`, "unexpected 'x' at offset 3"},
{`{{a},{b,c}}`, "multidimensional arrays must have elements with matching dimensions"},
} {
@@ -171,6 +175,30 @@ func TestBoolArrayScanUnsupported(t *testing.T) {
}
}
+func TestBoolArrayScanEmpty(t *testing.T) {
+ var arr BoolArray
+ err := arr.Scan(`{}`)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr == nil || len(arr) != 0 {
+ t.Errorf("Expected empty, got %#v", arr)
+ }
+}
+
+func TestBoolArrayScanNil(t *testing.T) {
+ arr := BoolArray{true, true, true}
+ err := arr.Scan(nil)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr != nil {
+ t.Errorf("Expected nil, got %+v", arr)
+ }
+}
+
var BoolArrayStringTests = []struct {
str string
arr BoolArray
@@ -300,6 +328,30 @@ func TestByteaArrayScanUnsupported(t *testing.T) {
}
}
+func TestByteaArrayScanEmpty(t *testing.T) {
+ var arr ByteaArray
+ err := arr.Scan(`{}`)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr == nil || len(arr) != 0 {
+ t.Errorf("Expected empty, got %#v", arr)
+ }
+}
+
+func TestByteaArrayScanNil(t *testing.T) {
+ arr := ByteaArray{{2}, {6}, {0, 0}}
+ err := arr.Scan(nil)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr != nil {
+ t.Errorf("Expected nil, got %+v", arr)
+ }
+}
+
var ByteaArrayStringTests = []struct {
str string
arr ByteaArray
@@ -430,6 +482,30 @@ func TestFloat64ArrayScanUnsupported(t *testing.T) {
}
}
+func TestFloat64ArrayScanEmpty(t *testing.T) {
+ var arr Float64Array
+ err := arr.Scan(`{}`)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr == nil || len(arr) != 0 {
+ t.Errorf("Expected empty, got %#v", arr)
+ }
+}
+
+func TestFloat64ArrayScanNil(t *testing.T) {
+ arr := Float64Array{5, 5, 5}
+ err := arr.Scan(nil)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr != nil {
+ t.Errorf("Expected nil, got %+v", arr)
+ }
+}
+
var Float64ArrayStringTests = []struct {
str string
arr Float64Array
@@ -560,6 +636,30 @@ func TestInt64ArrayScanUnsupported(t *testing.T) {
}
}
+func TestInt64ArrayScanEmpty(t *testing.T) {
+ var arr Int64Array
+ err := arr.Scan(`{}`)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr == nil || len(arr) != 0 {
+ t.Errorf("Expected empty, got %#v", arr)
+ }
+}
+
+func TestInt64ArrayScanNil(t *testing.T) {
+ arr := Int64Array{5, 5, 5}
+ err := arr.Scan(nil)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr != nil {
+ t.Errorf("Expected nil, got %+v", arr)
+ }
+}
+
var Int64ArrayStringTests = []struct {
str string
arr Int64Array
@@ -689,6 +789,30 @@ func TestStringArrayScanUnsupported(t *testing.T) {
}
}
+func TestStringArrayScanEmpty(t *testing.T) {
+ var arr StringArray
+ err := arr.Scan(`{}`)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr == nil || len(arr) != 0 {
+ t.Errorf("Expected empty, got %#v", arr)
+ }
+}
+
+func TestStringArrayScanNil(t *testing.T) {
+ arr := StringArray{"x", "x", "x"}
+ err := arr.Scan(nil)
+
+ if err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if arr != nil {
+ t.Errorf("Expected nil, got %+v", arr)
+ }
+}
+
var StringArrayStringTests = []struct {
str string
arr StringArray
@@ -811,6 +935,7 @@ func BenchmarkStringArrayValue(b *testing.B) {
func TestGenericArrayScanUnsupported(t *testing.T) {
var s string
var ss []string
+ var nsa [1]sql.NullString
for _, tt := range []struct {
src, dest interface{}
@@ -820,6 +945,7 @@ func TestGenericArrayScanUnsupported(t *testing.T) {
{nil, true, "destination bool is not a pointer to array or slice"},
{nil, &s, "destination *string is not a pointer to array or slice"},
{nil, ss, "destination []string is not a pointer to array or slice"},
+ {nil, &nsa, "<nil> to [1]sql.NullString"},
{true, &ss, "bool to []string"},
{`{{x}}`, &ss, "multidimensional ARRAY[1][1] is not implemented"},
{`{{x},{x}}`, &ss, "multidimensional ARRAY[2][1] is not implemented"},
@@ -862,6 +988,28 @@ func TestGenericArrayScanScannerArrayString(t *testing.T) {
}
}
+func TestGenericArrayScanScannerSliceEmpty(t *testing.T) {
+ var nss []sql.NullString
+
+ if err := (GenericArray{&nss}).Scan(`{}`); err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if nss == nil || len(nss) != 0 {
+ t.Errorf("Expected empty, got %#v", nss)
+ }
+}
+
+func TestGenericArrayScanScannerSliceNil(t *testing.T) {
+ nss := []sql.NullString{{String: ``, Valid: true}, {}}
+
+ if err := (GenericArray{&nss}).Scan(nil); err != nil {
+ t.Fatalf("Expected no error, got %v", err)
+ }
+ if nss != nil {
+ t.Errorf("Expected nil, got %+v", nss)
+ }
+}
+
func TestGenericArrayScanScannerSliceBytes(t *testing.T) {
src, expected, nss := []byte(`{NULL,abc,"\""}`),
[]sql.NullString{{}, {String: `abc`, Valid: true}, {String: `"`, Valid: true}},
@@ -977,6 +1125,22 @@ func TestGenericArrayValue(t *testing.T) {
t.Errorf("Expected nil, got %q", result)
}
+ for _, tt := range []interface{}{
+ []bool(nil),
+ [][]int(nil),
+ []*int(nil),
+ []sql.NullString(nil),
+ } {
+ result, err := GenericArray{tt}.Value()
+
+ if err != nil {
+ t.Fatalf("Expected no error for %#v, got %v", tt, err)
+ }
+ if result != nil {
+ t.Errorf("Expected nil for %#v, got %q", tt, result)
+ }
+ }
+
Tilde := func(v driver.Value) FuncArrayValuer {
return FuncArrayValuer{
func() string { return "~" },