@@ -2381,4 +2381,131 @@ describe('Zone', function() {
23812381 } ) ) ;
23822382 } ) ;
23832383 } ) ;
2384+
2385+
2386+ describe (
2387+ 'pointer event in IE' ,
2388+ ifEnvSupports (
2389+ ( ) => { return getIEVersion ( ) === 11 ; } ,
2390+ ( ) => {
2391+ const pointerEventsMap : { [ key : string ] : string } = {
2392+ 'MSPointerCancel' : 'pointercancel' ,
2393+ 'MSPointerDown' : 'pointerdown' ,
2394+ 'MSPointerEnter' : 'pointerenter' ,
2395+ 'MSPointerHover' : 'pointerhover' ,
2396+ 'MSPointerLeave' : 'pointerleave' ,
2397+ 'MSPointerMove' : 'pointermove' ,
2398+ 'MSPointerOut' : 'pointerout' ,
2399+ 'MSPointerOver' : 'pointerover' ,
2400+ 'MSPointerUp' : 'pointerup'
2401+ } ;
2402+
2403+ let div : HTMLDivElement ;
2404+ beforeEach ( ( ) => {
2405+ div = document . createElement ( 'div' ) ;
2406+ document . body . appendChild ( div ) ;
2407+ } ) ;
2408+ afterEach ( ( ) => { document . body . removeChild ( div ) ; } ) ;
2409+ Object . keys ( pointerEventsMap ) . forEach ( key => {
2410+ it ( `${ key } and ${ pointerEventsMap [ key ] } should both be triggered` , ( done : DoneFn ) => {
2411+ const logs : string [ ] = [ ] ;
2412+ div . addEventListener ( key , ( event : any ) => {
2413+ expect ( event . type ) . toEqual ( pointerEventsMap [ key ] ) ;
2414+ logs . push ( `${ key } triggered` ) ;
2415+ } ) ;
2416+ div . addEventListener ( pointerEventsMap [ key ] , ( event : any ) => {
2417+ expect ( event . type ) . toEqual ( pointerEventsMap [ key ] ) ;
2418+ logs . push ( `${ pointerEventsMap [ key ] } triggered` ) ;
2419+ } ) ;
2420+ const evt1 = document . createEvent ( 'Event' ) ;
2421+ evt1 . initEvent ( key , true , true ) ;
2422+ div . dispatchEvent ( evt1 ) ;
2423+
2424+ setTimeout ( ( ) => {
2425+ expect ( logs ) . toEqual ( [ `${ key } triggered` , `${ pointerEventsMap [ key ] } triggered` ] ) ;
2426+ } ) ;
2427+
2428+ const evt2 = document . createEvent ( 'Event' ) ;
2429+ evt2 . initEvent ( pointerEventsMap [ key ] , true , true ) ;
2430+ div . dispatchEvent ( evt2 ) ;
2431+
2432+ setTimeout ( ( ) => {
2433+ expect ( logs ) . toEqual ( [ `${ key } triggered` , `${ pointerEventsMap [ key ] } triggered` ] ) ;
2434+ } ) ;
2435+
2436+ setTimeout ( done ) ;
2437+ } ) ;
2438+
2439+ it ( `${ key } and ${
2440+ pointerEventsMap [ key ] } with same listener should not be triggered twice`,
2441+ ( done : DoneFn ) => {
2442+ const logs : string [ ] = [ ] ;
2443+ const listener = function ( event : any ) {
2444+ expect ( event . type ) . toEqual ( pointerEventsMap [ key ] ) ;
2445+ logs . push ( `${ key } triggered` ) ;
2446+ } ;
2447+ div . addEventListener ( key , listener ) ;
2448+ div . addEventListener ( pointerEventsMap [ key ] , listener ) ;
2449+
2450+ const evt1 = document . createEvent ( 'Event' ) ;
2451+ evt1 . initEvent ( key , true , true ) ;
2452+ div . dispatchEvent ( evt1 ) ;
2453+
2454+ setTimeout ( ( ) => { expect ( logs ) . toEqual ( [ `${ key } triggered` ] ) ; } ) ;
2455+
2456+ const evt2 = document . createEvent ( 'Event' ) ;
2457+ evt2 . initEvent ( pointerEventsMap [ key ] , true , true ) ;
2458+ div . dispatchEvent ( evt2 ) ;
2459+
2460+ setTimeout (
2461+ ( ) => { expect ( logs ) . toEqual ( [ `${ pointerEventsMap [ key ] } triggered` ] ) ; } ) ;
2462+
2463+ setTimeout ( done ) ;
2464+ } ) ;
2465+
2466+ it ( `${ key } and ${
2467+ pointerEventsMap
2468+ [ key ] } should be able to be removed with removeEventListener`,
2469+ ( done : DoneFn ) => {
2470+ const logs : string [ ] = [ ] ;
2471+ const listener1 = function ( event : any ) { logs . push ( `${ key } triggered` ) ; } ;
2472+ const listener2 = function ( event : any ) {
2473+ logs . push ( `${ pointerEventsMap [ key ] } triggered` ) ;
2474+ } ;
2475+ div . addEventListener ( key , listener1 ) ;
2476+ div . addEventListener ( pointerEventsMap [ key ] , listener2 ) ;
2477+
2478+ div . removeEventListener ( key , listener1 ) ;
2479+ div . removeEventListener ( key , listener2 ) ;
2480+
2481+ const evt1 = document . createEvent ( 'Event' ) ;
2482+ evt1 . initEvent ( key , true , true ) ;
2483+ div . dispatchEvent ( evt1 ) ;
2484+
2485+ setTimeout ( ( ) => { expect ( logs ) . toEqual ( [ ] ) ; } ) ;
2486+
2487+ const evt2 = document . createEvent ( 'Event' ) ;
2488+ evt2 . initEvent ( pointerEventsMap [ key ] , true , true ) ;
2489+ div . dispatchEvent ( evt2 ) ;
2490+
2491+ setTimeout ( ( ) => { expect ( logs ) . toEqual ( [ ] ) ; } ) ;
2492+
2493+ div . addEventListener ( key , listener1 ) ;
2494+ div . addEventListener ( pointerEventsMap [ key ] , listener2 ) ;
2495+
2496+ div . removeEventListener ( pointerEventsMap [ key ] , listener1 ) ;
2497+ div . removeEventListener ( pointerEventsMap [ key ] , listener2 ) ;
2498+
2499+ div . dispatchEvent ( evt1 ) ;
2500+
2501+ setTimeout ( ( ) => { expect ( logs ) . toEqual ( [ ] ) ; } ) ;
2502+
2503+ div . dispatchEvent ( evt2 ) ;
2504+
2505+ setTimeout ( ( ) => { expect ( logs ) . toEqual ( [ ] ) ; } ) ;
2506+
2507+ setTimeout ( done ) ;
2508+ } ) ;
2509+ } ) ;
2510+ } ) ) ;
23842511} ) ;
0 commit comments