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 , async } 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' ;
@@ -280,6 +280,43 @@ describe('IgxDatePicker', () => {
280280
281281 } ) ;
282282
283+ describe ( 'ARIA Tests' , ( ) => {
284+ let labelID : string ;
285+ let inputLabelledBy : string ;
286+ let dom : DebugElement ;
287+
288+ it ( 'ARIA Test for a picker with an input group template' , ( ) => {
289+ const fixture = TestBed . createComponent ( IgxDatePickerRetemplatedComponent ) ;
290+ fixture . detectChanges ( ) ;
291+ dom = fixture . debugElement ;
292+
293+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
294+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
295+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
296+ } ) ;
297+
298+ it ( 'ARIA Test for picker with a dialog mode' , ( ) => {
299+ const fixture = TestBed . createComponent ( IgxDatePickerTestComponent ) ;
300+ fixture . detectChanges ( ) ;
301+ dom = fixture . debugElement ;
302+
303+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
304+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
305+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
306+ } ) ;
307+
308+
309+ it ( 'ARIA Test for picker with a dropdown mode' , ( ) => {
310+ const fixture = TestBed . createComponent ( IgxDatePickerOpeningComponent ) ;
311+ fixture . detectChanges ( ) ;
312+ dom = fixture . debugElement ;
313+
314+ labelID = dom . query ( By . directive ( IgxLabelDirective ) ) . nativeElement . id ;
315+ inputLabelledBy = dom . query ( By . directive ( IgxInputDirective ) ) . nativeElement . getAttribute ( 'aria-labelledby' ) ;
316+ expect ( inputLabelledBy ) . toEqual ( labelID ) ;
317+ } ) ;
318+ } ) ;
319+
283320 describe ( 'DatePicker with passed date' , ( ) => {
284321 // configureTestSuite();
285322 let fixture : ComponentFixture < IgxDatePickerWithPassedDateComponent > ;
@@ -1416,6 +1453,7 @@ describe('IgxDatePicker', () => {
14161453 let moduleRef ;
14171454 let injector ;
14181455 let inputGroup : IgxInputGroupComponent ;
1456+ let renderer2 : Renderer2 ;
14191457
14201458 beforeEach ( ( ) => {
14211459 ngModel = {
@@ -1438,11 +1476,14 @@ describe('IgxDatePicker', () => {
14381476 } ;
14391477 moduleRef = { } ;
14401478 injector = { get : ( ) => ngModel } ;
1479+
14411480 inputGroup = new IgxInputGroupComponent ( null , null ) ;
1481+ renderer2 = jasmine . createSpyObj ( 'Renderer2' , [ 'setAttribute' ] , [ { } , 'aria-labelledby' , 'test-label-id-1' ] ) ;
1482+ spyOn ( renderer2 , 'setAttribute' ) . and . callFake ( ( ) => { } ) ;
14421483 } ) ;
14431484
14441485 it ( 'should initialize date picker with required correctly' , ( ) => {
1445- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1486+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14461487 datePicker [ '_inputGroup' ] = inputGroup ;
14471488 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14481489 ngModel . control . validator = ( ) => ( { required : true } ) ;
@@ -1455,7 +1496,7 @@ describe('IgxDatePicker', () => {
14551496 } ) ;
14561497
14571498 it ( 'should initialize date picker with required correctly with user template input-group' , ( ) => {
1458- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1499+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14591500 datePicker [ '_inputGroupUserTemplate' ] = inputGroup ;
14601501 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14611502 ngModel . control . validator = ( ) => ( { required : true } ) ;
@@ -1468,7 +1509,7 @@ describe('IgxDatePicker', () => {
14681509 } ) ;
14691510
14701511 it ( 'should update inputGroup isRequired correctly' , ( ) => {
1471- const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector ) ;
1512+ const datePicker = new IgxDatePickerComponent ( overlay , element , cdr , moduleRef , injector , renderer2 ) ;
14721513 datePicker [ '_inputGroup' ] = inputGroup ;
14731514 datePicker [ '_inputDirectiveUserTemplates' ] = new QueryList ( ) ;
14741515 datePicker . ngOnInit ( ) ;
@@ -1565,14 +1606,16 @@ export class IgxDatePickerNgModelComponent {
15651606<igx-date-picker>
15661607 <ng-template igxDatePickerTemplate let-displayData="displayData">
15671608 <igx-input-group>
1568- <label igxLabel>Date</label>
1609+ <label igxLabel>Custom Date Label </label>
15691610 <input igxInput [value]="displayData" required />
15701611 </igx-input-group>
15711612 </ng-template>
15721613</igx-date-picker>
15731614 `
15741615} )
1575- export class IgxDatePickerRetemplatedComponent { }
1616+ export class IgxDatePickerRetemplatedComponent {
1617+ @ViewChild ( IgxDatePickerComponent , { static : true } ) public datePicker : IgxDatePickerComponent ;
1618+ }
15761619
15771620@Component ( {
15781621 template : `
0 commit comments