47
47
supportsPassive = true ;
48
48
}
49
49
} ) ;
50
- window . addEventListener ( 'test' , null as any , opts ) ;
51
- window . removeEventListener ( 'test' , null as any , opts ) ;
50
+ window . addEventListener ( 'test' , opts as any , opts ) ;
51
+ window . removeEventListener ( 'test' , opts as any , opts ) ;
52
52
} catch ( e ) {
53
53
}
54
54
@@ -75,6 +75,14 @@ function ieOrEdge() {
75
75
76
76
( ieOrEdge as any ) . message = 'IE/Edge Test' ;
77
77
78
+ class TestEventListener {
79
+ logs : string [ ] = [ ] ;
80
+ addEventListener ( eventName : string , listener : any , options : any ) {
81
+ this . logs . push ( options ) ;
82
+ }
83
+ removeEventListener ( eventName : string , listener : any , options : any ) { }
84
+ }
85
+
78
86
describe ( 'Zone' , function ( ) {
79
87
const rootZone = Zone . current ;
80
88
( Zone as any ) [ zoneSymbol ( 'ignoreConsoleErrorUncaughtError' ) ] = true ;
@@ -996,6 +1004,46 @@ describe('Zone', function() {
996
1004
expect ( logs ) . toEqual ( [ 'click' ] ) ;
997
1005
} ) ) ;
998
1006
1007
+ it ( 'should change options to boolean if not support passive' , ( ) => {
1008
+ patchEventTarget ( window , [ TestEventListener . prototype ] ) ;
1009
+ const testEventListener = new TestEventListener ( ) ;
1010
+
1011
+ const listener = function ( ) { } ;
1012
+ testEventListener . addEventListener ( 'test' , listener , { passive : true } ) ;
1013
+ testEventListener . addEventListener ( 'test1' , listener , { once : true } ) ;
1014
+ testEventListener . addEventListener ( 'test2' , listener , { capture : true } ) ;
1015
+ testEventListener . addEventListener ( 'test3' , listener , { passive : false } ) ;
1016
+ testEventListener . addEventListener ( 'test4' , listener , { once : false } ) ;
1017
+ testEventListener . addEventListener ( 'test5' , listener , { capture : false } ) ;
1018
+ if ( ! supportsPassive ) {
1019
+ expect ( testEventListener . logs ) . toEqual ( [ false , false , true , false , false , false ] ) ;
1020
+ } else {
1021
+ expect ( testEventListener . logs ) . toEqual ( [
1022
+ { passive : true } , { once : true } , { capture : true } , { passive : false } , { once : false } ,
1023
+ { capture : false }
1024
+ ] ) ;
1025
+ }
1026
+ } ) ;
1027
+
1028
+ it ( 'should change options to boolean if not support passive on HTMLElement' , ( ) => {
1029
+ const logs : string [ ] = [ ] ;
1030
+ const listener = ( e : Event ) => {
1031
+ logs . push ( 'clicked' ) ;
1032
+ } ;
1033
+
1034
+ ( button as any ) . addEventListener ( 'click' , listener , { once : true } ) ;
1035
+ button . dispatchEvent ( clickEvent ) ;
1036
+ expect ( logs ) . toEqual ( [ 'clicked' ] ) ;
1037
+ button . dispatchEvent ( clickEvent ) ;
1038
+ if ( supportsPassive ) {
1039
+ expect ( logs ) . toEqual ( [ 'clicked' ] ) ;
1040
+ } else {
1041
+ expect ( logs ) . toEqual ( [ 'clicked' , 'clicked' ] ) ;
1042
+ }
1043
+
1044
+ button . removeEventListener ( 'click' , listener ) ;
1045
+ } ) ;
1046
+
999
1047
it ( 'should support addEventListener with AddEventListenerOptions passive setting' ,
1000
1048
ifEnvSupports ( supportEventListenerOptions , function ( ) {
1001
1049
const hookSpy = jasmine . createSpy ( 'hook' ) ;
0 commit comments