@@ -700,4 +700,57 @@ describe('bluebird promise', () => {
700700
701701 zone . runGuarded ( ( ) => { return Promise . resolve ( ) . then ( ( ) => { throw new Error ( 'test' ) ; } ) ; } ) ;
702702 } ) ;
703+
704+ it ( 'should not trigger unhandledrejection if zone.onHandleError return false' , ( done : DoneFn ) => {
705+ const listener = function ( ) { fail ( 'should not be here' ) ; } ;
706+
707+ if ( typeof window !== 'undefined' ) {
708+ window . addEventListener ( 'unhandledrejection' , listener ) ;
709+ } else if ( typeof process !== 'undefined' ) {
710+ process . on ( 'unhandledRejection' , listener ) ;
711+ }
712+
713+ const zone = Zone . current . fork ( {
714+ name : 'testErrorHandling' ,
715+ onHandleError : function ( ) {
716+ setTimeout ( ( ) => {
717+ if ( typeof window !== 'undefined' ) {
718+ window . removeEventListener ( 'unhandledrejection' , listener ) ;
719+ } else if ( typeof process !== 'undefined' ) {
720+ process . removeListener ( 'unhandledRejection' , listener ) ;
721+ }
722+ done ( ) ;
723+ } , 500 ) ;
724+ return false ;
725+ }
726+ } ) ;
727+
728+ zone . runGuarded ( ( ) => { return Promise . resolve ( ) . then ( ( ) => { throw new Error ( 'test' ) ; } ) ; } ) ;
729+ } ) ;
730+
731+ it ( 'should trigger unhandledrejection if zone.onHandleError return true' , ( done : DoneFn ) => {
732+ const listener = function ( event : any ) {
733+ if ( typeof window !== 'undefined' ) {
734+ expect ( event . detail . reason . message ) . toEqual ( 'test' ) ;
735+ } else if ( typeof process !== 'undefined' ) {
736+ expect ( event . message ) . toEqual ( 'test' ) ;
737+ }
738+ if ( typeof window !== 'undefined' ) {
739+ window . removeEventListener ( 'unhandledrejection' , listener ) ;
740+ } else if ( typeof process !== 'undefined' ) {
741+ process . removeListener ( 'unhandledRejection' , listener ) ;
742+ }
743+ done ( ) ;
744+ } ;
745+ if ( typeof window !== 'undefined' ) {
746+ window . addEventListener ( 'unhandledrejection' , listener ) ;
747+ } else if ( typeof process !== 'undefined' ) {
748+ process . on ( 'unhandledRejection' , listener ) ;
749+ }
750+
751+ const zone =
752+ Zone . current . fork ( { name : 'testErrorHandling' , onHandleError : function ( ) { return true ; } } ) ;
753+
754+ zone . runGuarded ( ( ) => { return Promise . resolve ( ) . then ( ( ) => { throw new Error ( 'test' ) ; } ) ; } ) ;
755+ } ) ;
703756} ) ;
0 commit comments