47
47
supportsPassive = true ;
48
48
}
49
49
} ) ;
50
- window . addEventListener ( 'test' , null , opts ) ;
51
- window . removeEventListener ( 'test' , null , opts ) ;
50
+ window . addEventListener ( 'test' , opts , opts ) ;
51
+ window . removeEventListener ( 'test' , opts , 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 ;
@@ -984,6 +992,46 @@ describe('Zone', function() {
984
992
expect ( logs ) . toEqual ( [ 'click' ] ) ;
985
993
} ) ) ;
986
994
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
+ if ( ! supportsPassive ) {
1007
+ expect ( testEventListener . logs ) . toEqual ( [ false , false , true , false , false , false ] ) ;
1008
+ } else {
1009
+ expect ( testEventListener . logs ) . toEqual ( [
1010
+ { passive : true } , { once : true } , { capture : true } , { passive : false } , { once : false } ,
1011
+ { capture : false }
1012
+ ] ) ;
1013
+ }
1014
+ } ) ;
1015
+
1016
+ it ( 'should change options to boolean if not support passive on HTMLElement' , ( ) => {
1017
+ const logs : string [ ] = [ ] ;
1018
+ const listener = ( e : Event ) => {
1019
+ logs . push ( 'clicked' ) ;
1020
+ } ;
1021
+
1022
+ ( button as any ) . addEventListener ( 'click' , listener , { once : true } ) ;
1023
+ button . dispatchEvent ( clickEvent ) ;
1024
+ expect ( logs ) . toEqual ( [ 'clicked' ] ) ;
1025
+ button . dispatchEvent ( clickEvent ) ;
1026
+ if ( supportsPassive ) {
1027
+ expect ( logs ) . toEqual ( [ 'clicked' ] ) ;
1028
+ } else {
1029
+ expect ( logs ) . toEqual ( [ 'clicked' , 'clicked' ] ) ;
1030
+ }
1031
+
1032
+ button . removeEventListener ( 'click' , listener ) ;
1033
+ } ) ;
1034
+
987
1035
it ( 'should support addEventListener with AddEventListenerOptions passive setting' ,
988
1036
ifEnvSupports ( supportEventListenerOptions , function ( ) {
989
1037
const hookSpy = jasmine . createSpy ( 'hook' ) ;
@@ -2472,61 +2520,59 @@ describe('Zone', function() {
2472
2520
} ) ;
2473
2521
} ) ) ;
2474
2522
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
- } ) ;
2523
+ describe (
2524
+ 'ResizeObserver' , ifEnvSupports ( 'ResizeObserver' , ( ) => {
2525
+ it ( 'ResizeObserver callback should be in zone' , ( done ) => {
2526
+ const ResizeObserver = ( window as any ) [ 'ResizeObserver' ] ;
2527
+ const div = document . createElement ( 'div' ) ;
2528
+ const zone = Zone . current . fork ( { name : 'observer' } ) ;
2529
+ const observer = new ResizeObserver ( ( entries : any , ob : any ) => {
2530
+ expect ( Zone . current . name ) . toEqual ( zone . name ) ;
2493
2531
2494
- document . body . appendChild ( div ) ;
2495
- } ) ;
2532
+ expect ( entries . length ) . toBe ( 1 ) ;
2533
+ expect ( entries [ 0 ] . target ) . toBe ( div ) ;
2534
+ done ( ) ;
2535
+ } ) ;
2496
2536
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
- }
2537
+ zone . run ( ( ) => {
2538
+ observer . observe ( div ) ;
2512
2539
} ) ;
2513
- count ++ ;
2514
- if ( count === 2 ) {
2515
- done ( ) ;
2516
- }
2517
- } ) ;
2518
2540
2519
- zone . run ( ( ) => {
2520
- observer . observe ( div1 ) ;
2521
- } ) ;
2522
- Zone . root . run ( ( ) => {
2523
- observer . observe ( div2 ) ;
2541
+ document . body . appendChild ( div ) ;
2524
2542
} ) ;
2525
2543
2526
- document . body . appendChild ( div1 ) ;
2527
- document . body . appendChild ( div2 ) ;
2528
- } ) ;
2529
- } ) ) ;
2544
+ it ( 'ResizeObserver callback should be able to in different zones which when they were observed' ,
2545
+ ( done ) => {
2546
+ const ResizeObserver = ( window as any ) [ 'ResizeObserver' ] ;
2547
+ const div1 = document . createElement ( 'div' ) ;
2548
+ const div2 = document . createElement ( 'div' ) ;
2549
+ const zone = Zone . current . fork ( { name : 'observer' } ) ;
2550
+ let count = 0 ;
2551
+ const observer = new ResizeObserver ( ( entries : any , ob : any ) => {
2552
+ entries . forEach ( ( entry : any ) => {
2553
+ if ( entry . target === div1 ) {
2554
+ expect ( Zone . current . name ) . toEqual ( zone . name ) ;
2555
+ } else {
2556
+ expect ( Zone . current . name ) . toEqual ( '<root>' ) ;
2557
+ }
2558
+ } ) ;
2559
+ count ++ ;
2560
+ if ( count === 2 ) {
2561
+ done ( ) ;
2562
+ }
2563
+ } ) ;
2564
+
2565
+ zone . run ( ( ) => {
2566
+ observer . observe ( div1 ) ;
2567
+ } ) ;
2568
+ Zone . root . run ( ( ) => {
2569
+ observer . observe ( div2 ) ;
2570
+ } ) ;
2571
+
2572
+ document . body . appendChild ( div1 ) ;
2573
+ document . body . appendChild ( div2 ) ;
2574
+ } ) ;
2575
+ } ) ) ;
2530
2576
2531
2577
xdescribe ( 'getUserMedia' , ( ) => {
2532
2578
it ( 'navigator.mediaDevices.getUserMedia should in zone' ,
0 commit comments