OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // adapted from github.com/golang/appengine/datastore | 5 // adapted from github.com/golang/appengine/datastore |
6 | 6 |
7 package datastore | 7 package datastore |
8 | 8 |
9 import ( | 9 import ( |
10 "fmt" | 10 "fmt" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 return nil | 83 return nil |
84 } | 84 } |
85 | 85 |
86 func (f *fakeDatastore) GetMulti(keys []*Key, _meta MultiMetaGetter, cb GetMulti
CB) error { | 86 func (f *fakeDatastore) GetMulti(keys []*Key, _meta MultiMetaGetter, cb GetMulti
CB) error { |
87 if keys[0].Kind() == "FailAll" { | 87 if keys[0].Kind() == "FailAll" { |
88 return errors.New("GetMulti fail all") | 88 return errors.New("GetMulti fail all") |
89 } | 89 } |
90 for i, k := range keys { | 90 for i, k := range keys { |
91 if k.Kind() == "Fail" { | 91 if k.Kind() == "Fail" { |
92 cb(nil, errors.New("GetMulti fail")) | 92 cb(nil, errors.New("GetMulti fail")) |
| 93 } else if k.Kind() == "DNE" { |
| 94 cb(nil, ErrNoSuchEntity) |
93 } else { | 95 } else { |
94 cb(PropertyMap{"Value": {MkProperty(i + 1)}}, nil) | 96 cb(PropertyMap{"Value": {MkProperty(i + 1)}}, nil) |
95 } | 97 } |
96 } | 98 } |
97 return nil | 99 return nil |
98 } | 100 } |
99 | 101 |
100 func (f *fakeDatastore) DeleteMulti(keys []*Key, cb DeleteMultiCB) error { | 102 func (f *fakeDatastore) DeleteMulti(keys []*Key, cb DeleteMultiCB) error { |
101 if keys[0].Kind() == "FailAll" { | 103 if keys[0].Kind() == "FailAll" { |
102 return errors.New("DeleteMulti fail all") | 104 return errors.New("DeleteMulti fail all") |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 }) | 293 }) |
292 | 294 |
293 Convey("a pls with $id, $parent", func() { | 295 Convey("a pls with $id, $parent", func() { |
294 pls := GetPLS(&CommonStruct{ID: 1}) | 296 pls := GetPLS(&CommonStruct{ID: 1}) |
295 So(ds.KeyForObj(pls).String(), ShouldEqual, `s~a
id:ns:/CommonStruct,1`) | 297 So(ds.KeyForObj(pls).String(), ShouldEqual, `s~a
id:ns:/CommonStruct,1`) |
296 | 298 |
297 So(pls.SetMeta("parent", k), ShouldBeNil) | 299 So(pls.SetMeta("parent", k), ShouldBeNil) |
298 So(ds.KeyForObj(pls).String(), ShouldEqual, `s~a
id:ns:/Hello,"world"/CommonStruct,1`) | 300 So(ds.KeyForObj(pls).String(), ShouldEqual, `s~a
id:ns:/Hello,"world"/CommonStruct,1`) |
299 }) | 301 }) |
300 | 302 |
| 303 Convey("can see if things exist", func() { |
| 304 e, err := ds.Exists(k) |
| 305 So(err, ShouldBeNil) |
| 306 So(e, ShouldBeTrue) |
| 307 |
| 308 e, err = ds.Exists(ds.MakeKey("DNE", "nope")) |
| 309 So(err, ShouldBeNil) |
| 310 So(e, ShouldBeFalse) |
| 311 |
| 312 _, err = ds.Exists(ds.MakeKey("Fail", "boom")) |
| 313 So(err, ShouldErrLike, "GetMulti fail") |
| 314 }) |
| 315 |
301 }) | 316 }) |
302 | 317 |
303 Convey("bad", func() { | 318 Convey("bad", func() { |
304 Convey("a propmap without $kind", func() { | 319 Convey("a propmap without $kind", func() { |
305 pm := PropertyMap{} | 320 pm := PropertyMap{} |
306 So(pm.SetMeta("id", 100), ShouldBeNil) | 321 So(pm.SetMeta("id", 100), ShouldBeNil) |
307 So(func() { ds.KeyForObj(pm) }, ShouldPanic) | 322 So(func() { ds.KeyForObj(pm) }, ShouldPanic) |
308 }) | 323 }) |
309 }) | 324 }) |
310 }) | 325 }) |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
873 So(ds.Run(q, func(k *Key, _ CursorCB) bool { | 888 So(ds.Run(q, func(k *Key, _ CursorCB) bool { |
874 So(k.IntID(), ShouldEqual, i+1) | 889 So(k.IntID(), ShouldEqual, i+1) |
875 i++ | 890 i++ |
876 return true | 891 return true |
877 }), ShouldBeNil) | 892 }), ShouldBeNil) |
878 }) | 893 }) |
879 | 894 |
880 }) | 895 }) |
881 }) | 896 }) |
882 } | 897 } |
OLD | NEW |