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

Side by Side Diff: go/src/infra/gae/libs/gae/properties_test.go

Issue 1240573002: Reland: Refactor current GAE abstraction library to be free of the SDK* (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: expand coverage range to fit 32bit test expectations 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 unified diff | Download patch
« no previous file with comments | « go/src/infra/gae/libs/gae/properties.go ('k') | go/src/infra/gae/libs/gae/raw_datastore.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 package gae
6
7 import (
8 "math"
9 "testing"
10 "time"
11
12 . "github.com/smartystreets/goconvey/convey"
13 )
14
15 type myint int
16 type mybool bool
17 type mystring string
18 type myfloat float32
19
20 func TestProperties(t *testing.T) {
21 t.Parallel()
22
23 Convey("Test DSProperty", t, func() {
24 Convey("Construction", func() {
25 Convey("empty", func() {
26 pv := DSProperty{}
27 So(pv.Value(), ShouldBeNil)
28 So(pv.NoIndex(), ShouldBeFalse)
29 So(pv.Type().String(), ShouldEqual, "DSPTNull")
30 })
31 Convey("set", func() {
32 pv := DSProperty{}
33 pv.SetValue(100, true)
34 So(pv.Value(), ShouldHaveSameTypeAs, int64(100))
35 So(pv.Value(), ShouldEqual, 100)
36 So(pv.NoIndex(), ShouldBeTrue)
37 So(pv.Type().String(), ShouldEqual, "DSPTInt")
38
39 pv.SetValue(nil, false)
40 So(pv.Value(), ShouldBeNil)
41 So(pv.NoIndex(), ShouldBeFalse)
42 So(pv.Type().String(), ShouldEqual, "DSPTNull")
43 })
44 Convey("derived types", func() {
45 Convey("int", func() {
46 pv := DSProperty{}
47 pv.SetValue(myint(19), false)
48 So(pv.Value(), ShouldHaveSameTypeAs, int 64(19))
49 So(pv.Value(), ShouldEqual, 19)
50 So(pv.NoIndex(), ShouldBeFalse)
51 So(pv.Type().String(), ShouldEqual, "DSP TInt")
52 })
53 Convey("bool (true)", func() {
54 pv := DSProperty{}
55 pv.SetValue(mybool(true), false)
56 So(pv.Value(), ShouldBeTrue)
57 So(pv.NoIndex(), ShouldBeFalse)
58 So(pv.Type().String(), ShouldEqual, "DSP TBoolTrue")
59 })
60 Convey("string", func() {
61 pv := DSProperty{}
62 pv.SetValue(mystring("sup"), false)
63 So(pv.Value(), ShouldEqual, "sup")
64 So(pv.NoIndex(), ShouldBeFalse)
65 So(pv.Type().String(), ShouldEqual, "DSP TString")
66 })
67 Convey("BSKey is distinquished", func() {
68 pv := DSProperty{}
69 pv.SetValue(BSKey("sup"), false)
70 So(pv.Value(), ShouldEqual, BSKey("sup") )
71 So(pv.NoIndex(), ShouldBeFalse)
72 So(pv.Type().String(), ShouldEqual, "DSP TBlobKey")
73 })
74 Convey("float", func() {
75 pv := DSProperty{}
76 pv.SetValue(myfloat(19.7), false)
77 So(pv.Value(), ShouldHaveSameTypeAs, flo at64(19.7))
78 So(pv.Value(), ShouldEqual, float32(19.7 ))
79 So(pv.NoIndex(), ShouldBeFalse)
80 So(pv.Type().String(), ShouldEqual, "DSP TFloat")
81 })
82 })
83 Convey("bad type", func() {
84 pv := DSProperty{}
85 err := pv.SetValue(complex(100, 29), false)
86 So(err.Error(), ShouldContainSubstring, "has bad type complex")
87 So(pv.Value(), ShouldBeNil)
88 So(pv.NoIndex(), ShouldBeFalse)
89 So(pv.Type().String(), ShouldEqual, "DSPTNull")
90 })
91 Convey("invalid GeoPoint", func() {
92 pv := DSProperty{}
93 err := pv.SetValue(DSGeoPoint{-1000, 0}, false)
94 So(err.Error(), ShouldContainSubstring, "invalid GeoPoint value")
95 So(pv.Value(), ShouldBeNil)
96 So(pv.NoIndex(), ShouldBeFalse)
97 So(pv.Type().String(), ShouldEqual, "DSPTNull")
98 })
99 Convey("invalid time", func() {
100 pv := DSProperty{}
101 err := pv.SetValue(time.Now(), false)
102 So(err.Error(), ShouldContainSubstring, "time va lue has wrong Location")
103
104 err = pv.SetValue(time.Unix(math.MaxInt64, 0).UT C(), false)
105 So(err.Error(), ShouldContainSubstring, "time va lue out of range")
106 So(pv.Value(), ShouldBeNil)
107 So(pv.NoIndex(), ShouldBeFalse)
108 So(pv.Type().String(), ShouldEqual, "DSPTNull")
109 })
110 Convey("time gets rounded", func() {
111 pv := DSProperty{}
112 now := time.Now().In(time.UTC)
113 now = now.Round(time.Microsecond).Add(time.Nanos econd * 313)
114 pv.SetValue(now, false)
115 So(pv.Value(), ShouldHappenBefore, now)
116 So(pv.NoIndex(), ShouldBeFalse)
117 So(pv.Type().String(), ShouldEqual, "DSPTTime")
118 })
119 Convey("[]byte coerces NoIndex", func() {
120 pv := DSProperty{}
121 pv.SetValue([]byte("hello"), false)
122 So(pv.Value(), ShouldResemble, []byte("hello"))
123 So(pv.NoIndex(), ShouldBeTrue)
124 So(pv.Type().String(), ShouldEqual, "DSPTBytes")
125 })
126 Convey("ByteString allows !NoIndex", func() {
127 pv := DSProperty{}
128 pv.SetValue(DSByteString("hello"), false)
129 So(pv.Value(), ShouldResemble, DSByteString("hel lo"))
130 So(pv.NoIndex(), ShouldBeFalse)
131 So(pv.Type().String(), ShouldEqual, "DSPTBytes")
132 })
133 })
134 })
135 }
136
137 func TestDSPropertyMapImpl(t *testing.T) {
138 t.Parallel()
139
140 Convey("DSPropertyMap load/save err conditions", t, func() {
141 Convey("nil", func() {
142 pm := (*DSPropertyMap)(nil)
143 _, err := pm.Load(nil)
144 So(err.Error(), ShouldContainSubstring, "nil DSPropertyM ap")
145
146 _, err = pm.Save()
147 So(err.Error(), ShouldContainSubstring, "nil DSPropertyM ap")
148 })
149 Convey("empty", func() {
150 pm := DSPropertyMap{}
151 _, err := pm.Load(DSPropertyMap{"hello": {DSProperty{}}} )
152 So(err, ShouldBeNil)
153 So(pm, ShouldResemble, DSPropertyMap{"hello": {DSPropert y{}}})
154
155 // it can also self-initialize
156 pm = DSPropertyMap(nil)
157 _, err = pm.Load(DSPropertyMap{"hello": {DSProperty{}}})
158 So(err, ShouldBeNil)
159 So(pm, ShouldResemble, DSPropertyMap{"hello": {DSPropert y{}}})
160
161 npm, _ := pm.Save()
162 So(npm, ShouldResemble, pm)
163 })
164 })
165 }
OLDNEW
« no previous file with comments | « go/src/infra/gae/libs/gae/properties.go ('k') | go/src/infra/gae/libs/gae/raw_datastore.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698