1- import { ComponentFixture , TestBed } from '@angular/core/testing' ;
1+ import { ComponentFixture , TestBed , async } from '@angular/core/testing' ;
22import { Component , ViewChild } from '@angular/core' ;
33import { By } from '@angular/platform-browser' ;
4- import { ConnectedOverlayDirective , OverlayModule } from './overlay-directives' ;
4+ import { ConnectedOverlayDirective , OverlayModule , OverlayOrigin } from './overlay-directives' ;
55import { OverlayContainer } from './overlay-container' ;
66import { ConnectedPositionStrategy } from './position/connected-position-strategy' ;
77import { ConnectedOverlayPositionChange } from './position/connected-position' ;
@@ -18,7 +18,7 @@ describe('Overlay directives', () => {
1818 beforeEach ( ( ) => {
1919 TestBed . configureTestingModule ( {
2020 imports : [ OverlayModule ] ,
21- declarations : [ ConnectedOverlayDirectiveTest ] ,
21+ declarations : [ ConnectedOverlayDirectiveTest , ConnectedOverlayPropertyInitOrder ] ,
2222 providers : [
2323 { provide : OverlayContainer , useFactory : ( ) => {
2424 overlayContainerElement = document . createElement ( 'div' ) ;
@@ -111,6 +111,21 @@ describe('Overlay directives', () => {
111111 'Expected overlay to have been detached.' ) ;
112112 } ) ;
113113
114+ it ( 'should not depend on the order in which the `origin` and `open` are set' , async ( ( ) => {
115+ fixture . destroy ( ) ;
116+
117+ const propOrderFixture = TestBed . createComponent ( ConnectedOverlayPropertyInitOrder ) ;
118+ propOrderFixture . detectChanges ( ) ;
119+
120+ const overlayDirective = propOrderFixture . componentInstance . connectedOverlayDirective ;
121+
122+ expect ( ( ) => {
123+ overlayDirective . open = true ;
124+ overlayDirective . origin = propOrderFixture . componentInstance . trigger ;
125+ propOrderFixture . detectChanges ( ) ;
126+ } ) . not . toThrow ( ) ;
127+ } ) ) ;
128+
114129 describe ( 'inputs' , ( ) => {
115130
116131 it ( 'should set the width' , ( ) => {
@@ -310,3 +325,14 @@ class ConnectedOverlayDirectiveTest {
310325
311326 @ViewChild ( ConnectedOverlayDirective ) connectedOverlayDirective : ConnectedOverlayDirective ;
312327}
328+
329+ @Component ( {
330+ template : `
331+ <button cdk-overlay-origin #trigger="cdkOverlayOrigin">Toggle menu</button>
332+ <ng-template cdk-connected-overlay>Menu content</ng-template>` ,
333+ } )
334+ class ConnectedOverlayPropertyInitOrder {
335+ @ViewChild ( ConnectedOverlayDirective ) connectedOverlayDirective : ConnectedOverlayDirective ;
336+ @ViewChild ( 'trigger' ) trigger : OverlayOrigin ;
337+ }
338+
0 commit comments