4747 supportsPassive = true ;
4848 }
4949 } ) ;
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 ) ;
5252} catch ( e ) {
5353}
5454
@@ -75,6 +75,14 @@ function ieOrEdge() {
7575
7676( ieOrEdge as any ) . message = 'IE/Edge Test' ;
7777
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+
7886describe ( 'Zone' , function ( ) {
7987 const rootZone = Zone . current ;
8088 ( Zone as any ) [ zoneSymbol ( 'ignoreConsoleErrorUncaughtError' ) ] = true ;
@@ -996,6 +1004,46 @@ describe('Zone', function() {
9961004 expect ( logs ) . toEqual ( [ 'click' ] ) ;
9971005 } ) ) ;
9981006
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+
9991047 it ( 'should support addEventListener with AddEventListenerOptions passive setting' ,
10001048 ifEnvSupports ( supportEventListenerOptions , function ( ) {
10011049 const hookSpy = jasmine . createSpy ( 'hook' ) ;
0 commit comments