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 ,
@@ -287,6 +287,43 @@ describe('IgxDatePicker', () => {
287287
288288 } ) ;
289289
290+ describe ( 'ARIA Tests' , ( ) => {
291+ let labelID : string ;
292+ let inputLabelledBy : string ;
293+ let dom : DebugElement ;
294+
295+ it ( 'ARIA Test for a picker with an input group template' , ( ) => {
296+ const fixture = TestBed . createComponent ( IgxDatePickerRetemplatedComponent ) ;
297+ fixture . detectChanges ( ) ;
298+ dom = fixture . debugElement ;
299+
300+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
301+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
302+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
303+ } ) ;
304+
305+ it ( 'ARIA Test for picker with a dialog mode' , ( ) => {
306+ const fixture = TestBed . createComponent ( IgxDatePickerTestComponent ) ;
307+ fixture . detectChanges ( ) ;
308+ dom = fixture . debugElement ;
309+
310+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
311+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
312+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
313+ } ) ;
314+
315+
316+ it ( 'ARIA Test for picker with a dropdown mode' , ( ) => {
317+ const fixture = TestBed . createComponent ( IgxDatePickerOpeningComponent ) ;
318+ fixture . detectChanges ( ) ;
319+ dom = fixture . debugElement ;
320+
321+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
322+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
323+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
324+ } ) ;
325+ } ) ;
326+
290327 describe ( 'DatePicker with passed date' , ( ) => {
291328 // configureTestSuite();
292329 let fixture : ComponentFixture < IgxDatePickerWithPassedDateComponent > ;
@@ -1423,6 +1460,7 @@ describe('IgxDatePicker', () => {
14231460 let moduleRef ;
14241461 let injector ;
14251462 let inputGroup : IgxInputGroupComponent ;
1463+ let renderer2 : Renderer2 ;
14261464
14271465 beforeEach ( ( ) => {
14281466 ngModel = {
@@ -1445,11 +1483,16 @@ describe('IgxDatePicker', () => {
14451483 } ;
14461484 moduleRef = { } ;
14471485 injector = { get : ( ) => ngModel } ;
1486+
14481487 inputGroup = new IgxInputGroupComponent ( null , null ) ;
1488+ renderer2 = jasmine . createSpyObj ( 'Renderer2' , [ 'setAttribute' ] , [ { } , 'aria-labelledby' , 'test-label-id-1' ] ) ;
1489+
1490+ spyOn ( renderer2 , 'setAttribute' ) . and . callFake ( ( ) => {
1491+ } ) ;
14491492 } ) ;
14501493
14511494 it ( 'should initialize date picker with required correctly' , ( ) => {
1452- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1495+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14531496 datePicker [ '_inputGroup' ] = inputGroup ;
14541497 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14551498 ngModel . control . validator = ( ) => ( { required : true } ) ;
@@ -1462,7 +1505,7 @@ describe('IgxDatePicker', () => {
14621505 } ) ;
14631506
14641507 it ( 'should initialize date picker with required correctly with user template input-group' , ( ) => {
1465- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1508+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14661509 datePicker [ '_inputGroupUserTemplate' ] = inputGroup ;
14671510 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14681511 ngModel . control . validator = ( ) => ( { required : true } ) ;
@@ -1475,7 +1518,7 @@ describe('IgxDatePicker', () => {
14751518 } ) ;
14761519
14771520 it ( 'should update inputGroup isRequired correctly' , ( ) => {
1478- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1521+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14791522 datePicker [ '_inputGroup' ] = inputGroup ;
14801523 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14811524 datePicker . ngOnInit ( ) ;
@@ -1572,14 +1615,16 @@ export class IgxDatePickerNgModelComponent {
15721615<igx-date-picker>
15731616 <ng-template igxDatePickerTemplate let-displayData="displayData">
15741617 <igx-input-group>
1575- <label igxLabel>Date</label>
1618+ <label igxLabel>Custom Date Label </label>
15761619 <input igxInput [value]="displayData" required />
15771620 </igx-input-group>
15781621 </ng-template>
15791622</igx-date-picker>
15801623 `
15811624} )
1582- export class IgxDatePickerRetemplatedComponent { }
1625+ export class IgxDatePickerRetemplatedComponent {
1626+ @ViewChild ( IgxDatePickerComponent , { static : true } ) public datePicker : IgxDatePickerComponent ;
1627+ }
15831628
15841629@Component ( {
15851630 template : `
0 commit comments