@@ -21,13 +21,15 @@ class ActionTests: QuickSpec {
2121 var errors : TestableObserver < ActionError > !
2222 var enabled : TestableObserver < Bool > !
2323 var executing : TestableObserver < Bool > !
24+ var executionObservables : TestableObserver < Observable < String > > !
2425
2526 beforeEach {
2627 inputs = scheduler. createObserver ( String . self)
2728 elements = scheduler. createObserver ( String . self)
2829 errors = scheduler. createObserver ( ActionError . self)
2930 enabled = scheduler. createObserver ( Bool . self)
3031 executing = scheduler. createObserver ( Bool . self)
32+ executionObservables = scheduler. createObserver ( Observable< String> . self )
3133 }
3234
3335 func bindAction( action: Action < String , String > ) {
@@ -50,6 +52,18 @@ class ActionTests: QuickSpec {
5052 action. executing
5153 . bindTo ( executing)
5254 . addDisposableTo ( disposeBag)
55+
56+ action. executionObservables
57+ . bindTo ( executionObservables)
58+ . addDisposableTo ( disposeBag)
59+
60+ // Dummy subscription for multiple subcription tests
61+ action. inputs. subscribe ( ) . addDisposableTo ( disposeBag)
62+ action. elements. subscribe ( ) . addDisposableTo ( disposeBag)
63+ action. errors. subscribe ( ) . addDisposableTo ( disposeBag)
64+ action. enabled. subscribe ( ) . addDisposableTo ( disposeBag)
65+ action. executing. subscribe ( ) . addDisposableTo ( disposeBag)
66+ action. executionObservables. subscribe ( ) . addDisposableTo ( disposeBag)
5367 }
5468
5569 describe ( " single element action " ) {
@@ -91,6 +105,10 @@ class ActionTests: QuickSpec {
91105 next ( 20 , false ) ,
92106 ] )
93107 }
108+
109+ it ( " executes twice " ) {
110+ XCTAssertEqual ( executionObservables. events. count, 2 )
111+ }
94112 }
95113
96114 var action : Action < String , String > !
@@ -164,6 +182,10 @@ class ActionTests: QuickSpec {
164182 next ( 20 , false ) ,
165183 ] )
166184 }
185+
186+ it ( " executes twice " ) {
187+ XCTAssertEqual ( executionObservables. events. count, 2 )
188+ }
167189 }
168190
169191 var action : Action < String , String > !
@@ -242,6 +264,10 @@ class ActionTests: QuickSpec {
242264 next ( 20 , false ) ,
243265 ] )
244266 }
267+
268+ it ( " executes twice " ) {
269+ XCTAssertEqual ( executionObservables. events. count, 2 )
270+ }
245271 }
246272
247273 var action : Action < String , String > !
@@ -303,6 +329,10 @@ class ActionTests: QuickSpec {
303329 next ( 0 , false ) ,
304330 ] )
305331 }
332+
333+ it ( " never executes " ) {
334+ XCTAssertEqual ( executionObservables. events. count, 0 )
335+ }
306336 }
307337
308338 var action : Action < String , String > !
@@ -337,19 +367,31 @@ class ActionTests: QuickSpec {
337367 describe ( " execute function return value " ) {
338368 var action : Action < String , String > !
339369 var element : TestableObserver < String > !
370+ var executionObservables : TestableObserver < Observable < String > > !
371+
372+ beforeEach {
373+ element = scheduler. createObserver ( String . self)
374+ executionObservables = scheduler. createObserver ( Observable< String> . self )
375+ }
376+
377+ func bindAndExecute( action: Action < String , String > ) {
378+ action. executionObservables
379+ . bindTo ( executionObservables)
380+ . addDisposableTo ( disposeBag)
381+
382+ scheduler. scheduleAt ( 10 ) {
383+ action. execute ( " a " )
384+ . bindTo ( element)
385+ . addDisposableTo ( disposeBag)
386+ }
387+
388+ scheduler. start ( )
389+ }
340390
341391 context ( " single element action " ) {
342392 beforeEach {
343393 action = Action { Observable . just ( $0) }
344- element = scheduler. createObserver ( String . self)
345-
346- scheduler. scheduleAt ( 10 ) {
347- action. execute ( " a " )
348- . bindTo ( element)
349- . addDisposableTo ( disposeBag)
350- }
351-
352- scheduler. start ( )
394+ bindAndExecute ( action: action)
353395 }
354396
355397 it ( " element receives single value " ) {
@@ -358,20 +400,16 @@ class ActionTests: QuickSpec {
358400 completed ( 10 ) ,
359401 ] )
360402 }
403+
404+ it ( " executes once " ) {
405+ XCTAssertEqual ( executionObservables. events. count, 1 )
406+ }
361407 }
362408
363409 context ( " multiple element action " ) {
364410 beforeEach {
365411 action = Action { Observable . of ( $0, $0, $0) }
366- element = scheduler. createObserver ( String . self)
367-
368- scheduler. scheduleAt ( 10 ) {
369- action. execute ( " a " )
370- . bindTo ( element)
371- . addDisposableTo ( disposeBag)
372- }
373-
374- scheduler. start ( )
412+ bindAndExecute ( action: action)
375413 }
376414
377415 it ( " element receives mutiple values " ) {
@@ -382,48 +420,44 @@ class ActionTests: QuickSpec {
382420 completed ( 10 ) ,
383421 ] )
384422 }
423+
424+ it ( " executes once " ) {
425+ XCTAssertEqual ( executionObservables. events. count, 1 )
426+ }
385427 }
386428
387429 context ( " error action " ) {
388430 beforeEach {
389431 action = Action { _ in Observable . error ( TestError) }
390- element = scheduler. createObserver ( String . self)
391-
392- scheduler. scheduleAt ( 10 ) {
393- action. execute ( " a " )
394- . bindTo ( element)
395- . addDisposableTo ( disposeBag)
396- }
397-
398- scheduler. start ( )
432+ bindAndExecute ( action: action)
399433 }
400434
401435 it ( " element fails with underlyingError " ) {
402436 XCTAssertEqual ( element. events, [
403437 error ( 10 , ActionError . underlyingError ( TestError) )
404438 ] )
405439 }
440+
441+ it ( " executes once " ) {
442+ XCTAssertEqual ( executionObservables. events. count, 1 )
443+ }
406444 }
407445
408446 context ( " disabled " ) {
409447 beforeEach {
410448 action = Action ( enabledIf: Observable . just ( false ) ) { Observable . just ( $0) }
411- element = scheduler. createObserver ( String . self)
412-
413- scheduler. scheduleAt ( 10 ) {
414- action. execute ( " a " )
415- . bindTo ( element)
416- . addDisposableTo ( disposeBag)
417- }
418-
419- scheduler. start ( )
449+ bindAndExecute ( action: action)
420450 }
421451
422452 it ( " element fails with notEnabled " ) {
423453 XCTAssertEqual ( element. events, [
424454 error ( 10 , ActionError . notEnabled)
425455 ] )
426456 }
457+
458+ it ( " never executes " ) {
459+ XCTAssertEqual ( executionObservables. events. count, 0 )
460+ }
427461 }
428462 }
429463
0 commit comments