11import { expect } from '@vaadin/chai-plugins' ;
22import { arrowRight , fixtureSync , nextRender , nextResize , nextUpdate } from '@vaadin/testing-helpers' ;
3+ import sinon from 'sinon' ;
34import './menu-bar-test-styles.js' ;
45import '../src/vaadin-menu-bar.js' ;
56
@@ -29,8 +30,8 @@ describe('overflow', () => {
2930 </div>
3031 ` ) ;
3132 menu = wrapper . querySelector ( 'vaadin-menu-bar' ) ;
32- await nextRender ( menu ) ;
3333 menu . items = [ { text : 'Item 1' } , { text : 'Item 2' } , { text : 'Item 3' } , { text : 'Item 4' } , { text : 'Item 5' } ] ;
34+ await nextResize ( menu ) ;
3435 buttons = menu . _buttons ;
3536 overflow = buttons [ buttons . length - 1 ] ;
3637 } ) ;
@@ -107,9 +108,10 @@ describe('overflow', () => {
107108 expect ( overflow . item . children . length ) . to . equal ( 0 ) ;
108109 } ) ;
109110
110- it ( 'should hide overflow button and reset its items when all buttons fit after changing items' , ( ) => {
111+ it ( 'should hide overflow button and reset its items when all buttons fit after changing items' , async ( ) => {
111112 // See https://github.com/vaadin/vaadin-menu-bar/issues/133
112113 menu . items = [ { text : 'Item 1' } , { text : 'Item 2' } ] ;
114+ await nextResize ( menu ) ;
113115 buttons = menu . _buttons ;
114116 overflow = buttons [ 2 ] ;
115117 assertVisible ( buttons [ 1 ] ) ;
@@ -123,7 +125,7 @@ describe('overflow', () => {
123125 await nextResize ( menu ) ;
124126 expect ( overflow . hasAttribute ( 'hidden' ) ) . to . be . true ;
125127 menu . setAttribute ( 'theme' , 'big' ) ;
126- await nextUpdate ( menu ) ;
128+ await nextResize ( menu ) ;
127129 assertHidden ( buttons [ 3 ] ) ;
128130 assertHidden ( buttons [ 4 ] ) ;
129131 expect ( overflow . hasAttribute ( 'hidden' ) ) . to . be . false ;
@@ -171,8 +173,9 @@ describe('overflow', () => {
171173 } ) ;
172174
173175 describe ( 'reverse-collapse' , ( ) => {
174- beforeEach ( ( ) => {
176+ beforeEach ( async ( ) => {
175177 menu . reverseCollapse = true ;
178+ await nextUpdate ( menu ) ;
176179 } ) ;
177180
178181 it ( 'should show overflow button and hide the buttons which do not fit' , ( ) => {
@@ -194,8 +197,9 @@ describe('overflow', () => {
194197 expect ( overflow . item . children [ 2 ] ) . to . deep . equal ( menu . items [ 2 ] ) ;
195198 } ) ;
196199
197- it ( 'should update overflow when reverseCollapse changes' , ( ) => {
200+ it ( 'should update overflow when reverseCollapse changes' , async ( ) => {
198201 menu . reverseCollapse = false ;
202+ await nextUpdate ( menu ) ;
199203 assertVisible ( buttons [ 0 ] ) ;
200204 assertVisible ( buttons [ 1 ] ) ;
201205 assertHidden ( buttons [ 2 ] ) ;
@@ -211,7 +215,7 @@ describe('overflow', () => {
211215 beforeEach ( async ( ) => {
212216 menu = fixtureSync ( '<vaadin-menu-bar></vaadin-menu-bar>' ) ;
213217 menu . items = [ { text : 'Item 1' } , { text : 'Item 2' } , { text : 'Item 3' } , { text : 'Item 4' } ] ;
214- await nextRender ( menu ) ;
218+ await nextResize ( menu ) ;
215219 buttons = menu . _buttons ;
216220 overflow = buttons [ buttons . length - 1 ] ;
217221 } ) ;
@@ -247,12 +251,13 @@ describe('overflow', () => {
247251 await nextResize ( menu ) ;
248252
249253 menu . setAttribute ( 'theme' , 'big' ) ;
250- await nextUpdate ( menu ) ;
254+ await nextResize ( menu ) ;
251255 expect ( menu . hasAttribute ( 'has-single-button' ) ) . to . be . true ;
252256 } ) ;
253257
254- it ( 'should set when changing items to only have one button' , ( ) => {
258+ it ( 'should set when changing items to only have one button' , async ( ) => {
255259 menu . items = [ { text : 'Actions' } ] ;
260+ await nextResize ( menu ) ;
256261 expect ( menu . hasAttribute ( 'has-single-button' ) ) . to . be . true ;
257262 } ) ;
258263
@@ -261,13 +266,16 @@ describe('overflow', () => {
261266 await nextResize ( menu ) ;
262267
263268 menu . items = [ { text : 'Actions' } ] ;
269+ await nextResize ( menu ) ;
264270 expect ( menu . hasAttribute ( 'has-single-button' ) ) . to . be . true ;
265271 } ) ;
266272
267- it ( 'should remove when changing items to have more than one button' , ( ) => {
273+ it ( 'should remove when changing items to have more than one button' , async ( ) => {
268274 menu . items = [ { text : 'Actions' } ] ;
275+ await nextResize ( menu ) ;
269276
270277 menu . items = [ { text : 'Edit' } , { text : 'Delete' } ] ;
278+ await nextResize ( menu ) ;
271279 expect ( menu . hasAttribute ( 'has-single-button' ) ) . to . be . false ;
272280 } ) ;
273281 } ) ;
@@ -462,4 +470,20 @@ describe('overflow', () => {
462470 expect ( item . classList . contains ( 'test-class-1' ) ) . to . be . true ;
463471 } ) ;
464472 } ) ;
473+
474+ describe ( 'performance' , ( ) => {
475+ let menu , spy ;
476+
477+ beforeEach ( ( ) => {
478+ menu = fixtureSync ( '<vaadin-menu-bar></vaadin-menu-bar>' ) ;
479+ spy = sinon . spy ( menu , '_hasOverflow' , [ 'get' , 'set' ] ) ;
480+ } ) ;
481+
482+ it ( 'should only detect overflow twice on initial render' , async ( ) => {
483+ menu . items = [ { text : 'Item 1' } , { text : 'Item 2' } , { text : 'Item 3' } , { text : 'Item 4' } , { text : 'Item 5' } ] ;
484+ await nextResize ( menu ) ;
485+ await nextUpdate ( menu ) ;
486+ expect ( spy . set . callCount ) . to . equal ( 2 ) ;
487+ } ) ;
488+ } ) ;
465489} ) ;
0 commit comments