@@ -97,37 +97,69 @@ func TestCursor(t *testing.T) {
9797t .Run ("TestAll" , func (t * testing.T ) {
9898t .Run ("errors if argument is not pointer to slice" , func (t * testing.T ) {
9999cursor , 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 )
101101err = cursor .All (context .Background (), []bson.D {})
102- assert .NotNil (t , err , "expected error, got nil" )
102+ assert .Error (t , err , "expected error, got nil" )
103103})
104104
105105t .Run ("fills slice with all documents" , func (t * testing.T ) {
106106cursor , 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 )
108108
109109var docs []bson.D
110110err = 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 ))
113113
114114for index , doc := range docs {
115115expected := bson.D {{"foo" , int32 (index )}}
116116assert .Equal (t , expected , doc , "expected doc %v, got %v" , expected , doc )
117117}
118118})
119119
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+
120152t .Run ("decodes each document into slice type" , func (t * testing.T ) {
121153cursor , 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 )
123155
124156type Document struct {
125157Foo int32 `bson:"foo"`
126158}
127159var docs []Document
128160err = 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 ))
131163
132164for index , doc := range docs {
133165expected := Document {Foo : int32 (index )}
@@ -137,11 +169,11 @@ func TestCursor(t *testing.T) {
137169
138170t .Run ("multiple batches are included" , func (t * testing.T ) {
139171cursor , 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 )
141173var docs []bson.D
142174err = 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 ))
145177
146178for index , doc := range docs {
147179expected := bson.D {{"foo" , int32 (index )}}
@@ -154,31 +186,31 @@ func TestCursor(t *testing.T) {
154186
155187tbc := newTestBatchCursor (1 , 5 )
156188cursor , err := newCursor (tbc , nil , nil )
157- assert . Nil (t , err , "newCursor error: %v" , err )
189+ require . NoError (t , err , "newCursor error: %v" , err )
158190
159191err = cursor .All (context .Background (), & docs )
160- assert . Nil (t , err , "All error: %v" , err )
192+ require . NoError (t , err , "All error: %v" , err )
161193assert .True (t , tbc .closed , "expected batch cursor to be closed but was not" )
162194})
163195
164196t .Run ("does not error given interface as parameter" , func (t * testing.T ) {
165197var docs interface {} = []bson.D {}
166198
167199cursor , 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 )
169201
170202err = 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 )))
173205})
174206t .Run ("errors when not given pointer to slice" , func (t * testing.T ) {
175207var docs interface {} = "test"
176208
177209cursor , 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 )
179211
180212err = 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 )
182214})
183215t .Run ("with BSONOptions" , func (t * testing.T ) {
184216cursor , err := newCursor (
@@ -187,15 +219,15 @@ func TestCursor(t *testing.T) {
187219UseJSONStructTags : true ,
188220},
189221nil )
190- require .NoError (t , err , "newCursor error" )
222+ require .NoError (t , err , "newCursor error: %v" , err )
191223
192224type myDocument struct {
193225A int32 `json:"foo"`
194226}
195227var got []myDocument
196228
197229err = cursor .All (context .Background (), & got )
198- require .NoError (t , err , "All error" )
230+ require .NoError (t , err , "All error: %v" , err )
199231
200232want := []myDocument {{A : 0 }, {A : 1 }, {A : 2 }, {A : 3 }, {A : 4 }}
201233
@@ -213,18 +245,18 @@ func TestNewCursorFromDocuments(t *testing.T) {
213245bson.D {{"_id" , 2 }, {"quux" , "quuz" }},
214246}
215247cur , err := NewCursorFromDocuments (findResult , nil , nil )
216- assert . Nil (t , err , "NewCursorFromDocuments error: %v" , err )
248+ require . NoError (t , err , "NewCursorFromDocuments error: %v" , err )
217249
218250// Assert that decoded documents are as expected.
219251var i int
220252for cur .Next (context .Background ()) {
221253docBytes , err := bson .Marshal (findResult [i ])
222- assert . Nil (t , err , "Marshal error: %v" , err )
254+ require . NoError (t , err , "Marshal error: %v" , err )
223255expectedDecoded := bson .Raw (docBytes )
224256
225257var decoded bson.Raw
226258err = cur .Decode (& decoded )
227- assert . Nil (t , err , "Decode error: %v" , err )
259+ require . NoError (t , err , "Decode error: %v" , err )
228260assert .Equal (t , expectedDecoded , decoded ,
229261"expected decoded document %v of Cursor to be %v, got %v" ,
230262i , expectedDecoded , decoded )
@@ -233,26 +265,26 @@ func TestNewCursorFromDocuments(t *testing.T) {
233265assert .Equal (t , 3 , i , "expected 3 calls to cur.Next, got %v" , i )
234266
235267// 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 ())
237269
238270// Assert that a call to cur.Close will not fail.
239271err = cur .Close (context .Background ())
240- assert . Nil (t , err , "Close error: %v" , err )
272+ require . NoError (t , err , "Close error: %v" , err )
241273})
242274
243275// Mock an error in a Cursor.
244276t .Run ("mock Find with error" , func (t * testing.T ) {
245277mockErr := fmt .Errorf ("mock error" )
246278findResult := []interface {}{bson.D {{"_id" , 0 }, {"foo" , "bar" }}}
247279cur , err := NewCursorFromDocuments (findResult , mockErr , nil )
248- assert . Nil (t , err , "NewCursorFromDocuments error: %v" , err )
280+ require . NoError (t , err , "NewCursorFromDocuments error: %v" , err )
249281
250282// Assert that a call to Next will return false because of existing error.
251283next := cur .Next (context .Background ())
252284assert .False (t , next , "expected call to Next to return false, got true" )
253285
254286// 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" )
256288assert .Equal (t , mockErr , cur .Err (), "expected Cursor error %v, got %v" ,
257289mockErr , cur .Err ())
258290})
0 commit comments