1- import { Component , ViewChild , ElementRef , EventEmitter , QueryList } from '@angular/core' ;
2- import { async , fakeAsync , TestBed , tick , flush , ComponentFixture } from '@angular/core/testing' ;
1+ import { Component , ViewChild , ElementRef , EventEmitter , QueryList , Renderer2 , DebugElement } from '@angular/core' ;
2+ import { fakeAsync , TestBed , tick , flush , ComponentFixture , waitForAsync } from '@angular/core/testing' ;
33import { FormsModule , FormGroup , FormBuilder , ReactiveFormsModule , Validators , NgControl } from '@angular/forms' ;
44import { By } from '@angular/platform-browser' ;
55import { NoopAnimationsModule } from '@angular/platform-browser/animations' ;
@@ -23,7 +23,7 @@ import {
2323
2424describe ( 'IgxDatePicker' , ( ) => {
2525 configureTestSuite ( ) ;
26- beforeAll ( async ( ( ) => {
26+ beforeAll ( waitForAsync ( ( ) => {
2727 TestBed . configureTestingModule ( {
2828 declarations : [
2929 IgxDatePickerTestComponent ,
@@ -314,7 +314,43 @@ describe('IgxDatePicker', () => {
314314 const input = fixture . debugElement . query ( By . directive ( IgxInputDirective ) ) . nativeElement ;
315315 expect ( input . tabIndex ) . toBe ( 3 ) ;
316316 } ) ;
317+ } ) ;
318+
319+ describe ( 'ARIA Tests' , ( ) => {
320+ let labelID : string ;
321+ let inputLabelledBy : string ;
322+ let dom : DebugElement ;
323+
324+ it ( 'ARIA Test for a picker with an input group template' , ( ) => {
325+ const fixture = TestBed . createComponent ( IgxDatePickerRetemplatedComponent ) ;
326+ fixture . detectChanges ( ) ;
327+ dom = fixture . debugElement ;
328+
329+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
330+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
331+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
332+ } ) ;
333+
334+ it ( 'ARIA Test for picker with a dialog mode' , ( ) => {
335+ const fixture = TestBed . createComponent ( IgxDatePickerTestComponent ) ;
336+ fixture . detectChanges ( ) ;
337+ dom = fixture . debugElement ;
317338
339+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
340+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
341+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
342+ } ) ;
343+
344+
345+ it ( 'ARIA Test for picker with a dropdown mode' , ( ) => {
346+ const fixture = TestBed . createComponent ( IgxDatePickerOpeningComponent ) ;
347+ fixture . detectChanges ( ) ;
348+ dom = fixture . debugElement ;
349+
350+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
351+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
352+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
353+ } ) ;
318354 } ) ;
319355
320356 describe ( 'DatePicker with passed date' , ( ) => {
@@ -1453,6 +1489,7 @@ describe('IgxDatePicker', () => {
14531489 let moduleRef ;
14541490 let injector ;
14551491 let inputGroup : IgxInputGroupComponent ;
1492+ let renderer2 : Renderer2 ;
14561493
14571494 beforeEach ( ( ) => {
14581495 ngModel = {
@@ -1476,10 +1513,13 @@ describe('IgxDatePicker', () => {
14761513 moduleRef = { } ;
14771514 injector = { get : ( ) => ngModel } ;
14781515 inputGroup = new IgxInputGroupComponent ( null , null , null , document ) ;
1516+ renderer2 = jasmine . createSpyObj ( 'Renderer2' , [ 'setAttribute' ] , [ { } , 'aria-labelledby' , 'test-label-id-1' ] ) ;
1517+ spyOn ( renderer2 , 'setAttribute' ) . and . callFake ( ( ) => {
1518+ } ) ;
14791519 } ) ;
14801520
14811521 it ( 'should initialize date picker with required correctly' , ( ) => {
1482- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1522+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14831523 datePicker [ '_inputGroup' ] = inputGroup ;
14841524 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14851525 spyOnProperty ( datePicker , 'inputGroupElement' ) . and . returnValue ( null ) ;
@@ -1493,7 +1533,7 @@ describe('IgxDatePicker', () => {
14931533 } ) ;
14941534
14951535 it ( 'should initialize date picker with required correctly with user template input-group' , ( ) => {
1496- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1536+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14971537 datePicker [ '_inputGroupUserTemplate' ] = inputGroup ;
14981538 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14991539 spyOnProperty ( datePicker , 'inputGroupElement' ) . and . returnValue ( null ) ;
@@ -1507,7 +1547,7 @@ describe('IgxDatePicker', () => {
15071547 } ) ;
15081548
15091549 it ( 'should update inputGroup isRequired correctly' , ( ) => {
1510- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1550+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
15111551 datePicker [ '_inputGroup' ] = inputGroup ;
15121552 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
15131553 spyOnProperty ( datePicker , 'inputGroupElement' ) . and . returnValue ( null ) ;
@@ -1619,14 +1659,16 @@ export class IgxDatePickerNgModelComponent {
16191659<igx-date-picker>
16201660 <ng-template igxDatePickerTemplate let-displayData="displayData">
16211661 <igx-input-group>
1622- <label igxLabel>Date</label>
1662+ <label igxLabel>Custom Date Label </label>
16231663 <input igxInput [value]="displayData" required />
16241664 </igx-input-group>
16251665 </ng-template>
16261666</igx-date-picker>
16271667 `
16281668} )
1629- export class IgxDatePickerRetemplatedComponent { }
1669+ export class IgxDatePickerRetemplatedComponent {
1670+ @ViewChild ( IgxDatePickerComponent , { static : true } ) public datePicker : IgxDatePickerComponent ;
1671+ }
16301672
16311673@Component ( {
16321674 template : `
0 commit comments