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