@@ -10,25 +10,29 @@ import {
10
10
} from '@angular/core' ;
11
11
import { By } from '@angular/platform-browser' ;
12
12
import { NoopAnimationsModule } from '@angular/platform-browser/animations' ;
13
- import { MdAutocompleteModule , MdAutocompleteTrigger } from './index' ;
13
+ import { FormControl , FormsModule , ReactiveFormsModule } from '@angular/forms' ;
14
+ import {
15
+ MdAutocompleteModule ,
16
+ MdAutocompleteTrigger ,
17
+ MdAutocomplete ,
18
+ getMdAutocompleteMissingPanelError ,
19
+ } from './index' ;
14
20
import { OverlayContainer } from '../core/overlay/overlay-container' ;
15
21
import { MdInputModule } from '../input/index' ;
16
22
import { Dir , LayoutDirection } from '../core/rtl/dir' ;
17
- import { FormControl , FormsModule , ReactiveFormsModule } from '@angular/forms' ;
18
23
import { Subscription } from 'rxjs/Subscription' ;
19
24
import { ENTER , DOWN_ARROW , SPACE , UP_ARROW , ESCAPE } from '../core/keyboard/keycodes' ;
20
25
import { MdOption } from '../core/option/option' ;
21
- import { MdAutocomplete } from './autocomplete' ;
22
26
import { MdInputContainer } from '../input/input-container' ;
23
27
import { Observable } from 'rxjs/Observable' ;
24
28
import { Subject } from 'rxjs/Subject' ;
25
29
import { dispatchFakeEvent } from '../core/testing/dispatch-events' ;
26
30
import { createKeyboardEvent } from '../core/testing/event-objects' ;
27
31
import { typeInElement } from '../core/testing/type-in-element' ;
28
32
import { ScrollDispatcher } from '../core/overlay/scroll/scroll-dispatcher' ;
29
-
30
33
import 'rxjs/add/operator/map' ;
31
34
35
+
32
36
describe ( 'MdAutocomplete' , ( ) => {
33
37
let overlayContainerElement : HTMLElement ;
34
38
let dir : LayoutDirection ;
@@ -50,7 +54,8 @@ describe('MdAutocomplete', () => {
50
54
NgIfAutocomplete ,
51
55
AutocompleteWithNgModel ,
52
56
AutocompleteWithOnPushDelay ,
53
- AutocompleteWithNativeInput
57
+ AutocompleteWithNativeInput ,
58
+ AutocompleteWithoutPanel
54
59
] ,
55
60
providers : [
56
61
{ provide : OverlayContainer , useFactory : ( ) => {
@@ -1156,6 +1161,15 @@ describe('MdAutocomplete', () => {
1156
1161
expect ( fixture . componentInstance . mdOptions . length ) . toBe ( 2 ) ;
1157
1162
} ) ) ;
1158
1163
1164
+ it ( 'should throw if the user attempts to open the panel too early' , async ( ( ) => {
1165
+ const fixture = TestBed . createComponent ( AutocompleteWithoutPanel ) ;
1166
+ fixture . detectChanges ( ) ;
1167
+
1168
+ expect ( ( ) => {
1169
+ fixture . componentInstance . trigger . openPanel ( ) ;
1170
+ } ) . toThrow ( getMdAutocompleteMissingPanelError ( ) ) ;
1171
+ } ) ) ;
1172
+
1159
1173
} ) ;
1160
1174
1161
1175
it ( 'should have correct width when opened' , ( ) => {
@@ -1422,3 +1436,11 @@ class AutocompleteWithNativeInput {
1422
1436
} ) ;
1423
1437
}
1424
1438
}
1439
+
1440
+
1441
+ @Component ( {
1442
+ template : `<input placeholder="Choose" [mdAutocomplete]="auto">`
1443
+ } )
1444
+ class AutocompleteWithoutPanel {
1445
+ @ViewChild ( MdAutocompleteTrigger ) trigger : MdAutocompleteTrigger ;
1446
+ }
0 commit comments