@@ -404,3 +404,99 @@ QUnit.test('update', function(assert) {
404404 . move ( 0 , moveDistance )
405405 . up ( ) ;
406406} ) ;
407+
408+ QUnit . module ( 'actions stay functional after callback errors' , moduleConfig ) ;
409+
410+ [
411+ {
412+ callbackName : 'onScroll' ,
413+ message : 'onScroll error does not break subsequent actions' ,
414+ configure : function ( callback ) {
415+ const $scrollable = $ ( '#scrollable' ) . dxScrollable ( {
416+ useNative : false ,
417+ inertiaEnabled : false ,
418+ bounceEnabled : false ,
419+ onScroll : callback ,
420+ } ) ;
421+
422+ return {
423+ trigger : function ( ) {
424+ pointerMock ( $scrollable . find ( '.' + SCROLLABLE_CONTENT_CLASS ) )
425+ . start ( )
426+ . down ( )
427+ . move ( 0 , - 10 )
428+ . up ( ) ;
429+ } ,
430+ } ;
431+ } ,
432+ } ,
433+ {
434+ callbackName : 'onUpdated' ,
435+ message : 'onUpdated error does not break subsequent actions' ,
436+ configure : function ( callback ) {
437+ const scrollable = $ ( '#scrollable' ) . dxScrollable ( {
438+ useNative : false ,
439+ onUpdated : callback ,
440+ } ) . dxScrollable ( 'instance' ) ;
441+
442+ return {
443+ trigger : function ( ) {
444+ scrollable . update ( ) ;
445+ } ,
446+ } ;
447+ } ,
448+ } ,
449+ {
450+ callbackName : 'onStart' ,
451+ message : 'onStart error does not break subsequent actions' ,
452+ configure : function ( callback ) {
453+ const scrollable = $ ( '#scrollable' ) . dxScrollable ( {
454+ useNative : false ,
455+ onStart : callback ,
456+ } ) . dxScrollable ( 'instance' ) ;
457+
458+ return {
459+ trigger : function ( ) {
460+ scrollable . scrollBy ( { top : 10 } ) ;
461+ } ,
462+ } ;
463+ } ,
464+ } ,
465+ {
466+ callbackName : 'onEnd' ,
467+ message : 'onEnd error does not break subsequent actions' ,
468+ configure : function ( callback ) {
469+ const scrollable = $ ( '#scrollable' ) . dxScrollable ( {
470+ useNative : false ,
471+ onEnd : callback ,
472+ } ) . dxScrollable ( 'instance' ) ;
473+
474+ return {
475+ trigger : function ( ) {
476+ scrollable . scrollBy ( { top : 10 } ) ;
477+ } ,
478+ } ;
479+ } ,
480+ } ,
481+ ] . forEach ( ( testCase ) => {
482+ QUnit . test ( testCase . message , function ( assert ) {
483+ let callbackCallCount = 0 ;
484+
485+ const { trigger } = testCase . configure ( function ( ) {
486+ callbackCallCount ++ ;
487+ throw new Error ( testCase . callbackName + ' error' ) ;
488+ } ) ;
489+
490+ callbackCallCount = 0 ;
491+
492+ trigger ( ) ;
493+ trigger ( ) ;
494+
495+ assert . strictEqual (
496+ callbackCallCount ,
497+ 2 ,
498+ `${ testCase . callbackName } : component remained functional and handled both actions after callback errors` ,
499+ ) ;
500+ } ) ;
501+ } ) ;
502+
0 commit comments