@@ -1102,6 +1102,58 @@ describe('jqLite', function() {
1102
1102
browserTrigger ( a , 'click' ) ;
1103
1103
} ) ;
1104
1104
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
+
1105
1157
describe ( 'mouseenter-mouseleave' , function ( ) {
1106
1158
var root , parent , sibling , child , log ;
1107
1159
@@ -1784,7 +1836,6 @@ describe('jqLite', function() {
1784
1836
expect ( event . isDefaultPrevented ( ) ) . toBe ( true ) ;
1785
1837
} ) ;
1786
1838
1787
-
1788
1839
it ( 'should support handlers that deregister themselves' , function ( ) {
1789
1840
var element = jqLite ( '<a>poke</a>' ) ,
1790
1841
clickSpy = jasmine . createSpy ( 'click' ) ,
@@ -1821,6 +1872,37 @@ describe('jqLite', function() {
1821
1872
expect ( actualEvent . target ) . toEqual ( element [ 0 ] ) ;
1822
1873
expect ( actualEvent . type ) . toEqual ( 'click' ) ;
1823
1874
} ) ;
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
+ } ) ;
1824
1906
} ) ;
1825
1907
1826
1908
0 commit comments