@@ -1102,6 +1102,58 @@ describe('jqLite', function() {
11021102 browserTrigger ( a , 'click' ) ;
11031103 } ) ;
11041104
1105+ it ( 'should stop triggering handlers when stopImmediatePropagation is called' , function ( ) {
1106+ var element = jqLite ( a ) ,
1107+ clickSpy1 = jasmine . createSpy ( 'clickSpy1' ) ,
1108+ clickSpy2 = jasmine . createSpy ( 'clickSpy2' ) . andCallFake ( function ( event ) { event . stopImmediatePropagation ( ) ; } ) ,
1109+ clickSpy3 = jasmine . createSpy ( 'clickSpy3' ) ,
1110+ clickSpy4 = jasmine . createSpy ( 'clickSpy4' ) ;
1111+
1112+ element . on ( 'click' , clickSpy1 ) ;
1113+ element . on ( 'click' , clickSpy2 ) ;
1114+ element . on ( 'click' , clickSpy3 ) ;
1115+ element [ 0 ] . addEventListener ( 'click' , clickSpy4 ) ;
1116+
1117+ browserTrigger ( element , 'click' ) ;
1118+
1119+ expect ( clickSpy1 ) . toHaveBeenCalled ( ) ;
1120+ expect ( clickSpy2 ) . toHaveBeenCalled ( ) ;
1121+ expect ( clickSpy3 ) . not . toHaveBeenCalled ( ) ;
1122+ expect ( clickSpy4 ) . not . toHaveBeenCalled ( ) ;
1123+ } ) ;
1124+
1125+ it ( 'should execute stopPropagation when stopImmediatePropagation is called' , function ( ) {
1126+ var element = jqLite ( a ) ,
1127+ clickSpy = jasmine . createSpy ( 'clickSpy' ) ;
1128+
1129+ clickSpy . andCallFake ( function ( event ) {
1130+ spyOn ( event , 'stopPropagation' ) ;
1131+ event . stopImmediatePropagation ( ) ;
1132+ expect ( event . stopPropagation ) . toHaveBeenCalled ( ) ;
1133+ } ) ;
1134+
1135+ element . on ( 'click' , clickSpy ) ;
1136+
1137+ browserTrigger ( element , 'click' ) ;
1138+ expect ( clickSpy ) . toHaveBeenCalled ( ) ;
1139+ } ) ;
1140+
1141+ it ( 'should have event.isImmediatePropagationStopped method' , function ( ) {
1142+ var element = jqLite ( a ) ,
1143+ clickSpy = jasmine . createSpy ( 'clickSpy' ) ;
1144+
1145+ clickSpy . andCallFake ( function ( event ) {
1146+ expect ( event . isImmediatePropagationStopped ( ) ) . toBe ( false ) ;
1147+ event . stopImmediatePropagation ( ) ;
1148+ expect ( event . isImmediatePropagationStopped ( ) ) . toBe ( true ) ;
1149+ } ) ;
1150+
1151+ element . on ( 'click' , clickSpy ) ;
1152+
1153+ browserTrigger ( element , 'click' ) ;
1154+ expect ( clickSpy ) . toHaveBeenCalled ( ) ;
1155+ } ) ;
1156+
11051157 describe ( 'mouseenter-mouseleave' , function ( ) {
11061158 var root , parent , sibling , child , log ;
11071159
@@ -1784,7 +1836,6 @@ describe('jqLite', function() {
17841836 expect ( event . isDefaultPrevented ( ) ) . toBe ( true ) ;
17851837 } ) ;
17861838
1787-
17881839 it ( 'should support handlers that deregister themselves' , function ( ) {
17891840 var element = jqLite ( '<a>poke</a>' ) ,
17901841 clickSpy = jasmine . createSpy ( 'click' ) ,
@@ -1821,6 +1872,37 @@ describe('jqLite', function() {
18211872 expect ( actualEvent . target ) . toEqual ( element [ 0 ] ) ;
18221873 expect ( actualEvent . type ) . toEqual ( 'click' ) ;
18231874 } ) ;
1875+
1876+ it ( 'should stop triggering handlers when stopImmediatePropagation is called' , function ( ) {
1877+ var element = jqLite ( a ) ,
1878+ clickSpy1 = jasmine . createSpy ( 'clickSpy1' ) ,
1879+ clickSpy2 = jasmine . createSpy ( 'clickSpy2' ) . andCallFake ( function ( event ) { event . stopImmediatePropagation ( ) ; } ) ,
1880+ clickSpy3 = jasmine . createSpy ( 'clickSpy3' ) ;
1881+
1882+ element . on ( 'click' , clickSpy1 ) ;
1883+ element . on ( 'click' , clickSpy2 ) ;
1884+ element . on ( 'click' , clickSpy3 ) ;
1885+
1886+ element . triggerHandler ( 'click' ) ;
1887+
1888+ expect ( clickSpy1 ) . toHaveBeenCalled ( ) ;
1889+ expect ( clickSpy2 ) . toHaveBeenCalled ( ) ;
1890+ expect ( clickSpy3 ) . not . toHaveBeenCalled ( ) ;
1891+ } ) ;
1892+
1893+ it ( 'should have event.isImmediatePropagationStopped method' , function ( ) {
1894+ var element = jqLite ( a ) ,
1895+ clickSpy = jasmine . createSpy ( 'clickSpy' ) ,
1896+ event ;
1897+
1898+ element . on ( 'click' , clickSpy ) ;
1899+ element . triggerHandler ( 'click' ) ;
1900+ event = clickSpy . mostRecentCall . args [ 0 ] ;
1901+
1902+ expect ( event . isImmediatePropagationStopped ( ) ) . toBe ( false ) ;
1903+ event . stopImmediatePropagation ( ) ;
1904+ expect ( event . isImmediatePropagationStopped ( ) ) . toBe ( true ) ;
1905+ } ) ;
18241906 } ) ;
18251907
18261908
0 commit comments