aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/google.golang.org/appengine/datastore/datastore_test.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-07-06 21:18:14 -0700
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-07-06 21:18:14 -0700
commit459bb4531f92f8663afb6f36aa9be5b789bd591f (patch)
treef14e6c06b8e5c63612d1ff36f8cab40ae8a99d20 /vendor/google.golang.org/appengine/datastore/datastore_test.go
parent34a3fe426b33a63f2d8e02d4a70c88f137fa5410 (diff)
Update vendor dependencies
Diffstat (limited to 'vendor/google.golang.org/appengine/datastore/datastore_test.go')
-rw-r--r--vendor/google.golang.org/appengine/datastore/datastore_test.go245
1 files changed, 214 insertions, 31 deletions
diff --git a/vendor/google.golang.org/appengine/datastore/datastore_test.go b/vendor/google.golang.org/appengine/datastore/datastore_test.go
index b2856a9..683cd15 100644
--- a/vendor/google.golang.org/appengine/datastore/datastore_test.go
+++ b/vendor/google.golang.org/appengine/datastore/datastore_test.go
@@ -10,6 +10,7 @@ import (
"fmt"
"os"
"reflect"
+ "sort"
"strings"
"testing"
"time"
@@ -70,6 +71,8 @@ var (
testGeoPt0 = appengine.GeoPoint{Lat: 1.2, Lng: 3.4}
testGeoPt1 = appengine.GeoPoint{Lat: 5, Lng: 10}
testBadGeoPt = appengine.GeoPoint{Lat: 1000, Lng: 34}
+
+ now = time.Unix(1e9, 0).UTC()
)
type B0 struct {
@@ -133,6 +136,39 @@ type K1 struct {
K []*Key
}
+type S struct {
+ St string
+}
+
+type NoOmit struct {
+ A string
+ B int `datastore:"Bb"`
+ C bool `datastore:",noindex"`
+}
+
+type OmitAll struct {
+ A string `datastore:",omitempty"`
+ B int `datastore:"Bb,omitempty"`
+ C bool `datastore:",omitempty,noindex"`
+ D time.Time `datastore:",omitempty"`
+ F []int `datastore:",omitempty"`
+}
+
+type Omit struct {
+ A string `datastore:",omitempty"`
+ B int `datastore:"Bb,omitempty"`
+ C bool `datastore:",omitempty,noindex"`
+ D time.Time `datastore:",omitempty"`
+ F []int `datastore:",omitempty"`
+ S `datastore:",omitempty"`
+}
+
+type NoOmits struct {
+ No []NoOmit `datastore:",omitempty"`
+ S `datastore:",omitempty"`
+ Ss S `datastore:",omitempty"`
+}
+
type N0 struct {
X0
Nonymous X0
@@ -306,10 +342,27 @@ type Doubler struct {
B bool
}
+type Repeat struct {
+ Key string
+ Value []byte
+}
+
+type Repeated struct {
+ Repeats []Repeat
+}
+
func (d *Doubler) Load(props []Property) error {
return LoadStruct(d, props)
}
+type EmbeddedTime struct {
+ time.Time
+}
+
+type SpecialTime struct {
+ MyTime EmbeddedTime
+}
+
func (d *Doubler) Save() ([]Property, error) {
// Save the default Property slice to an in-memory buffer (a PropertyList).
props, err := SaveStruct(d)
@@ -476,6 +529,81 @@ var testCases = []testCase{
"",
},
{
+ "omit empty, all",
+ &OmitAll{},
+ new(PropertyList),
+ "",
+ "",
+ },
+ {
+ "omit empty",
+ &Omit{},
+ &PropertyList{
+ Property{Name: "St", Value: "", NoIndex: false, Multiple: false},
+ },
+ "",
+ "",
+ },
+ {
+ "omit empty, fields populated",
+ &Omit{
+ A: "a",
+ B: 10,
+ C: true,
+ D: now,
+ F: []int{11},
+ },
+ &PropertyList{
+ Property{Name: "A", Value: "a", NoIndex: false, Multiple: false},
+ Property{Name: "Bb", Value: int64(10), NoIndex: false, Multiple: false},
+ Property{Name: "C", Value: true, NoIndex: true, Multiple: false},
+ Property{Name: "D", Value: now, NoIndex: false, Multiple: false},
+ Property{Name: "F", Value: int64(11), NoIndex: false, Multiple: true},
+ Property{Name: "St", Value: "", NoIndex: false, Multiple: false},
+ },
+ "",
+ "",
+ },
+ {
+ "omit empty, fields populated",
+ &Omit{
+ A: "a",
+ B: 10,
+ C: true,
+ D: now,
+ F: []int{11},
+ S: S{St: "string"},
+ },
+ &PropertyList{
+ Property{Name: "A", Value: "a", NoIndex: false, Multiple: false},
+ Property{Name: "Bb", Value: int64(10), NoIndex: false, Multiple: false},
+ Property{Name: "C", Value: true, NoIndex: true, Multiple: false},
+ Property{Name: "D", Value: now, NoIndex: false, Multiple: false},
+ Property{Name: "F", Value: int64(11), NoIndex: false, Multiple: true},
+ Property{Name: "St", Value: "string", NoIndex: false, Multiple: false},
+ },
+ "",
+ "",
+ },
+ {
+ "omit empty does not propagate",
+ &NoOmits{
+ No: []NoOmit{
+ NoOmit{},
+ },
+ S: S{},
+ Ss: S{},
+ },
+ &PropertyList{
+ Property{Name: "No.A", Value: "", NoIndex: false, Multiple: true},
+ Property{Name: "No.Bb", Value: int64(0), NoIndex: false, Multiple: true},
+ Property{Name: "No.C", Value: false, NoIndex: true, Multiple: true},
+ Property{Name: "Ss.St", Value: "", NoIndex: false, Multiple: false},
+ Property{Name: "St", Value: "", NoIndex: false, Multiple: false}},
+ "",
+ "",
+ },
+ {
"key",
&K0{K: testKey1a},
&K0{K: testKey1b},
@@ -625,6 +753,35 @@ var testCases = []testCase{
"",
},
{
+ "slice of slices of bytes",
+ &Repeated{
+ Repeats: []Repeat{
+ {
+ Key: "key 1",
+ Value: []byte("value 1"),
+ },
+ {
+ Key: "key 2",
+ Value: []byte("value 2"),
+ },
+ },
+ },
+ &Repeated{
+ Repeats: []Repeat{
+ {
+ Key: "key 1",
+ Value: []byte("value 1"),
+ },
+ {
+ Key: "key 2",
+ Value: []byte("value 2"),
+ },
+ },
+ },
+ "",
+ "",
+ },
+ {
"long blob",
&B0{B: makeUint8Slice(maxIndexedProperties + 1)},
&B0{B: makeUint8Slice(maxIndexedProperties + 1)},
@@ -727,16 +884,16 @@ var testCases = []testCase{
// A and B are renamed to a and b; A and C are noindex, I is ignored.
// Indexed properties are loaded before raw properties. Thus, the
// result is: b, b, b, D, E, a, c.
- Property{Name: "b", Value: int64(21), NoIndex: false, Multiple: true},
- Property{Name: "b", Value: int64(22), NoIndex: false, Multiple: true},
- Property{Name: "b", Value: int64(23), NoIndex: false, Multiple: true},
+ Property{Name: "C", Value: int64(3), NoIndex: true, Multiple: false},
Property{Name: "D", Value: int64(4), NoIndex: false, Multiple: false},
Property{Name: "E", Value: int64(5), NoIndex: false, Multiple: false},
- Property{Name: "G", Value: int64(7), NoIndex: false, Multiple: false},
- Property{Name: "a", Value: int64(1), NoIndex: true, Multiple: false},
- Property{Name: "C", Value: int64(3), NoIndex: true, Multiple: false},
Property{Name: "F", Value: int64(6), NoIndex: true, Multiple: false},
+ Property{Name: "G", Value: int64(7), NoIndex: false, Multiple: false},
Property{Name: "J", Value: int64(9), NoIndex: true, Multiple: false},
+ Property{Name: "a", Value: int64(1), NoIndex: true, Multiple: false},
+ Property{Name: "b", Value: int64(21), NoIndex: false, Multiple: true},
+ Property{Name: "b", Value: int64(22), NoIndex: false, Multiple: true},
+ Property{Name: "b", Value: int64(23), NoIndex: false, Multiple: true},
},
"",
"",
@@ -783,8 +940,8 @@ var testCases = []testCase{
"save struct load props",
&X0{S: "s", I: 1},
&PropertyList{
- Property{Name: "S", Value: "s", NoIndex: false, Multiple: false},
Property{Name: "I", Value: int64(1), NoIndex: false, Multiple: false},
+ Property{Name: "S", Value: "s", NoIndex: false, Multiple: false},
},
"",
"",
@@ -845,10 +1002,10 @@ var testCases = []testCase{
&PropertyList{
Property{Name: "A", Value: int64(1), NoIndex: false, Multiple: false},
Property{Name: "I.W", Value: int64(10), NoIndex: false, Multiple: true},
- Property{Name: "I.X", Value: "ten", NoIndex: false, Multiple: true},
Property{Name: "I.W", Value: int64(20), NoIndex: false, Multiple: true},
- Property{Name: "I.X", Value: "twenty", NoIndex: false, Multiple: true},
Property{Name: "I.W", Value: int64(30), NoIndex: false, Multiple: true},
+ Property{Name: "I.X", Value: "ten", NoIndex: false, Multiple: true},
+ Property{Name: "I.X", Value: "twenty", NoIndex: false, Multiple: true},
Property{Name: "I.X", Value: "thirty", NoIndex: false, Multiple: true},
Property{Name: "J.Y", Value: float64(3.14), NoIndex: false, Multiple: false},
Property{Name: "Z", Value: true, NoIndex: false, Multiple: false},
@@ -1115,33 +1272,33 @@ var testCases = []testCase{
},
},
&PropertyList{
- Property{Name: "red.S", Value: "rouge", NoIndex: false, Multiple: false},
- Property{Name: "red.I", Value: int64(0), NoIndex: false, Multiple: false},
- Property{Name: "red.Nonymous.S", Value: "rosso0", NoIndex: false, Multiple: true},
- Property{Name: "red.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "red.Nonymous.S", Value: "rosso1", NoIndex: false, Multiple: true},
- Property{Name: "red.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "red.Other", Value: "", NoIndex: false, Multiple: false},
- Property{Name: "green.S", Value: "vert", NoIndex: false, Multiple: false},
- Property{Name: "green.I", Value: int64(0), NoIndex: false, Multiple: false},
- Property{Name: "green.Nonymous.S", Value: "verde0", NoIndex: false, Multiple: true},
- Property{Name: "green.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "green.Nonymous.S", Value: "verde1", NoIndex: false, Multiple: true},
- Property{Name: "green.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "green.Nonymous.S", Value: "verde2", NoIndex: false, Multiple: true},
- Property{Name: "green.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "green.Other", Value: "", NoIndex: false, Multiple: false},
- Property{Name: "Blue.S", Value: "bleu", NoIndex: false, Multiple: false},
Property{Name: "Blue.I", Value: int64(0), NoIndex: false, Multiple: false},
- Property{Name: "Blue.Nonymous.S", Value: "blu0", NoIndex: false, Multiple: true},
Property{Name: "Blue.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "Blue.Nonymous.S", Value: "blu1", NoIndex: false, Multiple: true},
Property{Name: "Blue.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "Blue.Nonymous.S", Value: "blu2", NoIndex: false, Multiple: true},
Property{Name: "Blue.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
- Property{Name: "Blue.Nonymous.S", Value: "blu3", NoIndex: false, Multiple: true},
Property{Name: "Blue.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
+ Property{Name: "Blue.Nonymous.S", Value: "blu0", NoIndex: false, Multiple: true},
+ Property{Name: "Blue.Nonymous.S", Value: "blu1", NoIndex: false, Multiple: true},
+ Property{Name: "Blue.Nonymous.S", Value: "blu2", NoIndex: false, Multiple: true},
+ Property{Name: "Blue.Nonymous.S", Value: "blu3", NoIndex: false, Multiple: true},
Property{Name: "Blue.Other", Value: "", NoIndex: false, Multiple: false},
+ Property{Name: "Blue.S", Value: "bleu", NoIndex: false, Multiple: false},
+ Property{Name: "green.I", Value: int64(0), NoIndex: false, Multiple: false},
+ Property{Name: "green.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
+ Property{Name: "green.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
+ Property{Name: "green.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
+ Property{Name: "green.Nonymous.S", Value: "verde0", NoIndex: false, Multiple: true},
+ Property{Name: "green.Nonymous.S", Value: "verde1", NoIndex: false, Multiple: true},
+ Property{Name: "green.Nonymous.S", Value: "verde2", NoIndex: false, Multiple: true},
+ Property{Name: "green.Other", Value: "", NoIndex: false, Multiple: false},
+ Property{Name: "green.S", Value: "vert", NoIndex: false, Multiple: false},
+ Property{Name: "red.I", Value: int64(0), NoIndex: false, Multiple: false},
+ Property{Name: "red.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
+ Property{Name: "red.Nonymous.I", Value: int64(0), NoIndex: false, Multiple: true},
+ Property{Name: "red.Nonymous.S", Value: "rosso0", NoIndex: false, Multiple: true},
+ Property{Name: "red.Nonymous.S", Value: "rosso1", NoIndex: false, Multiple: true},
+ Property{Name: "red.Other", Value: "", NoIndex: false, Multiple: false},
+ Property{Name: "red.S", Value: "rouge", NoIndex: false, Multiple: false},
},
"",
"",
@@ -1196,10 +1353,10 @@ var testCases = []testCase{
}
}{},
&PropertyList{
- Property{Name: "B.Y", Value: "", NoIndex: false, Multiple: false},
Property{Name: "A.X", Value: "", NoIndex: true, Multiple: false},
Property{Name: "A.Y", Value: "", NoIndex: true, Multiple: false},
Property{Name: "B.X", Value: "", NoIndex: true, Multiple: false},
+ Property{Name: "B.Y", Value: "", NoIndex: false, Multiple: false},
},
"",
"",
@@ -1272,6 +1429,22 @@ var testCases = []testCase{
"",
"",
},
+ {
+ "embedded time field",
+ &SpecialTime{MyTime: EmbeddedTime{now}},
+ &SpecialTime{MyTime: EmbeddedTime{now}},
+ "",
+ "",
+ },
+ {
+ "embedded time load",
+ &PropertyList{
+ Property{Name: "MyTime.", Value: now, NoIndex: false, Multiple: false},
+ },
+ &SpecialTime{MyTime: EmbeddedTime{now}},
+ "",
+ "",
+ },
}
// checkErr returns the empty string if either both want and err are zero,
@@ -1309,6 +1482,10 @@ func TestRoundTrip(t *testing.T) {
t.Errorf("%s: load: %s", tc.desc, s)
continue
}
+ if pl, ok := got.(*PropertyList); ok {
+ // Sort by name to make sure we have a deterministic order.
+ sort.Stable(byName(*pl))
+ }
equal := false
if gotT, ok := got.(*T); ok {
// Round tripping a time.Time can result in a different time.Location: Local instead of UTC.
@@ -1324,6 +1501,12 @@ func TestRoundTrip(t *testing.T) {
}
}
+type byName PropertyList
+
+func (s byName) Len() int { return len(s) }
+func (s byName) Less(i, j int) bool { return s[i].Name < s[j].Name }
+func (s byName) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+
func TestQueryConstruction(t *testing.T) {
tests := []struct {
q, exp *Query