diff --git a/src/lib/input/input.spec.ts b/src/lib/input/input.spec.ts index 82382d81863c..926ad8a95b7b 100644 --- a/src/lib/input/input.spec.ts +++ b/src/lib/input/input.spec.ts @@ -238,6 +238,23 @@ describe('MatInput without forms', function () { expect(labelElement.getAttribute('aria-owns')).toBe(inputElement.id); }); + it('should add aria-required reflecting the required state', () => { + const fixture = TestBed.createComponent(MatInputWithRequired); + fixture.detectChanges(); + + const inputElement: HTMLInputElement = + fixture.debugElement.query(By.css('input')).nativeElement; + + expect(inputElement.getAttribute('aria-required')) + .toBe('false', 'Expected aria-required to reflect required state of false'); + + fixture.componentInstance.required = true; + fixture.detectChanges(); + + expect(inputElement.getAttribute('aria-required')) + .toBe('true', 'Expected aria-required to reflect required state of true'); + }); + it('should not overwrite existing id', () => { let fixture = TestBed.createComponent(MatInputWithId); fixture.detectChanges(); diff --git a/src/lib/input/input.ts b/src/lib/input/input.ts index 204f6b8a8557..cb60bbd74384 100644 --- a/src/lib/input/input.ts +++ b/src/lib/input/input.ts @@ -57,6 +57,7 @@ let nextUniqueId = 0; '[readonly]': 'readonly', '[attr.aria-describedby]': '_ariaDescribedby || null', '[attr.aria-invalid]': 'errorState', + '[attr.aria-required]': 'required.toString()', '(blur)': '_focusChanged(false)', '(focus)': '_focusChanged(true)', '(input)': '_onInput()',