Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: service/rawdatastore/datastore_test.go

Issue 1243323002: Refactor a bit. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: fix golint Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « service/rawdatastore/datastore_key_test.go ('k') | service/rawdatastore/errors.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: service/rawdatastore/datastore_test.go
diff --git a/helper/datastore_test.go b/service/rawdatastore/datastore_test.go
similarity index 86%
rename from helper/datastore_test.go
rename to service/rawdatastore/datastore_test.go
index 31372b6e60e4420c5beb5fb929e3dac5d76e2cce..462fe7cfac382ea5e6c20ac429050da0031821b7 100644
--- a/helper/datastore_test.go
+++ b/service/rawdatastore/datastore_test.go
@@ -4,7 +4,7 @@
// adapted from github.com/golang/appengine/datastore
-package helper
+package rawdatastore
import (
"bytes"
@@ -17,13 +17,13 @@ import (
"testing"
"time"
- "github.com/luci/gae"
+ "github.com/luci/gae/service/blobstore"
. "github.com/smartystreets/goconvey/convey"
)
var (
- mp = gae.MkDSProperty
- mpNI = gae.MkDSPropertyNI
+ mp = MkProperty
+ mpNI = MkPropertyNI
)
const testAppID = "testApp"
@@ -64,9 +64,9 @@ var (
testKey1b = mkKey("aid", "", "kind", "name1")
testKey2a = mkKey("aid", "", "kind", "name0", "kind", "name2")
testKey2b = mkKey("aid", "", "kind", "name0", "kind", "name2")
- testGeoPt0 = gae.DSGeoPoint{Lat: 1.2, Lng: 3.4}
- testGeoPt1 = gae.DSGeoPoint{Lat: 5, Lng: 10}
- testBadGeoPt = gae.DSGeoPoint{Lat: 1000, Lng: 34}
+ testGeoPt0 = GeoPoint{Lat: 1.2, Lng: 3.4}
+ testGeoPt1 = GeoPoint{Lat: 5, Lng: 10}
+ testBadGeoPt = GeoPoint{Lat: 1000, Lng: 34}
)
type B0 struct {
@@ -90,7 +90,7 @@ type B4 struct {
}
type B5 struct {
- B gae.DSByteString
+ B ByteString
}
type C0 struct {
@@ -115,19 +115,19 @@ type C3 struct {
type E struct{}
type G0 struct {
- G gae.DSGeoPoint
+ G GeoPoint
}
type G1 struct {
- G []gae.DSGeoPoint
+ G []GeoPoint
}
type K0 struct {
- K gae.DSKey
+ K Key
}
type K1 struct {
- K []gae.DSKey
+ K []Key
}
type N0 struct {
@@ -319,21 +319,21 @@ type MutuallyRecursive1 struct {
}
type ExoticTypes struct {
- BS gae.BSKey
- DSBS gae.DSByteString
+ BS blobstore.Key
+ DSBS ByteString
}
type Underspecified struct {
- Iface gae.DSPropertyConverter
+ Iface PropertyConverter
}
type MismatchTypes struct {
S string
B bool
F float32
- K gae.DSKey
+ K Key
T time.Time
- G gae.DSGeoPoint
+ G GeoPoint
IS []int
}
@@ -348,11 +348,11 @@ type Doubler struct {
B bool
}
-func (d *Doubler) Load(props gae.DSPropertyMap) error {
+func (d *Doubler) Load(props PropertyMap) error {
return GetPLS(d).Load(props)
}
-func (d *Doubler) Save(withMeta bool) (gae.DSPropertyMap, error) {
+func (d *Doubler) Save(withMeta bool) (PropertyMap, error) {
pls := GetPLS(d)
propMap, err := pls.Save(withMeta)
if err != nil {
@@ -375,17 +375,17 @@ func (d *Doubler) Save(withMeta bool) (gae.DSPropertyMap, error) {
return propMap, nil
}
-func (d *Doubler) GetMeta(string) (interface{}, error) { return nil, gae.ErrDSMetaFieldUnset }
-func (d *Doubler) SetMeta(string, interface{}) error { return gae.ErrDSMetaFieldUnset }
+func (d *Doubler) GetMeta(string) (interface{}, error) { return nil, ErrMetaFieldUnset }
+func (d *Doubler) SetMeta(string, interface{}) error { return ErrMetaFieldUnset }
func (d *Doubler) Problem() error { return nil }
-var _ gae.DSPropertyLoadSaver = (*Doubler)(nil)
+var _ PropertyLoadSaver = (*Doubler)(nil)
type Deriver struct {
S, Derived, Ignored string
}
-func (d *Deriver) Load(props gae.DSPropertyMap) error {
+func (d *Deriver) Load(props PropertyMap) error {
for name, p := range props {
if name != "S" {
continue
@@ -396,36 +396,36 @@ func (d *Deriver) Load(props gae.DSPropertyMap) error {
return nil
}
-func (d *Deriver) Save(withMeta bool) (gae.DSPropertyMap, error) {
- return map[string][]gae.DSProperty{
+func (d *Deriver) Save(withMeta bool) (PropertyMap, error) {
+ return map[string][]Property{
"S": {mp(d.S)},
}, nil
}
-func (d *Deriver) GetMeta(string) (interface{}, error) { return nil, gae.ErrDSMetaFieldUnset }
-func (d *Deriver) SetMeta(string, interface{}) error { return gae.ErrDSMetaFieldUnset }
+func (d *Deriver) GetMeta(string) (interface{}, error) { return nil, ErrMetaFieldUnset }
+func (d *Deriver) SetMeta(string, interface{}) error { return ErrMetaFieldUnset }
func (d *Deriver) Problem() error { return nil }
-var _ gae.DSPropertyLoadSaver = (*Deriver)(nil)
+var _ PropertyLoadSaver = (*Deriver)(nil)
type BK struct {
- Key gae.BSKey
+ Key blobstore.Key
}
type Convertable []int64
-var _ gae.DSPropertyConverter = (*Convertable)(nil)
+var _ PropertyConverter = (*Convertable)(nil)
-func (c *Convertable) ToDSProperty() (ret gae.DSProperty, err error) {
+func (c *Convertable) ToProperty() (ret Property, err error) {
buf := make([]string, len(*c))
for i, v := range *c {
buf[i] = strconv.FormatInt(v, 10)
}
- err = ret.SetValue(strings.Join(buf, ","), gae.NoIndex)
+ err = ret.SetValue(strings.Join(buf, ","), NoIndex)
return
}
-func (c *Convertable) FromDSProperty(pv gae.DSProperty) error {
+func (c *Convertable) FromProperty(pv Property) error {
if sval, ok := pv.Value().(string); ok {
for _, t := range strings.Split(sval, ",") {
ival, err := strconv.ParseInt(t, 10, 64)
@@ -452,12 +452,12 @@ type Convertable2 struct {
Exploded []string
}
-func (c *Convertable2) ToDSProperty() (ret gae.DSProperty, err error) {
- err = ret.SetValue(c.Data, gae.ShouldIndex)
+func (c *Convertable2) ToProperty() (ret Property, err error) {
+ err = ret.SetValue(c.Data, ShouldIndex)
return
}
-func (c *Convertable2) FromDSProperty(pv gae.DSProperty) error {
+func (c *Convertable2) FromProperty(pv Property) error {
if sval, ok := pv.Value().(string); ok {
c.Data = sval
c.Exploded = []string{"turn", "down", "for", "what"}
@@ -476,18 +476,18 @@ type ImpossibleInner2 struct {
type JSONKVProp map[string]interface{}
-var _ gae.DSPropertyConverter = (*JSONKVProp)(nil)
+var _ PropertyConverter = (*JSONKVProp)(nil)
-func (j *JSONKVProp) ToDSProperty() (ret gae.DSProperty, err error) {
+func (j *JSONKVProp) ToProperty() (ret Property, err error) {
data, err := json.Marshal(map[string]interface{}(*j))
if err != nil {
return
}
- err = ret.SetValue(data, gae.NoIndex)
+ err = ret.SetValue(data, NoIndex)
return
}
-func (j *JSONKVProp) FromDSProperty(pv gae.DSProperty) error {
+func (j *JSONKVProp) FromProperty(pv Property) error {
if bval, ok := pv.Value().([]byte); ok {
dec := json.NewDecoder(bytes.NewBuffer(bval))
dec.UseNumber()
@@ -502,19 +502,19 @@ type Impossible3 struct {
type Complex complex128
-var _ gae.DSPropertyConverter = (*Complex)(nil)
+var _ PropertyConverter = (*Complex)(nil)
-func (c *Complex) ToDSProperty() (ret gae.DSProperty, err error) {
+func (c *Complex) ToProperty() (ret Property, err error) {
// cheat hardkore and usurp GeoPoint so datastore will index these suckers
// (note that this won't REALLY work, since GeoPoints are limited to a very
// limited range of values, but it's nice to pretend ;)). You'd probably
// really end up with a packed binary representation.
- err = ret.SetValue(gae.DSGeoPoint{Lat: real(*c), Lng: imag(*c)}, gae.ShouldIndex)
+ err = ret.SetValue(GeoPoint{Lat: real(*c), Lng: imag(*c)}, ShouldIndex)
return
}
-func (c *Complex) FromDSProperty(p gae.DSProperty) error {
- if gval, ok := p.Value().(gae.DSGeoPoint); ok {
+func (c *Complex) FromProperty(p Property) error {
+ if gval, ok := p.Value().(GeoPoint); ok {
*c = Complex(complex(gval.Lat, gval.Lng))
return nil
}
@@ -526,11 +526,11 @@ type Impossible4 struct {
}
type DerivedKey struct {
- K *GenericDSKey
+ K *GenericKey
}
type IfaceKey struct {
- K gae.DSKey
+ K Key
}
type testCase struct {
@@ -596,14 +596,14 @@ var testCases = []testCase{
{
desc: "geopoint as props",
src: &G0{G: testGeoPt0},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"G": {mp(testGeoPt0)},
},
},
{
desc: "geopoint slice",
- src: &G1{G: []gae.DSGeoPoint{testGeoPt0, testGeoPt1}},
- want: &G1{G: []gae.DSGeoPoint{testGeoPt0, testGeoPt1}},
+ src: &G1{G: []GeoPoint{testGeoPt0, testGeoPt1}},
+ want: &G1{G: []GeoPoint{testGeoPt0, testGeoPt1}},
},
{
desc: "key",
@@ -622,13 +622,13 @@ var testCases = []testCase{
},
{
desc: "all nil keys in slice",
- src: &K1{[]gae.DSKey{nil, nil}},
- want: &K1{[]gae.DSKey{nil, nil}},
+ src: &K1{[]Key{nil, nil}},
+ want: &K1{[]Key{nil, nil}},
},
{
desc: "some nil keys in slice",
- src: &K1{[]gae.DSKey{testKey1a, nil, testKey2a}},
- want: &K1{[]gae.DSKey{testKey1b, nil, testKey2b}},
+ src: &K1{[]Key{testKey1a, nil, testKey2a}},
+ want: &K1{[]Key{testKey1b, nil, testKey2b}},
},
{
desc: "overflow",
@@ -644,7 +644,7 @@ var testCases = []testCase{
{
desc: "time as props",
src: &T{T: time.Unix(1e9, 0).UTC()},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"T": {mp(time.Unix(1e9, 0).UTC())},
},
},
@@ -715,13 +715,13 @@ var testCases = []testCase{
{
desc: "use convertable slice (to map)",
src: &Impossible{[]ImpossibleInner{{Convertable{1, 5, 9}}, {Convertable{2, 4, 6}}}},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"Nested.wot": {mpNI("1,5,9"), mpNI("2,4,6")},
},
},
{
desc: "convertable slice (bad load)",
- src: gae.DSPropertyMap{"Nested.wot": {mpNI([]byte("ohai"))}},
+ src: PropertyMap{"Nested.wot": {mpNI([]byte("ohai"))}},
want: &Impossible{[]ImpossibleInner{{}}},
loadErr: "nope",
},
@@ -764,7 +764,7 @@ var testCases = []testCase{
"what": []interface{}{"is", "really", 100},
},
},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"kewelmap": {
mpNI([]byte(
`{"epic":"success","no_way!":[true,"story"],"what":["is","really",100]}`))},
@@ -784,26 +784,26 @@ var testCases = []testCase{
src: &Impossible4{
[]Complex{complex(1, 2), complex(3, 4)},
},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"Values": {
- mp(gae.DSGeoPoint{Lat: 1, Lng: 2}), mp(gae.DSGeoPoint{Lat: 3, Lng: 4})},
+ mp(GeoPoint{Lat: 1, Lng: 2}), mp(GeoPoint{Lat: 3, Lng: 4})},
},
},
{
desc: "convertable complex slice (bad load)",
- src: gae.DSPropertyMap{"Values": {mp("hello")}},
+ src: PropertyMap{"Values": {mp("hello")}},
want: &Impossible4{[]Complex(nil)},
loadErr: "nope",
},
{
- desc: "allow concrete gae.DSKey implementors (save)",
- src: &DerivedKey{testKey2a.(*GenericDSKey)},
+ desc: "allow concrete Key implementors (save)",
+ src: &DerivedKey{testKey2a.(*GenericKey)},
want: &IfaceKey{testKey2b},
},
{
- desc: "allow concrete gae.DSKey implementors (load)",
+ desc: "allow concrete Key implementors (load)",
src: &IfaceKey{testKey2b},
- want: &DerivedKey{testKey2a.(*GenericDSKey)},
+ want: &DerivedKey{testKey2a.(*GenericKey)},
},
{
desc: "save []float64 load []int64",
@@ -879,20 +879,20 @@ var testCases = []testCase{
}},
},
{
- desc: "short gae.DSByteString",
- src: &B5{B: gae.DSByteString(makeUint8Slice(3))},
- want: &B5{B: gae.DSByteString(makeUint8Slice(3))},
+ desc: "short ByteString",
+ src: &B5{B: ByteString(makeUint8Slice(3))},
+ want: &B5{B: ByteString(makeUint8Slice(3))},
},
{
- desc: "short gae.DSByteString as props",
- src: &B5{B: gae.DSByteString(makeUint8Slice(3))},
- want: gae.DSPropertyMap{
- "B": {mp(gae.DSByteString(makeUint8Slice(3)))},
+ desc: "short ByteString as props",
+ src: &B5{B: ByteString(makeUint8Slice(3))},
+ want: PropertyMap{
+ "B": {mp(ByteString(makeUint8Slice(3)))},
},
},
{
desc: "[]byte must be noindex",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"B": {mp(makeUint8Slice(3))},
},
actualNoIndex: true,
@@ -900,7 +900,7 @@ var testCases = []testCase{
{
desc: "save tagged load props",
src: &Tagged{A: 1, B: []int{21, 22, 23}, C: 3, D: 4, E: 5, I: 6, J: 7},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
// 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.
@@ -923,7 +923,7 @@ var testCases = []testCase{
},
{
desc: "save props load tagged",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"A": {mpNI(11)},
"a": {mpNI(12)},
},
@@ -964,14 +964,14 @@ var testCases = []testCase{
{
desc: "save struct load props",
src: &X0{S: "s", I: 1},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"S": {mp("s")},
"I": {mp(1)},
},
},
{
desc: "save props load struct",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"S": {mp("s")},
"I": {mp(1)},
},
@@ -979,7 +979,7 @@ var testCases = []testCase{
},
{
desc: "nil-value props",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"I": {mp(nil)},
"B": {mp(nil)},
"S": {mp(nil)},
@@ -997,7 +997,7 @@ var testCases = []testCase{
B bool
S string
F float64
- K gae.DSKey
+ K Key
T time.Time
J []int64
}{
@@ -1020,7 +1020,7 @@ var testCases = []testCase{
Z: true,
},
},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"A": {mp(1)},
"I.W": {
mp(10),
@@ -1038,7 +1038,7 @@ var testCases = []testCase{
},
{
desc: "save props load outer-equivalent",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"A": {mp(1)},
"I.W": {
mp(10),
@@ -1088,13 +1088,13 @@ var testCases = []testCase{
{
desc: "dotted names save",
src: &Dotted{A: DottedA{B: DottedB{C: 88}}},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"A0.A1.A2.B3.C4.C5": {mp(88)},
},
},
{
desc: "dotted names load",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"A0.A1.A2.B3.C4.C5": {mp(99)},
},
want: &Dotted{A: DottedA{B: DottedB{C: 99}}},
@@ -1160,11 +1160,11 @@ var testCases = []testCase{
desc: "exotic types",
src: &ExoticTypes{
BS: "sup",
- DSBS: gae.DSByteString("nerds"),
+ DSBS: ByteString("nerds"),
},
want: &ExoticTypes{
BS: "sup",
- DSBS: gae.DSByteString("nerds"),
+ DSBS: ByteString("nerds"),
},
},
{
@@ -1174,47 +1174,47 @@ var testCases = []testCase{
},
{
desc: "mismatch (string)",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"K": {mp(199)},
"S": {mp([]byte("cats"))},
- "F": {mp(gae.DSByteString("nurbs"))},
+ "F": {mp(ByteString("nurbs"))},
},
want: &MismatchTypes{},
loadErr: "type mismatch",
},
{
desc: "mismatch (float)",
- src: gae.DSPropertyMap{"F": {mp(gae.BSKey("wot"))}},
+ src: PropertyMap{"F": {mp(blobstore.Key("wot"))}},
want: &MismatchTypes{},
loadErr: "type mismatch",
},
{
desc: "mismatch (float/overflow)",
- src: gae.DSPropertyMap{"F": {mp(math.MaxFloat64)}},
+ src: PropertyMap{"F": {mp(math.MaxFloat64)}},
want: &MismatchTypes{},
loadErr: "overflows",
},
{
desc: "mismatch (key)",
- src: gae.DSPropertyMap{"K": {mp(false)}},
+ src: PropertyMap{"K": {mp(false)}},
want: &MismatchTypes{},
loadErr: "type mismatch",
},
{
desc: "mismatch (bool)",
- src: gae.DSPropertyMap{"B": {mp(testKey0)}},
+ src: PropertyMap{"B": {mp(testKey0)}},
want: &MismatchTypes{},
loadErr: "type mismatch",
},
{
desc: "mismatch (time)",
- src: gae.DSPropertyMap{"T": {mp(gae.DSGeoPoint{})}},
+ src: PropertyMap{"T": {mp(GeoPoint{})}},
want: &MismatchTypes{},
loadErr: "type mismatch",
},
{
desc: "mismatch (geopoint)",
- src: gae.DSPropertyMap{"G": {mp(time.Now().UTC())}},
+ src: PropertyMap{"G": {mp(time.Now().UTC())}},
want: &MismatchTypes{},
loadErr: "type mismatch",
},
@@ -1325,7 +1325,7 @@ var testCases = []testCase{
},
},
},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"red.S": {mp("rouge")},
"red.I": {mp(0)},
"red.Nonymous.S": {mp("rosso0"), mp("rosso1")},
@@ -1345,7 +1345,7 @@ var testCases = []testCase{
},
{
desc: "save props load structs with ragged fields",
- src: gae.DSPropertyMap{
+ src: PropertyMap{
"red.S": {mp("rot")},
"green.Nonymous.I": {mp(10), mp(11), mp(12), mp(13)},
"Blue.Nonymous.S": {mp("blau0"), mp("blau1"), mp("blau2")},
@@ -1384,7 +1384,7 @@ var testCases = []testCase{
Y string
}
}{},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"B.Y": {mp("")},
"A.X": {mpNI("")},
"A.Y": {mpNI("")},
@@ -1396,7 +1396,7 @@ var testCases = []testCase{
src: &struct {
Inner1 `gae:"foo"`
}{},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"foo.W": {mp(0)},
"foo.X": {mp("")},
},
@@ -1421,7 +1421,7 @@ var testCases = []testCase{
src: &struct {
i, J int64
}{i: 1, J: 2},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"J": {mp(2)},
},
},
@@ -1432,7 +1432,7 @@ var testCases = []testCase{
}{
J: json.RawMessage("rawr"),
},
- want: gae.DSPropertyMap{
+ want: PropertyMap{
"J": {mp([]byte("rawr"))},
},
},
@@ -1505,7 +1505,7 @@ func TestRoundTrip(t *testing.T) {
for _, tc := range testCases {
tc := tc
Convey(tc.desc, func() {
- pls, ok := tc.src.(gae.DSPropertyLoadSaver)
+ pls, ok := tc.src.(PropertyLoadSaver)
if !ok {
pls = GetPLS(tc.src)
}
@@ -1522,19 +1522,19 @@ func TestRoundTrip(t *testing.T) {
if tc.actualNoIndex {
for _, props := range savedProps {
- So(props[0].IndexSetting(), ShouldEqual, gae.NoIndex)
+ So(props[0].IndexSetting(), ShouldEqual, NoIndex)
return
}
So(true, ShouldBeFalse) // shouldn't get here
}
var got interface{}
- if _, ok := tc.want.(gae.DSPropertyMap); ok {
- pls = gae.DSPropertyMap{}
+ if _, ok := tc.want.(PropertyMap); ok {
+ pls = PropertyMap{}
got = pls
} else {
got = reflect.New(reflect.TypeOf(tc.want).Elem()).Interface()
- if pls, ok = got.(gae.DSPropertyLoadSaver); !ok {
+ if pls, ok = got.(PropertyLoadSaver); !ok {
pls = GetPLS(got)
}
}
@@ -1584,7 +1584,7 @@ func TestSpecial(t *testing.T) {
o := &N0{ID: 100}
pls := GetPLS(o)
_, err := pls.GetMeta("wat")
- So(err, ShouldEqual, gae.ErrDSMetaFieldUnset)
+ So(err, ShouldEqual, ErrMetaFieldUnset)
})
Convey("getting/setting from a bad struct is an error", func() {
@@ -1613,7 +1613,7 @@ func TestSpecial(t *testing.T) {
So(err.Error(), ShouldContainSubstring, "unexported field")
err = pls.SetMeta("noob", "hi")
- So(err, ShouldEqual, gae.ErrDSMetaFieldUnset)
+ So(err, ShouldEqual, ErrMetaFieldUnset)
})
})
@@ -1636,7 +1636,7 @@ func TestSpecial(t *testing.T) {
Convey("attempting to get a PLS for a non *struct is an error", func() {
pls := GetPLS((*[]string)(nil))
- So(pls.Problem(), ShouldEqual, gae.ErrDSInvalidEntityType)
+ So(pls.Problem(), ShouldEqual, ErrInvalidEntityType)
})
Convey("convertible meta default types", func() {
@@ -1664,9 +1664,9 @@ func TestSpecial(t *testing.T) {
pls := GetPLS(&OKDefaults{})
pm, err := pls.Save(true)
So(err, ShouldBeNil)
- So(pm, ShouldResemble, gae.DSPropertyMap{
- "$when": {gae.MkDSPropertyNI("tomorrow")},
- "$amt": {gae.MkDSPropertyNI(100)},
+ So(pm, ShouldResemble, PropertyMap{
+ "$when": {mpNI("tomorrow")},
+ "$amt": {mpNI(100)},
})
v, err := pm.GetMeta("when")
« no previous file with comments | « service/rawdatastore/datastore_key_test.go ('k') | service/rawdatastore/errors.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698