@@ -207,7 +207,7 @@ describe('header/footer feature', () => {
207207 await nextRender ( ) ;
208208
209209 dialog . headerRenderer = null ;
210- await nextUpdate ( dialog ) ;
210+ await nextRender ( ) ;
211211 expect ( dialog . hasAttribute ( 'has-header' ) ) . to . be . not . ok ;
212212 expect ( overlay . hasAttribute ( 'has-header' ) ) . to . be . not . ok ;
213213 } ) ;
@@ -293,7 +293,7 @@ describe('header/footer feature', () => {
293293 await nextRender ( ) ;
294294
295295 dialog . footerRenderer = null ;
296- await nextUpdate ( dialog ) ;
296+ await nextRender ( ) ;
297297 expect ( dialog . hasAttribute ( 'has-footer' ) ) . to . be . not . ok ;
298298 expect ( overlay . hasAttribute ( 'has-footer' ) ) . to . be . not . ok ;
299299 } ) ;
@@ -447,7 +447,7 @@ describe('header/footer feature', () => {
447447 expect ( getComputedStyle ( headerPart ) . display ) . to . not . be . equal ( 'none' ) ;
448448
449449 dialog . headerTitle = null ;
450- await nextUpdate ( dialog ) ;
450+ await nextRender ( ) ;
451451 expect ( getComputedStyle ( headerPart ) . display ) . to . not . be . equal ( 'none' ) ;
452452 } ) ;
453453
@@ -462,7 +462,7 @@ describe('header/footer feature', () => {
462462 expect ( getComputedStyle ( headerPart ) . display ) . to . not . be . equal ( 'none' ) ;
463463
464464 dialog . headerRenderer = null ;
465- await nextUpdate ( dialog ) ;
465+ await nextRender ( ) ;
466466 expect ( getComputedStyle ( headerPart ) . display ) . to . not . be . equal ( 'none' ) ;
467467 } ) ;
468468
@@ -478,7 +478,7 @@ describe('header/footer feature', () => {
478478
479479 dialog . headerTitle = null ;
480480 dialog . headerRenderer = null ;
481- await nextUpdate ( dialog ) ;
481+ await nextRender ( ) ;
482482 expect ( getComputedStyle ( headerPart ) . display ) . to . be . equal ( 'none' ) ;
483483 } ) ;
484484 } ) ;
@@ -536,3 +536,107 @@ describe('renderer set before attach', () => {
536536 expect ( spy . calledOnce ) . to . be . true ;
537537 } ) ;
538538} ) ;
539+
540+ describe ( 'slotted header content' , ( ) => {
541+ let dialog , overlay ;
542+
543+ beforeEach ( async ( ) => {
544+ dialog = fixtureSync ( '<vaadin-dialog></vaadin-dialog>' ) ;
545+ await nextRender ( ) ;
546+ overlay = dialog . $ . overlay ;
547+ } ) ;
548+
549+ afterEach ( async ( ) => {
550+ dialog . opened = false ;
551+ await nextRender ( ) ;
552+ } ) ;
553+
554+ it ( 'should not have [has-header] attribute when no header content is slotted' , async ( ) => {
555+ dialog . opened = true ;
556+ await nextRender ( ) ;
557+ expect ( dialog . hasAttribute ( 'has-header' ) ) . to . be . false ;
558+ expect ( overlay . hasAttribute ( 'has-header' ) ) . to . be . false ;
559+ } ) ;
560+
561+ it ( 'should set [has-header] attribute when header content is slotted' , async ( ) => {
562+ const header = document . createElement ( 'div' ) ;
563+ header . setAttribute ( 'slot' , 'header-content' ) ;
564+ header . textContent = 'Header Content' ;
565+ dialog . appendChild ( header ) ;
566+
567+ dialog . opened = true ;
568+ await nextRender ( ) ;
569+
570+ expect ( dialog . hasAttribute ( 'has-header' ) ) . to . be . true ;
571+ expect ( overlay . hasAttribute ( 'has-header' ) ) . to . be . true ;
572+ } ) ;
573+
574+ it ( 'should remove [has-header] attribute when slotted header content is removed' , async ( ) => {
575+ const header = document . createElement ( 'div' ) ;
576+ header . setAttribute ( 'slot' , 'header-content' ) ;
577+ header . textContent = 'Header Content' ;
578+ dialog . appendChild ( header ) ;
579+
580+ dialog . opened = true ;
581+ await nextRender ( ) ;
582+ expect ( overlay . hasAttribute ( 'has-header' ) ) . to . be . true ;
583+
584+ header . remove ( ) ;
585+ await nextRender ( ) ;
586+
587+ expect ( dialog . hasAttribute ( 'has-header' ) ) . to . be . false ;
588+ expect ( overlay . hasAttribute ( 'has-header' ) ) . to . be . false ;
589+ } ) ;
590+ } ) ;
591+
592+ describe ( 'slotted footer content' , ( ) => {
593+ let dialog , overlay ;
594+
595+ beforeEach ( async ( ) => {
596+ dialog = fixtureSync ( '<vaadin-dialog></vaadin-dialog>' ) ;
597+ await nextRender ( ) ;
598+ overlay = dialog . $ . overlay ;
599+ } ) ;
600+
601+ afterEach ( async ( ) => {
602+ dialog . opened = false ;
603+ await nextRender ( ) ;
604+ } ) ;
605+
606+ it ( 'should not have [has-footer] attribute when no footer content is slotted' , async ( ) => {
607+ dialog . opened = true ;
608+ await nextRender ( ) ;
609+ expect ( dialog . hasAttribute ( 'has-footer' ) ) . to . be . false ;
610+ expect ( overlay . hasAttribute ( 'has-footer' ) ) . to . be . false ;
611+ } ) ;
612+
613+ it ( 'should set [has-footer] attribute when footer content is slotted' , async ( ) => {
614+ const footer = document . createElement ( 'div' ) ;
615+ footer . setAttribute ( 'slot' , 'footer' ) ;
616+ footer . textContent = 'Footer Content' ;
617+ dialog . appendChild ( footer ) ;
618+
619+ dialog . opened = true ;
620+ await nextRender ( ) ;
621+
622+ expect ( dialog . hasAttribute ( 'has-footer' ) ) . to . be . true ;
623+ expect ( overlay . hasAttribute ( 'has-footer' ) ) . to . be . true ;
624+ } ) ;
625+
626+ it ( 'should remove [has-footer] attribute when slotted footer content is removed' , async ( ) => {
627+ const footer = document . createElement ( 'div' ) ;
628+ footer . setAttribute ( 'slot' , 'footer' ) ;
629+ footer . textContent = 'Footer Content' ;
630+ dialog . appendChild ( footer ) ;
631+
632+ dialog . opened = true ;
633+ await nextRender ( ) ;
634+ expect ( overlay . hasAttribute ( 'has-footer' ) ) . to . be . true ;
635+
636+ footer . remove ( ) ;
637+ await nextRender ( ) ;
638+
639+ expect ( dialog . hasAttribute ( 'has-footer' ) ) . to . be . false ;
640+ expect ( overlay . hasAttribute ( 'has-footer' ) ) . to . be . false ;
641+ } ) ;
642+ } ) ;
0 commit comments