@@ -512,6 +512,116 @@ describe('chaining-form interface', () => {
512512 expect ( callOrder ) . toStrictEqual ( [ 3 , 1 , 2 ] )
513513 } )
514514
515+ test ( 'chaining listener event replacer' , ( ) => {
516+ const callOrder : [ number , number | undefined ] [ ] = [ ]
517+ const beh = componentSpace
518+ . define ( )
519+ . init ( ( { self, lifetime } ) => {
520+ lifetime ( 'created' , ( ) => {
521+ self . addListener ( 'customEv' , ( e ) => {
522+ callOrder . push ( [
523+ 1 ,
524+ ( e as glassEasel . ShadowedEvent < { eventOrder ?: number } > ) . detail . eventOrder ,
525+ ] )
526+ } )
527+ } )
528+ } )
529+ . registerBehavior ( )
530+
531+ let eventOrder = 0
532+ const compDef = componentSpace
533+ . define ( )
534+ . behavior ( beh )
535+ . template ( tmpl ( `<div id="wrapper" bind:customEv="onCustomEv"></div>` ) )
536+ . listenerEventReplacer ( ( e ) => {
537+ eventOrder += 1
538+ e . detail = { eventOrder }
539+ return e
540+ } )
541+ . init ( ( { self, lifetime, listener } ) => {
542+ lifetime ( 'created' , ( ) => {
543+ ; ( self . shadowRoot as glassEasel . ShadowRoot ) . addListener ( 'customEv' , ( e ) => {
544+ callOrder . push ( [
545+ 3 ,
546+ ( e as glassEasel . ShadowedEvent < { eventOrder : number } > ) . detail . eventOrder ,
547+ ] )
548+ } )
549+ } )
550+ return {
551+ onCustomEv : listener ( ( e ) => {
552+ callOrder . push ( [
553+ 2 ,
554+ ( e as glassEasel . ShadowedEvent < { eventOrder : number } > ) . detail . eventOrder ,
555+ ] )
556+ } ) ,
557+ }
558+ } )
559+ . registerComponent ( )
560+ const root = glassEasel . Component . createWithContext ( 'root' , compDef , domBackend )
561+ ; ( root . $ . wrapper as glassEasel . Element ) . triggerEvent (
562+ 'customEv' ,
563+ { } ,
564+ { bubbles : true , composed : true } ,
565+ )
566+ expect ( callOrder ) . toStrictEqual ( [
567+ [ 2 , 1 ] ,
568+ [ 3 , 2 ] ,
569+ [ 1 , undefined ] ,
570+ ] )
571+ } )
572+
573+ test ( 'chaining listener event replacer on native rendering' , ( ) => {
574+ const callOrder : [ number , number | undefined ] [ ] = [ ]
575+ const beh = componentSpace
576+ . define ( )
577+ . init ( ( { self, lifetime } ) => {
578+ lifetime ( 'created' , ( ) => {
579+ self . addListener ( 'customEv' , ( e ) => {
580+ callOrder . push ( [
581+ 1 ,
582+ ( e as glassEasel . ShadowedEvent < { eventOrder ?: number } > ) . detail . eventOrder ,
583+ ] )
584+ } )
585+ } )
586+ } )
587+ . registerBehavior ( )
588+
589+ let eventOrder = 0
590+ const compDef = componentSpace
591+ . define ( )
592+ . behavior ( beh )
593+ . options ( { externalComponent : true } )
594+ . template ( tmpl ( `<div id="wrapper" bind:customEv="onCustomEv"></div>` ) )
595+ . listenerEventReplacer ( ( e ) => {
596+ eventOrder += 1
597+ e . detail = { eventOrder }
598+ return e
599+ } )
600+ . init ( ( { listener } ) => {
601+ return {
602+ onCustomEv : listener ( ( e ) => {
603+ callOrder . push ( [
604+ 2 ,
605+ ( e as glassEasel . ShadowedEvent < { eventOrder : number } > ) . detail . eventOrder ,
606+ ] )
607+ } ) ,
608+ }
609+ } )
610+ . registerComponent ( )
611+ const root = glassEasel . Component . createWithContext ( 'root' , compDef , domBackend )
612+ glassEasel . triggerExternalEvent (
613+ root ,
614+ root . $ . wrapper as glassEasel . GeneralBackendElement ,
615+ 'customEv' ,
616+ { } ,
617+ { bubbles : true , composed : true } ,
618+ )
619+ expect ( callOrder ) . toStrictEqual ( [
620+ [ 2 , 1 ] ,
621+ [ 1 , undefined ] ,
622+ ] )
623+ } )
624+
515625 test ( 'chaining relations' , ( ) => {
516626 const eventArr : number [ ] = [ ]
517627 const parentDef = componentSpace
0 commit comments