@@ -6,14 +6,15 @@ import {
66 TestBed ,
77 discardPeriodicTasks ,
88 flush ,
9+ inject ,
910} from '@angular/core/testing' ;
1011import { Component , ElementRef , ViewChild } from '@angular/core' ;
1112import { By } from '@angular/platform-browser' ;
1213import { BrowserAnimationsModule , NoopAnimationsModule } from '@angular/platform-browser/animations' ;
1314import { MatDrawer , MatSidenavModule , MatDrawerContainer } from './index' ;
1415import { Direction } from '@angular/cdk/bidi' ;
1516import { A11yModule } from '@angular/cdk/a11y' ;
16- import { PlatformModule } from '@angular/cdk/platform' ;
17+ import { PlatformModule , Platform } from '@angular/cdk/platform' ;
1718import { ESCAPE } from '@angular/cdk/keycodes' ;
1819import { dispatchKeyboardEvent , createKeyboardEvent , dispatchEvent } from '@angular/cdk/testing' ;
1920import { CdkScrollable } from '@angular/cdk/scrolling' ;
@@ -41,40 +42,34 @@ describe('MatDrawer', () => {
4142 describe ( 'methods' , ( ) => {
4243 it ( 'should be able to open' , fakeAsync ( ( ) => {
4344 const fixture = TestBed . createComponent ( BasicTestApp ) ;
44-
4545 fixture . detectChanges ( ) ;
4646
4747 const testComponent : BasicTestApp = fixture . debugElement . componentInstance ;
48- const drawer = fixture . debugElement . query ( By . directive ( MatDrawer ) ) ;
49- const drawerBackdropElement = fixture . debugElement . query ( By . css ( '.mat-drawer-backdrop' ) ) ;
48+ const container = fixture . debugElement . query ( By . css ( 'mat-drawer-container' ) ) . nativeElement ;
5049
51- drawerBackdropElement . nativeElement . style . transition = 'none' ;
5250 fixture . debugElement . query ( By . css ( '.open' ) ) . nativeElement . click ( ) ;
5351 fixture . detectChanges ( ) ;
5452
5553 expect ( testComponent . openCount ) . toBe ( 0 ) ;
5654 expect ( testComponent . openStartCount ) . toBe ( 0 ) ;
55+ expect ( container . classList ) . not . toContain ( 'mat-drawer-opened' ) ;
5756
5857 tick ( ) ;
5958 expect ( testComponent . openStartCount ) . toBe ( 1 ) ;
6059 fixture . detectChanges ( ) ;
6160
6261 expect ( testComponent . openCount ) . toBe ( 1 ) ;
6362 expect ( testComponent . openStartCount ) . toBe ( 1 ) ;
64- expect ( getComputedStyle ( drawer . nativeElement ) . visibility ) . toBe ( 'visible' ) ;
65- expect ( getComputedStyle ( drawerBackdropElement . nativeElement ) . visibility ) . toBe ( 'visible' ) ;
63+ expect ( container . classList ) . toContain ( 'mat-drawer-opened' ) ;
6664 } ) ) ;
6765
6866 it ( 'should be able to close' , fakeAsync ( ( ) => {
6967 const fixture = TestBed . createComponent ( BasicTestApp ) ;
70-
7168 fixture . detectChanges ( ) ;
7269
7370 const testComponent : BasicTestApp = fixture . debugElement . componentInstance ;
74- const drawer = fixture . debugElement . query ( By . directive ( MatDrawer ) ) ;
75- const drawerBackdropElement = fixture . debugElement . query ( By . css ( '.mat-drawer-backdrop' ) ) ;
71+ const container = fixture . debugElement . query ( By . css ( 'mat-drawer-container' ) ) . nativeElement ;
7672
77- drawerBackdropElement . nativeElement . style . transition = 'none' ;
7873 fixture . debugElement . query ( By . css ( '.open' ) ) . nativeElement . click ( ) ;
7974 fixture . detectChanges ( ) ;
8075 flush ( ) ;
@@ -85,15 +80,15 @@ describe('MatDrawer', () => {
8580
8681 expect ( testComponent . closeCount ) . toBe ( 0 ) ;
8782 expect ( testComponent . closeStartCount ) . toBe ( 0 ) ;
83+ expect ( container . classList ) . toContain ( 'mat-drawer-opened' ) ;
8884
8985 flush ( ) ;
9086 expect ( testComponent . closeStartCount ) . toBe ( 1 ) ;
9187 fixture . detectChanges ( ) ;
9288
9389 expect ( testComponent . closeCount ) . toBe ( 1 ) ;
9490 expect ( testComponent . closeStartCount ) . toBe ( 1 ) ;
95- expect ( getComputedStyle ( drawer . nativeElement ) . visibility ) . toBe ( 'hidden' ) ;
96- expect ( getComputedStyle ( drawerBackdropElement . nativeElement ) . visibility ) . toBe ( 'hidden' ) ;
91+ expect ( container . classList ) . not . toContain ( 'mat-drawer-opened' ) ;
9792 } ) ) ;
9893
9994 it ( 'should resolve the open method promise with the new state of the drawer' , fakeAsync ( ( ) => {
@@ -642,7 +637,7 @@ describe('MatDrawerContainer', () => {
642637 expect ( parseInt ( contentElement . style . marginRight ) ) . toBe ( margin ) ;
643638 } ) ) ;
644639
645- it ( 'should not animate when the sidenav is open on load ' , fakeAsync ( ( ) => {
640+ it ( 'should not animate when the sidenav is open on load' , fakeAsync ( ( ) => {
646641 TestBed
647642 . resetTestingModule ( )
648643 . configureTestingModule ( {
@@ -662,7 +657,7 @@ describe('MatDrawerContainer', () => {
662657 } ) ) ;
663658
664659 it ( 'should recalculate the margin if a drawer changes size while open in autosize mode' ,
665- fakeAsync ( ( ) => {
660+ fakeAsync ( inject ( [ Platform ] , ( platform : Platform ) => {
666661 const fixture = TestBed . createComponent ( AutosizeDrawer ) ;
667662
668663 fixture . detectChanges ( ) ;
@@ -671,19 +666,31 @@ describe('MatDrawerContainer', () => {
671666 tick ( ) ;
672667 fixture . detectChanges ( ) ;
673668
669+ // IE and Edge are flaky in when they update the styles.
670+ // For them we fall back to checking whether the proper method was called.
671+ const isFlaky = platform . EDGE || platform . TRIDENT ;
674672 const contentEl = fixture . debugElement . nativeElement . querySelector ( '.mat-drawer-content' ) ;
675673 const initialMargin = parseInt ( contentEl . style . marginLeft ) ;
676674
677- expect ( initialMargin ) . toBeGreaterThan ( 0 ) ;
675+ if ( isFlaky ) {
676+ spyOn ( fixture . componentInstance . drawerContainer , 'updateContentMargins' ) ;
677+ } else {
678+ expect ( initialMargin ) . toBeGreaterThan ( 0 ) ;
679+ }
678680
679681 fixture . componentInstance . fillerWidth = 200 ;
680682 fixture . detectChanges ( ) ;
681683 tick ( 10 ) ;
682684 fixture . detectChanges ( ) ;
683685
684- expect ( parseInt ( contentEl . style . marginLeft ) ) . toBeGreaterThan ( initialMargin ) ;
686+ if ( isFlaky ) {
687+ expect ( fixture . componentInstance . drawerContainer . updateContentMargins ) . toHaveBeenCalled ( ) ;
688+ } else {
689+ expect ( parseInt ( contentEl . style . marginLeft ) ) . toBeGreaterThan ( initialMargin ) ;
690+ }
691+
685692 discardPeriodicTasks ( ) ;
686- } ) ) ;
693+ } ) ) ) ;
687694
688695 it ( 'should not set a style property if it would be zero' , fakeAsync ( ( ) => {
689696 const fixture = TestBed . createComponent ( AutosizeDrawer ) ;
@@ -945,15 +952,16 @@ class DrawerContainerStateChangesTestApp {
945952
946953@Component ( {
947954 template : `
948- <mat-drawer-container autosize>
955+ <mat-drawer-container autosize style="min-height: 200px;" >
949956 <mat-drawer mode="push" [position]="drawer1Position">
950957 Text
951- <div [style.width.px]="fillerWidth"></div>
958+ <div [style.width.px]="fillerWidth" style="height: 200px; background: red;" ></div>
952959 </mat-drawer>
953960 </mat-drawer-container>` ,
954961} )
955962class AutosizeDrawer {
956963 @ViewChild ( MatDrawer , { static : false } ) drawer : MatDrawer ;
964+ @ViewChild ( MatDrawerContainer , { static : false } ) drawerContainer : MatDrawerContainer ;
957965 fillerWidth = 0 ;
958966}
959967
0 commit comments