4747 supportsPassive = true ;
4848 }
4949 } ) ;
50- window . addEventListener ( 'test' , null , opts ) ;
51- window . removeEventListener ( 'test' , null , opts ) ;
50+ window . addEventListener ( 'test' , opts , opts ) ;
51+ window . removeEventListener ( 'test' , opts , 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 ;
@@ -984,6 +992,50 @@ describe('Zone', function() {
984992 expect ( logs ) . toEqual ( [ 'click' ] ) ;
985993 } ) ) ;
986994
995+ it ( 'should change options to boolean if not support passive' , ( ) => {
996+ patchEventTarget ( window , [ TestEventListener . prototype ] ) ;
997+ const testEventListener = new TestEventListener ( ) ;
998+
999+ const listener = function ( ) { } ;
1000+ testEventListener . addEventListener ( 'test' , listener , { passive : true } ) ;
1001+ testEventListener . addEventListener ( 'test1' , listener , { once : true } ) ;
1002+ testEventListener . addEventListener ( 'test2' , listener , { capture : true } ) ;
1003+ testEventListener . addEventListener ( 'test3' , listener , { passive : false } ) ;
1004+ testEventListener . addEventListener ( 'test4' , listener , { once : false } ) ;
1005+ testEventListener . addEventListener ( 'test5' , listener , { capture : false } ) ;
1006+ console . log ( 'testEventListener' , testEventListener . logs ) ;
1007+ if ( ! supportsPassive ) {
1008+ expect ( testEventListener . logs ) . toEqual ( [
1009+ 'false' , 'false' , 'false' , 'false' , 'false' , 'false'
1010+ ] ) ;
1011+ } else {
1012+ expect ( testEventListener . logs ) . toEqual ( [
1013+ { passive : true } , { once : true } , { capture : true } , { passive : false } , { once : false } ,
1014+ { capture : false }
1015+ ] ) ;
1016+ }
1017+ } ) ;
1018+
1019+ it ( 'should change options to boolean if not support passive on HTMLElement' , ( ) => {
1020+ const logs : string [ ] = [ ] ;
1021+ const listener = ( e : Event ) => {
1022+ logs . push ( 'clicked' ) ;
1023+ } ;
1024+
1025+ ( button as any ) . addEventListener ( 'click' , listener , { once : true } ) ;
1026+
1027+ button . dispatchEvent ( clickEvent ) ;
1028+ expect ( logs ) . toEqual ( [ 'clicked' ] ) ;
1029+ button . dispatchEvent ( clickEvent ) ;
1030+ if ( supportsPassive ) {
1031+ expect ( logs ) . toEqual ( [ 'clicked' ] ) ;
1032+ } else {
1033+ expect ( logs ) . toEqual ( [ 'clicked' , 'clicked' ] ) ;
1034+ }
1035+
1036+ button . removeEventListener ( 'click' , listener ) ;
1037+ } ) ;
1038+
9871039 it ( 'should support addEventListener with AddEventListenerOptions passive setting' ,
9881040 ifEnvSupports ( supportEventListenerOptions , function ( ) {
9891041 const hookSpy = jasmine . createSpy ( 'hook' ) ;
@@ -2472,61 +2524,59 @@ describe('Zone', function() {
24722524 } ) ;
24732525 } ) ) ;
24742526
2475- describe ( 'ResizeObserver' , ifEnvSupports ( 'ResizeObserver' , ( ) => {
2476- it ( 'ResizeObserver callback should be in zone' , ( done ) => {
2477- const ResizeObserver = ( window as any ) [ 'ResizeObserver' ] ;
2478- const div = document . createElement ( 'div' ) ;
2479- const zone = Zone . current . fork ( {
2480- name : 'observer'
2481- } ) ;
2482- const observer = new ResizeObserver ( ( entries : any , ob : any ) => {
2483- expect ( Zone . current . name ) . toEqual ( zone . name ) ;
2484-
2485- expect ( entries . length ) . toBe ( 1 ) ;
2486- expect ( entries [ 0 ] . target ) . toBe ( div ) ;
2487- done ( ) ;
2488- } ) ;
2489-
2490- zone . run ( ( ) => {
2491- observer . observe ( div ) ;
2492- } ) ;
2527+ describe (
2528+ 'ResizeObserver' , ifEnvSupports ( 'ResizeObserver' , ( ) => {
2529+ it ( 'ResizeObserver callback should be in zone' , ( done ) => {
2530+ const ResizeObserver = ( window as any ) [ 'ResizeObserver' ] ;
2531+ const div = document . createElement ( 'div' ) ;
2532+ const zone = Zone . current . fork ( { name : 'observer' } ) ;
2533+ const observer = new ResizeObserver ( ( entries : any , ob : any ) => {
2534+ expect ( Zone . current . name ) . toEqual ( zone . name ) ;
24932535
2494- document . body . appendChild ( div ) ;
2495- } ) ;
2536+ expect ( entries . length ) . toBe ( 1 ) ;
2537+ expect ( entries [ 0 ] . target ) . toBe ( div ) ;
2538+ done ( ) ;
2539+ } ) ;
24962540
2497- it ( 'ResizeObserver callback should be able to in different zones which when they were observed' , ( done ) => {
2498- const ResizeObserver = ( window as any ) [ 'ResizeObserver' ] ;
2499- const div1 = document . createElement ( 'div' ) ;
2500- const div2 = document . createElement ( 'div' ) ;
2501- const zone = Zone . current . fork ( {
2502- name : 'observer'
2503- } ) ;
2504- let count = 0 ;
2505- const observer = new ResizeObserver ( ( entries : any , ob : any ) => {
2506- entries . forEach ( ( entry : any ) => {
2507- if ( entry . target === div1 ) {
2508- expect ( Zone . current . name ) . toEqual ( zone . name ) ;
2509- } else {
2510- expect ( Zone . current . name ) . toEqual ( '<root>' ) ;
2511- }
2541+ zone . run ( ( ) => {
2542+ observer . observe ( div ) ;
25122543 } ) ;
2513- count ++ ;
2514- if ( count === 2 ) {
2515- done ( ) ;
2516- }
2517- } ) ;
25182544
2519- zone . run ( ( ) => {
2520- observer . observe ( div1 ) ;
2521- } ) ;
2522- Zone . root . run ( ( ) => {
2523- observer . observe ( div2 ) ;
2545+ document . body . appendChild ( div ) ;
25242546 } ) ;
25252547
2526- document . body . appendChild ( div1 ) ;
2527- document . body . appendChild ( div2 ) ;
2528- } ) ;
2529- } ) ) ;
2548+ it ( 'ResizeObserver callback should be able to in different zones which when they were observed' ,
2549+ ( done ) => {
2550+ const ResizeObserver = ( window as any ) [ 'ResizeObserver' ] ;
2551+ const div1 = document . createElement ( 'div' ) ;
2552+ const div2 = document . createElement ( 'div' ) ;
2553+ const zone = Zone . current . fork ( { name : 'observer' } ) ;
2554+ let count = 0 ;
2555+ const observer = new ResizeObserver ( ( entries : any , ob : any ) => {
2556+ entries . forEach ( ( entry : any ) => {
2557+ if ( entry . target === div1 ) {
2558+ expect ( Zone . current . name ) . toEqual ( zone . name ) ;
2559+ } else {
2560+ expect ( Zone . current . name ) . toEqual ( '<root>' ) ;
2561+ }
2562+ } ) ;
2563+ count ++ ;
2564+ if ( count === 2 ) {
2565+ done ( ) ;
2566+ }
2567+ } ) ;
2568+
2569+ zone . run ( ( ) => {
2570+ observer . observe ( div1 ) ;
2571+ } ) ;
2572+ Zone . root . run ( ( ) => {
2573+ observer . observe ( div2 ) ;
2574+ } ) ;
2575+
2576+ document . body . appendChild ( div1 ) ;
2577+ document . body . appendChild ( div2 ) ;
2578+ } ) ;
2579+ } ) ) ;
25302580
25312581 xdescribe ( 'getUserMedia' , ( ) => {
25322582 it ( 'navigator.mediaDevices.getUserMedia should in zone' ,
0 commit comments