@@ -97,37 +97,69 @@ func TestCursor(t *testing.T) {
97
97
t .Run ("TestAll" , func (t * testing.T ) {
98
98
t .Run ("errors if argument is not pointer to slice" , func (t * testing.T ) {
99
99
cursor , err := newCursor (newTestBatchCursor (1 , 5 ), nil , nil )
100
- assert . Nil (t , err , "newCursor error: %v" , err )
100
+ require . NoError (t , err , "newCursor error: %v" , err )
101
101
err = cursor .All (context .Background (), []bson.D {})
102
- assert .NotNil (t , err , "expected error, got nil" )
102
+ assert .Error (t , err , "expected error, got nil" )
103
103
})
104
104
105
105
t .Run ("fills slice with all documents" , func (t * testing.T ) {
106
106
cursor , err := newCursor (newTestBatchCursor (1 , 5 ), nil , nil )
107
- assert . Nil (t , err , "newCursor error: %v" , err )
107
+ require . NoError (t , err , "newCursor error: %v" , err )
108
108
109
109
var docs []bson.D
110
110
err = cursor .All (context .Background (), & docs )
111
- assert . Nil (t , err , "All error: %v" , err )
112
- assert .Equal (t , 5 , len ( docs ) , "expected 5 docs, got %v" , len (docs ))
111
+ require . NoError (t , err , "All error: %v" , err )
112
+ assert .Len (t , docs , 5 , "expected 5 docs, got %v" , len (docs ))
113
113
114
114
for index , doc := range docs {
115
115
expected := bson.D {{"foo" , int32 (index )}}
116
116
assert .Equal (t , expected , doc , "expected doc %v, got %v" , expected , doc )
117
117
}
118
118
})
119
119
120
+ t .Run ("nil slice" , func (t * testing.T ) {
121
+ cursor , err := newCursor (newTestBatchCursor (0 , 0 ), nil , nil )
122
+ require .NoError (t , err , "newCursor error: %v" , err )
123
+
124
+ var docs []bson.D
125
+ err = cursor .All (context .Background (), & docs )
126
+ require .NoError (t , err , "All error: %v" , err )
127
+ assert .Nil (t , docs , "expected nil docs" )
128
+ })
129
+
130
+ t .Run ("empty slice" , func (t * testing.T ) {
131
+ cursor , err := newCursor (newTestBatchCursor (0 , 0 ), nil , nil )
132
+ require .NoError (t , err , "newCursor error: %v" , err )
133
+
134
+ docs := []bson.D {}
135
+ err = cursor .All (context .Background (), & docs )
136
+ require .NoError (t , err , "All error: %v" , err )
137
+ assert .NotNil (t , docs , "expected non-nil docs" )
138
+ assert .Len (t , docs , 0 , "expected 0 docs, got %v" , len (docs ))
139
+ })
140
+
141
+ t .Run ("empty slice overwritten" , func (t * testing.T ) {
142
+ cursor , err := newCursor (newTestBatchCursor (0 , 0 ), nil , nil )
143
+ require .NoError (t , err , "newCursor error: %v" , err )
144
+
145
+ docs := []bson.D {{{"foo" , "bar" }}, {{"hello" , "world" }, {"pi" , 3.14159 }}}
146
+ err = cursor .All (context .Background (), & docs )
147
+ require .NoError (t , err , "All error: %v" , err )
148
+ assert .NotNil (t , docs , "expected non-nil docs" )
149
+ assert .Len (t , docs , 0 , "expected 0 docs, got %v" , len (docs ))
150
+ })
151
+
120
152
t .Run ("decodes each document into slice type" , func (t * testing.T ) {
121
153
cursor , err := newCursor (newTestBatchCursor (1 , 5 ), nil , nil )
122
- assert . Nil (t , err , "newCursor error: %v" , err )
154
+ require . NoError (t , err , "newCursor error: %v" , err )
123
155
124
156
type Document struct {
125
157
Foo int32 `bson:"foo"`
126
158
}
127
159
var docs []Document
128
160
err = cursor .All (context .Background (), & docs )
129
- assert . Nil (t , err , "All error: %v" , err )
130
- assert .Equal (t , 5 , len ( docs ) , "expected 5 documents, got %v" , len (docs ))
161
+ require . NoError (t , err , "All error: %v" , err )
162
+ assert .Len (t , docs , 5 , "expected 5 documents, got %v" , len (docs ))
131
163
132
164
for index , doc := range docs {
133
165
expected := Document {Foo : int32 (index )}
@@ -137,11 +169,11 @@ func TestCursor(t *testing.T) {
137
169
138
170
t .Run ("multiple batches are included" , func (t * testing.T ) {
139
171
cursor , err := newCursor (newTestBatchCursor (2 , 5 ), nil , nil )
140
- assert . Nil (t , err , "newCursor error: %v" , err )
172
+ require . NoError (t , err , "newCursor error: %v" , err )
141
173
var docs []bson.D
142
174
err = cursor .All (context .Background (), & docs )
143
- assert . Nil (t , err , "All error: %v" , err )
144
- assert .Equal (t , 10 , len ( docs ) , "expected 10 docs, got %v" , len (docs ))
175
+ require . NoError (t , err , "All error: %v" , err )
176
+ assert .Len (t , docs , 10 , "expected 10 docs, got %v" , len (docs ))
145
177
146
178
for index , doc := range docs {
147
179
expected := bson.D {{"foo" , int32 (index )}}
@@ -154,31 +186,31 @@ func TestCursor(t *testing.T) {
154
186
155
187
tbc := newTestBatchCursor (1 , 5 )
156
188
cursor , err := newCursor (tbc , nil , nil )
157
- assert . Nil (t , err , "newCursor error: %v" , err )
189
+ require . NoError (t , err , "newCursor error: %v" , err )
158
190
159
191
err = cursor .All (context .Background (), & docs )
160
- assert . Nil (t , err , "All error: %v" , err )
192
+ require . NoError (t , err , "All error: %v" , err )
161
193
assert .True (t , tbc .closed , "expected batch cursor to be closed but was not" )
162
194
})
163
195
164
196
t .Run ("does not error given interface as parameter" , func (t * testing.T ) {
165
197
var docs interface {} = []bson.D {}
166
198
167
199
cursor , err := newCursor (newTestBatchCursor (1 , 5 ), nil , nil )
168
- assert . Nil (t , err , "newCursor error: %v" , err )
200
+ require . NoError (t , err , "newCursor error: %v" , err )
169
201
170
202
err = cursor .All (context .Background (), & docs )
171
- assert . Nil (t , err , "expected Nil, got error: %v" , err )
172
- assert .Equal (t , 5 , len ( docs .([]bson.D )) , "expected 5 documents, got %v" , len (docs .([]bson.D )))
203
+ require . NoError (t , err , "All error: %v" , err )
204
+ assert .Len (t , docs .([]bson.D ), 5 , "expected 5 documents, got %v" , len (docs .([]bson.D )))
173
205
})
174
206
t .Run ("errors when not given pointer to slice" , func (t * testing.T ) {
175
207
var docs interface {} = "test"
176
208
177
209
cursor , err := newCursor (newTestBatchCursor (1 , 5 ), nil , nil )
178
- assert . Nil (t , err , "newCursor error: %v" , err )
210
+ require . NoError (t , err , "newCursor error: %v" , err )
179
211
180
212
err = cursor .All (context .Background (), & docs )
181
- assert .NotNil (t , err , "expected error, got: %v" , err )
213
+ assert .Error (t , err , "expected error, got: %v" , err )
182
214
})
183
215
t .Run ("with BSONOptions" , func (t * testing.T ) {
184
216
cursor , err := newCursor (
@@ -187,15 +219,15 @@ func TestCursor(t *testing.T) {
187
219
UseJSONStructTags : true ,
188
220
},
189
221
nil )
190
- require .NoError (t , err , "newCursor error" )
222
+ require .NoError (t , err , "newCursor error: %v" , err )
191
223
192
224
type myDocument struct {
193
225
A int32 `json:"foo"`
194
226
}
195
227
var got []myDocument
196
228
197
229
err = cursor .All (context .Background (), & got )
198
- require .NoError (t , err , "All error" )
230
+ require .NoError (t , err , "All error: %v" , err )
199
231
200
232
want := []myDocument {{A : 0 }, {A : 1 }, {A : 2 }, {A : 3 }, {A : 4 }}
201
233
@@ -213,18 +245,18 @@ func TestNewCursorFromDocuments(t *testing.T) {
213
245
bson.D {{"_id" , 2 }, {"quux" , "quuz" }},
214
246
}
215
247
cur , err := NewCursorFromDocuments (findResult , nil , nil )
216
- assert . Nil (t , err , "NewCursorFromDocuments error: %v" , err )
248
+ require . NoError (t , err , "NewCursorFromDocuments error: %v" , err )
217
249
218
250
// Assert that decoded documents are as expected.
219
251
var i int
220
252
for cur .Next (context .Background ()) {
221
253
docBytes , err := bson .Marshal (findResult [i ])
222
- assert . Nil (t , err , "Marshal error: %v" , err )
254
+ require . NoError (t , err , "Marshal error: %v" , err )
223
255
expectedDecoded := bson .Raw (docBytes )
224
256
225
257
var decoded bson.Raw
226
258
err = cur .Decode (& decoded )
227
- assert . Nil (t , err , "Decode error: %v" , err )
259
+ require . NoError (t , err , "Decode error: %v" , err )
228
260
assert .Equal (t , expectedDecoded , decoded ,
229
261
"expected decoded document %v of Cursor to be %v, got %v" ,
230
262
i , expectedDecoded , decoded )
@@ -233,26 +265,26 @@ func TestNewCursorFromDocuments(t *testing.T) {
233
265
assert .Equal (t , 3 , i , "expected 3 calls to cur.Next, got %v" , i )
234
266
235
267
// Check for error on Cursor.
236
- assert . Nil (t , cur .Err (), "Cursor error: %v" , cur .Err ())
268
+ require . NoError (t , cur .Err (), "Cursor error: %v" , cur .Err ())
237
269
238
270
// Assert that a call to cur.Close will not fail.
239
271
err = cur .Close (context .Background ())
240
- assert . Nil (t , err , "Close error: %v" , err )
272
+ require . NoError (t , err , "Close error: %v" , err )
241
273
})
242
274
243
275
// Mock an error in a Cursor.
244
276
t .Run ("mock Find with error" , func (t * testing.T ) {
245
277
mockErr := fmt .Errorf ("mock error" )
246
278
findResult := []interface {}{bson.D {{"_id" , 0 }, {"foo" , "bar" }}}
247
279
cur , err := NewCursorFromDocuments (findResult , mockErr , nil )
248
- assert . Nil (t , err , "NewCursorFromDocuments error: %v" , err )
280
+ require . NoError (t , err , "NewCursorFromDocuments error: %v" , err )
249
281
250
282
// Assert that a call to Next will return false because of existing error.
251
283
next := cur .Next (context .Background ())
252
284
assert .False (t , next , "expected call to Next to return false, got true" )
253
285
254
286
// Check for error on Cursor.
255
- assert .NotNil (t , cur .Err (), "expected Cursor error, got nil" )
287
+ assert .Error (t , cur .Err (), "expected Cursor error, got nil" )
256
288
assert .Equal (t , mockErr , cur .Err (), "expected Cursor error %v, got %v" ,
257
289
mockErr , cur .Err ())
258
290
})
0 commit comments