@@ -226,6 +226,138 @@ func TestSelect(t *testing.T) {
226
226
})
227
227
}
228
228
229
+ type bar struct {
230
+ str string
231
+ foos []foo
232
+ }
233
+ type fooBar struct {
234
+ fooStr string
235
+ barStr string
236
+ }
237
+
238
+ var (
239
+ fooArr = []foo {foo {"A" , 0 }, foo {"B" , 1 }, foo {"C" , - 1 }}
240
+ barArr = []bar {bar {"a" , []foo {foo {"A" , 0 }, foo {"B" , 1 }}}, bar {"b" , []foo {foo {"C" , - 1 }}}}
241
+ fooEmpty = []bar {bar {"c" , nil }}
242
+ fooBarArr = []fooBar {fooBar {"A" , "a" }, fooBar {"B" , "a" }, fooBar {"C" , "b" }}
243
+ )
244
+
245
+ func TestSelectMany (t * testing.T ) {
246
+ children := func (i T , x int ) (T , error ) {
247
+ return i .(bar ).foos , nil
248
+ }
249
+ erroneusFunc := func (i T , x int ) (T , error ) {
250
+ return nil , errFoo
251
+ }
252
+
253
+ c .Convey ("Previous error is reflected on result" , t , func () {
254
+ _ , err := From (barArr ).Where (erroneusBinaryFunc ).SelectMany (children ).Results ()
255
+ c .So (err , c .ShouldNotEqual , nil )
256
+ })
257
+
258
+ c .Convey ("Nil func returns error" , t , func () {
259
+ _ , err := From (barArr ).SelectMany (nil ).Results ()
260
+ c .So (err , c .ShouldEqual , ErrNilFunc )
261
+ })
262
+
263
+ c .Convey ("Error returned from provided func" , t , func () {
264
+ val , err := From (barArr ).SelectMany (erroneusFunc ).Results ()
265
+ c .So (err , c .ShouldNotEqual , nil )
266
+
267
+ c .Convey ("Erroneus function is in chain with as-is select" , func () {
268
+ _ , err = From (barArr ).SelectMany (children ).SelectMany (erroneusFunc ).Results ()
269
+ c .So (err , c .ShouldNotEqual , nil )
270
+ })
271
+ c .Convey ("Erroneus function is in chain but not called" , func () {
272
+ val , err = From (barArr ).Where (alwaysFalse ).SelectMany (erroneusFunc ).Results ()
273
+ c .So (err , c .ShouldEqual , nil )
274
+ c .So (len (val ), c .ShouldEqual , 0 )
275
+ })
276
+
277
+ })
278
+
279
+ c .Convey ("Select empty as is" , t , func () {
280
+ val , err := From (fooEmpty ).SelectMany (children ).Results ()
281
+ c .So (err , c .ShouldEqual , nil )
282
+ c .So (val , shouldSlicesResemble , empty )
283
+ })
284
+
285
+ c .Convey ("Select all elements as is" , t , func () {
286
+ val , err := From (barArr ).SelectMany (children ).Results ()
287
+ c .So (err , c .ShouldEqual , nil )
288
+ c .So (val , shouldSlicesResemble , fooArr )
289
+ })
290
+ }
291
+
292
+ func TestSelectManyBy (t * testing.T ) {
293
+ children := func (b T , x int ) (T , error ) {
294
+ return b .(bar ).foos , nil
295
+ }
296
+ barStr := func (b T , f T ) (T , error ) {
297
+ return fooBar {f .(foo ).str , b .(bar ).str }, nil
298
+ }
299
+ erroneusFunc := func (b T , x int ) (T , error ) {
300
+ return nil , errFoo
301
+ }
302
+ erroneusSelectFunc := func (b T , f T ) (T , error ) {
303
+ return nil , errFoo
304
+ }
305
+
306
+ c .Convey ("Previous error is reflected on result" , t , func () {
307
+ _ , err := From (barArr ).Where (erroneusBinaryFunc ).SelectManyBy (children , barStr ).Results ()
308
+ c .So (err , c .ShouldNotEqual , nil )
309
+ })
310
+
311
+ c .Convey ("Nil transform func returns error" , t , func () {
312
+ _ , err := From (barArr ).SelectManyBy (nil , barStr ).Results ()
313
+ c .So (err , c .ShouldEqual , ErrNilFunc )
314
+ })
315
+
316
+ c .Convey ("Nil resultSelect func returns error" , t , func () {
317
+ _ , err := From (barArr ).SelectManyBy (children , nil ).Results ()
318
+ c .So (err , c .ShouldEqual , ErrNilFunc )
319
+ })
320
+
321
+ c .Convey ("Both nil func returns error" , t , func () {
322
+ _ , err := From (barArr ).SelectManyBy (nil , nil ).Results ()
323
+ c .So (err , c .ShouldEqual , ErrNilFunc )
324
+ })
325
+
326
+ c .Convey ("Error returned from provided func" , t , func () {
327
+ val , err := From (barArr ).SelectManyBy (erroneusFunc , barStr ).Results ()
328
+ c .So (err , c .ShouldNotEqual , nil )
329
+
330
+ val , err = From (barArr ).SelectManyBy (children , erroneusSelectFunc ).Results ()
331
+ c .So (err , c .ShouldNotEqual , nil )
332
+
333
+ val , err = From (barArr ).SelectManyBy (erroneusFunc , erroneusSelectFunc ).Results ()
334
+ c .So (err , c .ShouldNotEqual , nil )
335
+
336
+ c .Convey ("Erroneus function is in chain with as-is select" , func () {
337
+ _ , err = From (barArr ).SelectManyBy (children , barStr ).SelectManyBy (erroneusFunc , erroneusSelectFunc ).Results ()
338
+ c .So (err , c .ShouldNotEqual , nil )
339
+ })
340
+ c .Convey ("Erroneus function is in chain but not called" , func () {
341
+ val , err = From (barArr ).Where (alwaysFalse ).SelectManyBy (erroneusFunc , erroneusSelectFunc ).Results ()
342
+ c .So (err , c .ShouldEqual , nil )
343
+ c .So (len (val ), c .ShouldEqual , 0 )
344
+ })
345
+
346
+ })
347
+
348
+ c .Convey ("Select empty as is" , t , func () {
349
+ val , err := From (fooEmpty ).SelectManyBy (children , barStr ).Results ()
350
+ c .So (err , c .ShouldEqual , nil )
351
+ c .So (val , shouldSlicesResemble , empty )
352
+ })
353
+
354
+ c .Convey ("Select all elements as is" , t , func () {
355
+ val , err := From (barArr ).SelectManyBy (children , barStr ).Results ()
356
+ c .So (err , c .ShouldEqual , nil )
357
+ c .So (val , shouldSlicesResemble , fooBarArr )
358
+ })
359
+ }
360
+
229
361
func TestDistinct (t * testing.T ) {
230
362
c .Convey ("Empty slice" , t , func () {
231
363
res , err := From (empty ).Distinct ().Results ()
0 commit comments