@@ -19,6 +19,7 @@ import {MatInkBar} from './ink-bar';
19
19
import { MatTabHeader } from './tab-header' ;
20
20
import { MatTabLabelWrapper } from './tab-label-wrapper' ;
21
21
import { Subject } from 'rxjs' ;
22
+ import { ObserversModule , MutationObserverFactory } from '@angular/cdk/observers' ;
22
23
23
24
24
25
describe ( 'MatTabHeader' , ( ) => {
@@ -30,7 +31,7 @@ describe('MatTabHeader', () => {
30
31
beforeEach ( async ( ( ) => {
31
32
dir = 'ltr' ;
32
33
TestBed . configureTestingModule ( {
33
- imports : [ CommonModule , PortalModule , MatRippleModule , ScrollingModule ] ,
34
+ imports : [ CommonModule , PortalModule , MatRippleModule , ScrollingModule , ObserversModule ] ,
34
35
declarations : [
35
36
MatTabHeader ,
36
37
MatInkBar ,
@@ -345,6 +346,41 @@ describe('MatTabHeader', () => {
345
346
discardPeriodicTasks ( ) ;
346
347
} ) ) ;
347
348
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
+
348
384
} ) ;
349
385
} ) ;
350
386
@@ -359,7 +395,7 @@ interface Tab {
359
395
<mat-tab-header [selectedIndex]="selectedIndex" [disableRipple]="disableRipple"
360
396
(indexFocused)="focusedIndex = $event"
361
397
(selectFocusedIndex)="selectedIndex = $event">
362
- <div matTabLabelWrapper style="min-width: 30px; width: 30px"
398
+ <div matTabLabelWrapper class="label-content" style="min-width: 30px; width: 30px"
363
399
*ngFor="let tab of tabs; let i = index"
364
400
[disabled]="!!tab.disabled"
365
401
(click)="selectedIndex = i">
0 commit comments