@@ -20,6 +20,7 @@ describe('MdSelect', () => {
2020 imports : [ MdSelectModule . forRoot ( ) , ReactiveFormsModule , FormsModule ] ,
2121 declarations : [
2222 BasicSelect ,
23+ SearchSelect ,
2324 NgModelSelect ,
2425 ManySelects ,
2526 NgIfSelect ,
@@ -1255,6 +1256,57 @@ describe('MdSelect', () => {
12551256 expect ( fixture . componentInstance . changeListener ) . toHaveBeenCalledTimes ( 1 ) ;
12561257 } ) ;
12571258 } ) ;
1259+
1260+ describe ( 'Search input' , ( ) => {
1261+ let fixture : ComponentFixture < SearchSelect > ;
1262+
1263+ beforeEach ( ( ) => {
1264+ fixture = TestBed . createComponent ( SearchSelect ) ;
1265+ fixture . detectChanges ( ) ;
1266+
1267+ let trigger = fixture . debugElement . query ( By . css ( '.md-select-trigger' ) ) . nativeElement ;
1268+ trigger . click ( ) ;
1269+ fixture . detectChanges ( ) ;
1270+ } ) ;
1271+
1272+ it ( 'should hide elements that are not in the filter' , ( ) => {
1273+ fixture . componentInstance . select . _onSearch ( 'steak' ) ;
1274+ fixture . detectChanges ( ) ;
1275+
1276+ fixture . whenStable ( ) . then ( ( ) => {
1277+ let options =
1278+ overlayContainerElement . querySelectorAll ( 'md-option' ) as NodeListOf < HTMLElement > ;
1279+
1280+ expect ( options [ 0 ] . getAttribute ( 'hidden' ) ) . toEqual ( null ) ;
1281+ expect ( options [ 1 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1282+ expect ( options [ 2 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1283+ expect ( options [ 3 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1284+ expect ( options [ 4 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1285+ expect ( options [ 5 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1286+ expect ( options [ 6 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1287+ expect ( options [ 7 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1288+ } ) ;
1289+ } ) ;
1290+
1291+ it ( 'should should not be case sensitive' , ( ) => {
1292+ fixture . componentInstance . select . _onSearch ( 'S-' ) ;
1293+ fixture . detectChanges ( ) ;
1294+
1295+ fixture . whenStable ( ) . then ( ( ) => {
1296+ let options =
1297+ overlayContainerElement . querySelectorAll ( 'md-option' ) as NodeListOf < HTMLElement > ;
1298+
1299+ expect ( options [ 0 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1300+ expect ( options [ 1 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1301+ expect ( options [ 2 ] . getAttribute ( 'hidden' ) ) . toEqual ( null ) ;
1302+ expect ( options [ 3 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1303+ expect ( options [ 4 ] . getAttribute ( 'hidden' ) ) . toEqual ( null ) ;
1304+ expect ( options [ 5 ] . getAttribute ( 'hidden' ) ) . toEqual ( null ) ;
1305+ expect ( options [ 6 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1306+ expect ( options [ 7 ] . getAttribute ( 'hidden' ) ) . toEqual ( 'true' ) ;
1307+ } ) ;
1308+ } ) ;
1309+ } ) ;
12581310} ) ;
12591311
12601312@Component ( {
@@ -1289,6 +1341,38 @@ class BasicSelect {
12891341 @ViewChildren ( MdOption ) options : QueryList < MdOption > ;
12901342}
12911343
1344+ @Component ( {
1345+ selector : 'search-select' ,
1346+ template : `
1347+ <div [style.height.px]="heightAbove"></div>
1348+ <md-select placeholder="Food" [search]="true" [formControl]="control" [required]="isRequired">
1349+ <md-option *ngFor="let food of foods" [value]="food.value" [disabled]="food.disabled">
1350+ {{ food.viewValue }}
1351+ </md-option>
1352+ </md-select>
1353+ <div [style.height.px]="heightBelow"></div>
1354+ `
1355+ } )
1356+ class SearchSelect {
1357+ foods : any [ ] = [
1358+ { value : 'steak-0' , viewValue : 'Steak' } ,
1359+ { value : 'pizza-1' , viewValue : 'Pizza' } ,
1360+ { value : 'tacos-2' , viewValue : 'Tacos' , disabled : true } ,
1361+ { value : 'sandwich-3' , viewValue : 'Sandwich' } ,
1362+ { value : 'chips-4' , viewValue : 'Chips' } ,
1363+ { value : 'eggs-5' , viewValue : 'Eggs' } ,
1364+ { value : 'pasta-6' , viewValue : 'Pasta' } ,
1365+ { value : 'sushi-7' , viewValue : 'Sushi' } ,
1366+ ] ;
1367+ control = new FormControl ( ) ;
1368+ isRequired : boolean ;
1369+ heightAbove = 0 ;
1370+ heightBelow = 0 ;
1371+
1372+ @ViewChild ( MdSelect ) select : MdSelect ;
1373+ @ViewChildren ( MdOption ) options : QueryList < MdOption > ;
1374+ }
1375+
12921376@Component ( {
12931377 selector : 'ng-model-select' ,
12941378 template : `
0 commit comments