1- import { async , TestBed , fakeAsync , tick } from '@angular/core/testing' ;
2- import { Component } from '@angular/core' ;
1+ import { async , TestBed , fakeAsync , tick , ComponentFixture } from '@angular/core/testing' ;
2+ import { Component , ViewChild } from '@angular/core' ;
33import { By } from '@angular/platform-browser' ;
44import { NoopAnimationsModule } from '@angular/platform-browser/animations' ;
5- import { MdExpansionModule } from './index' ;
5+ import { MdExpansionModule , MdExpansionPanel } from './index' ;
66
77
88describe ( 'MdExpansionPanel' , ( ) => {
@@ -137,13 +137,74 @@ describe('MdExpansionPanel', () => {
137137
138138 expect ( arrow . style . transform ) . toBe ( 'rotate(180deg)' , 'Expected 180 degree rotation.' ) ;
139139 } ) ) ;
140+
141+ describe ( 'disabled state' , ( ) => {
142+ let fixture : ComponentFixture < PanelWithContent > ;
143+ let panel : HTMLElement ;
144+ let header : HTMLElement ;
145+
146+ beforeEach ( ( ) => {
147+ fixture = TestBed . createComponent ( PanelWithContent ) ;
148+ fixture . detectChanges ( ) ;
149+ panel = fixture . debugElement . query ( By . css ( 'md-expansion-panel' ) ) . nativeElement ;
150+ header = fixture . debugElement . query ( By . css ( 'md-expansion-panel-header' ) ) . nativeElement ;
151+ } ) ;
152+
153+ it ( 'should toggle the aria-disabled attribute on the header' , ( ) => {
154+ expect ( header . getAttribute ( 'aria-disabled' ) ) . toBe ( 'false' ) ;
155+
156+ fixture . componentInstance . disabled = true ;
157+ fixture . detectChanges ( ) ;
158+
159+ expect ( header . getAttribute ( 'aria-disabled' ) ) . toBe ( 'true' ) ;
160+ } ) ;
161+
162+ it ( 'should toggle the expansion indicator' , ( ) => {
163+ expect ( panel . querySelector ( '.mat-expansion-indicator' ) ) . toBeTruthy ( ) ;
164+
165+ fixture . componentInstance . disabled = true ;
166+ fixture . detectChanges ( ) ;
167+
168+ expect ( panel . querySelector ( '.mat-expansion-indicator' ) ) . toBeFalsy ( ) ;
169+ } ) ;
170+
171+ it ( 'should not be able to toggle the panel via a user action if disabled' , ( ) => {
172+ expect ( fixture . componentInstance . panel . expanded ) . toBe ( false ) ;
173+ expect ( header . classList ) . not . toContain ( 'mat-expanded' ) ;
174+
175+ fixture . componentInstance . disabled = true ;
176+ fixture . detectChanges ( ) ;
177+
178+ header . click ( ) ;
179+ fixture . detectChanges ( ) ;
180+
181+ expect ( fixture . componentInstance . panel . expanded ) . toBe ( false ) ;
182+ expect ( header . classList ) . not . toContain ( 'mat-expanded' ) ;
183+ } ) ;
184+
185+ it ( 'should be able to toggle a disabled expansion panel programmatically' , ( ) => {
186+ expect ( fixture . componentInstance . panel . expanded ) . toBe ( false ) ;
187+ expect ( header . classList ) . not . toContain ( 'mat-expanded' ) ;
188+
189+ fixture . componentInstance . disabled = true ;
190+ fixture . detectChanges ( ) ;
191+
192+ fixture . componentInstance . expanded = true ;
193+ fixture . detectChanges ( ) ;
194+
195+ expect ( fixture . componentInstance . panel . expanded ) . toBe ( true ) ;
196+ expect ( header . classList ) . toContain ( 'mat-expanded' ) ;
197+ } ) ;
198+
199+ } ) ;
140200} ) ;
141201
142202
143203@Component ( {
144204 template : `
145205 <md-expansion-panel [expanded]="expanded"
146206 [hideToggle]="hideToggle"
207+ [disabled]="disabled"
147208 (opened)="openCallback()"
148209 (closed)="closeCallback()">
149210 <md-expansion-panel-header>Panel Title</md-expansion-panel-header>
@@ -152,10 +213,12 @@ describe('MdExpansionPanel', () => {
152213 </md-expansion-panel>`
153214} )
154215class PanelWithContent {
155- expanded : boolean = false ;
156- hideToggle : boolean = false ;
216+ expanded = false ;
217+ hideToggle = false ;
218+ disabled = false ;
157219 openCallback = jasmine . createSpy ( 'openCallback' ) ;
158220 closeCallback = jasmine . createSpy ( 'closeCallback' ) ;
221+ @ViewChild ( MdExpansionPanel ) panel : MdExpansionPanel ;
159222}
160223
161224
0 commit comments