@@ -19,6 +19,7 @@ import {MatInkBar} from './ink-bar';
1919import { MatTabHeader } from './tab-header' ;
2020import { MatTabLabelWrapper } from './tab-label-wrapper' ;
2121import { Subject } from 'rxjs' ;
22+ import { ObserversModule , MutationObserverFactory } from '@angular/cdk/observers' ;
2223
2324
2425describe ( 'MatTabHeader' , ( ) => {
@@ -30,7 +31,7 @@ describe('MatTabHeader', () => {
3031 beforeEach ( async ( ( ) => {
3132 dir = 'ltr' ;
3233 TestBed . configureTestingModule ( {
33- imports : [ CommonModule , PortalModule , MatRippleModule , ScrollDispatchModule ] ,
34+ imports : [ CommonModule , PortalModule , MatRippleModule , ScrollDispatchModule , ObserversModule ] ,
3435 declarations : [
3536 MatTabHeader ,
3637 MatInkBar ,
@@ -345,6 +346,41 @@ describe('MatTabHeader', () => {
345346 discardPeriodicTasks ( ) ;
346347 } ) ) ;
347348
349+ it ( 'should update the pagination state if the content of the labels changes' , ( ) => {
350+ const mutationCallbacks : Function [ ] = [ ] ;
351+ TestBed . overrideProvider ( MutationObserverFactory , {
352+ useValue : {
353+ // Stub out the MutationObserver since the native one is async.
354+ create : function ( callback : Function ) {
355+ mutationCallbacks . push ( callback ) ;
356+ return { observe : ( ) => { } , disconnect : ( ) => { } } ;
357+ }
358+ }
359+ } ) ;
360+
361+ fixture = TestBed . createComponent ( SimpleTabHeaderApp ) ;
362+ fixture . detectChanges ( ) ;
363+
364+ const tabHeaderElement : HTMLElement =
365+ fixture . nativeElement . querySelector ( '.mat-tab-header' ) ;
366+ const labels =
367+ Array . from < HTMLElement > ( fixture . nativeElement . querySelectorAll ( '.label-content' ) ) ;
368+ const extraText = new Array ( 100 ) . fill ( 'w' ) . join ( ) ;
369+ const enabledClass = 'mat-tab-header-pagination-controls-enabled' ;
370+
371+ expect ( tabHeaderElement . classList ) . not . toContain ( enabledClass ) ;
372+
373+ labels . forEach ( label => {
374+ label . style . width = '' ;
375+ label . textContent += extraText ;
376+ } ) ;
377+
378+ mutationCallbacks . forEach ( callback => callback ( ) ) ;
379+ fixture . detectChanges ( ) ;
380+
381+ expect ( tabHeaderElement . classList ) . toContain ( enabledClass ) ;
382+ } ) ;
383+
348384 } ) ;
349385} ) ;
350386
@@ -359,7 +395,7 @@ interface Tab {
359395 <mat-tab-header [selectedIndex]="selectedIndex" [disableRipple]="disableRipple"
360396 (indexFocused)="focusedIndex = $event"
361397 (selectFocusedIndex)="selectedIndex = $event">
362- <div matTabLabelWrapper style="min-width: 30px; width: 30px"
398+ <div matTabLabelWrapper class="label-content" style="min-width: 30px; width: 30px"
363399 *ngFor="let tab of tabs; let i = index"
364400 [disabled]="!!tab.disabled"
365401 (click)="selectedIndex = i">
0 commit comments