@@ -52,5 +52,47 @@ describe('detail auto size', () => {
5252 layout . parentElement . removeChild ( layout ) ;
5353 expect ( ( ) => layout . recalculateLayout ( ) ) . to . not . throw ( ) ;
5454 } ) ;
55+
56+ describe ( 'nested layouts' , ( ) => {
57+ let outer , inner ;
58+
59+ beforeEach ( async ( ) => {
60+ outer = fixtureSync ( `
61+ <vaadin-master-detail-layout style="width: 800px;">
62+ <div>Outer Master</div>
63+ <vaadin-master-detail-layout slot="detail" style="width: 100%;">
64+ <div>Inner Master</div>
65+ <div slot="detail">Inner Detail</div>
66+ </vaadin-master-detail-layout>
67+ </vaadin-master-detail-layout>
68+ ` ) ;
69+ inner = outer . querySelector ( 'vaadin-master-detail-layout' ) ;
70+ await onceResized ( outer ) ;
71+ await onceResized ( inner ) ;
72+ } ) ;
73+
74+ it ( 'should re-measure cached size on auto-sized ancestor layouts' , ( ) => {
75+ const outerCachedBefore = outer . style . getPropertyValue ( '--_detail-cached-size' ) ;
76+ expect ( outerCachedBefore ) . to . not . be . empty ;
77+
78+ // Changing inner width should cause outer to re-measure
79+ inner . style . width = '200px' ;
80+ inner . recalculateLayout ( ) ;
81+
82+ const outerCachedAfter = outer . style . getPropertyValue ( '--_detail-cached-size' ) ;
83+ expect ( outerCachedAfter ) . to . not . be . empty ;
84+ expect ( outerCachedAfter ) . to . not . equal ( outerCachedBefore ) ;
85+ } ) ;
86+
87+ it ( 'should not re-measure cached size on ancestor with explicit detailSize' , async ( ) => {
88+ outer . detailSize = '300px' ;
89+ await onceResized ( outer ) ;
90+ expect ( outer . style . getPropertyValue ( '--_detail-cached-size' ) ) . to . be . empty ;
91+
92+ inner . recalculateLayout ( ) ;
93+
94+ expect ( outer . style . getPropertyValue ( '--_detail-cached-size' ) ) . to . be . empty ;
95+ } ) ;
96+ } ) ;
5597 } ) ;
5698} ) ;
0 commit comments