@@ -1819,45 +1819,100 @@ describe('IgxSlider', () => {
18191819 } ) ;
18201820
18211821 describe ( 'Accessibility: ARIA Attributes' , ( ) => {
1822- let fixture : ComponentFixture < SliderInitializeTestComponent > ;
1822+ let fixture : ComponentFixture < RangeSliderTestComponent > ;
18231823 let slider : IgxSliderComponent ;
18241824
18251825 beforeEach ( ( ) => {
1826- fixture = TestBed . createComponent ( SliderInitializeTestComponent ) ;
1826+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
18271827 slider = fixture . componentInstance . slider ;
18281828 fixture . detectChanges ( ) ;
18291829 } ) ;
18301830
1831- it ( 'aria properties should be successfully applied' , ( ) => {
1832- const sliderElement = fixture . nativeElement . querySelector ( 'igx-slider' ) ;
1833- const sliderRole = fixture . nativeElement . querySelector ( 'igx-slider[role="slider"]' ) ;
1831+ it ( 'should apply all ARIA properties correctly to both thumbs' , fakeAsync ( ( ) => {
1832+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
1833+ slider = fixture . componentInstance . slider ;
1834+ fixture . detectChanges ( ) ;
1835+ tick ( ) ;
18341836
1835- expect ( sliderElement ) . toBeDefined ( ) ;
1836- expect ( sliderRole ) . toBeDefined ( ) ;
1837+ const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
1838+ const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
18371839
1838- const minValue = parseInt ( sliderElement . getAttribute ( 'aria-valuemin' ) , 10 ) ;
1839- const maxValue = parseInt ( sliderElement . getAttribute ( 'aria-valuemax' ) , 10 ) ;
1840- const readOnly = sliderElement . getAttribute ( 'aria-readonly' ) ;
1840+ expect ( thumbFrom . getAttribute ( 'role' ) ) . toBe ( 'slider' ) ;
1841+ expect ( thumbFrom . getAttribute ( 'tabindex' ) ) . toBe ( '0' ) ;
1842+ expect ( parseInt ( thumbFrom . getAttribute ( 'aria-valuenow' ) , 10 ) ) . toBe ( slider . lowerValue ) ;
1843+ expect ( parseInt ( thumbFrom . getAttribute ( 'aria-valuemin' ) , 10 ) ) . toBe ( slider . minValue ) ;
1844+ expect ( parseInt ( thumbFrom . getAttribute ( 'aria-valuemax' ) , 10 ) ) . toBe ( slider . maxValue ) ;
1845+ expect ( thumbFrom . getAttribute ( 'aria-label' ) ) . toBe ( 'Slider thumb from' ) ;
1846+ expect ( thumbFrom . getAttribute ( 'aria-orientation' ) ) . toBe ( 'horizontal' ) ;
1847+ expect ( thumbFrom . getAttribute ( 'aria-disabled' ) ) . toBe ( 'false' ) ;
1848+
1849+ expect ( thumbTo . getAttribute ( 'role' ) ) . toBe ( 'slider' ) ;
1850+ expect ( thumbTo . getAttribute ( 'tabindex' ) ) . toBe ( '0' ) ;
1851+ expect ( parseInt ( thumbTo . getAttribute ( 'aria-valuenow' ) , 10 ) ) . toBe ( slider . upperValue ) ;
1852+ expect ( parseInt ( thumbTo . getAttribute ( 'aria-valuemin' ) , 10 ) ) . toBe ( slider . minValue ) ;
1853+ expect ( parseInt ( thumbTo . getAttribute ( 'aria-valuemax' ) , 10 ) ) . toBe ( slider . maxValue ) ;
1854+ expect ( thumbTo . getAttribute ( 'aria-label' ) ) . toBe ( 'Slider thumb to' ) ;
1855+ expect ( thumbTo . getAttribute ( 'aria-orientation' ) ) . toBe ( 'horizontal' ) ;
1856+ expect ( thumbTo . getAttribute ( 'aria-disabled' ) ) . toBe ( 'false' ) ;
1857+
1858+ slider . labels = [ 'Low' , 'Medium' , 'High' ] ;
1859+ fixture . detectChanges ( ) ;
1860+ tick ( ) ;
18411861
1842- expect ( minValue ) . toBe ( slider . minValue ) ;
1843- expect ( maxValue ) . toBe ( slider . maxValue ) ;
1844- expect ( readOnly ) . toBe ( 'false' ) ;
1845- } ) ;
1862+ expect ( thumbFrom . getAttribute ( 'aria-valuetext' ) ) . toBe ( 'Low' ) ;
1863+ expect ( thumbTo . getAttribute ( 'aria-valuetext' ) ) . toBe ( 'High' ) ;
18461864
1847- it ( 'should maintain accessibility attributes when slider is disabled' , ( ) => {
1848- const sliderElement = fixture . nativeElement . querySelector ( 'igx-slider' ) ;
1849- const sliderRole = fixture . nativeElement . querySelector ( 'igx-slider[role="slider"]' ) ;
1865+ slider . disabled = true ;
1866+ fixture . detectChanges ( ) ;
1867+ tick ( ) ;
18501868
1851- expect ( sliderElement ) . toBeDefined ( ) ;
1852- expect ( sliderRole ) . toBeDefined ( ) ;
1869+ expect ( thumbFrom . getAttribute ( 'aria-disabled' ) ) . toBe ( 'true' ) ;
1870+ expect ( thumbTo . getAttribute ( 'aria-disabled' ) ) . toBe ( 'true' ) ;
1871+ } ) ) ;
18531872
1854- slider . disabled = true ;
1873+ it ( 'should apply correct tabindex to thumbs' , fakeAsync ( ( ) => {
1874+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
1875+ slider = fixture . componentInstance . slider ;
18551876 fixture . detectChanges ( ) ;
1877+ tick ( ) ;
18561878
1857- const disabled = sliderElement . getAttribute ( 'aria-readonly' ) ;
1879+ const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
1880+ const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
18581881
1859- expect ( disabled ) . toBe ( 'true' ) ;
1860- } ) ;
1882+ expect ( thumbFrom . getAttribute ( 'tabindex' ) ) . toBe ( '0' ) ;
1883+ expect ( thumbTo . getAttribute ( 'tabindex' ) ) . toBe ( '0' ) ;
1884+ } ) ) ;
1885+
1886+ it ( 'should apply correct role to thumbs' , fakeAsync ( ( ) => {
1887+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
1888+ slider = fixture . componentInstance . slider ;
1889+ fixture . detectChanges ( ) ;
1890+ tick ( ) ;
1891+
1892+ const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
1893+ const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
1894+
1895+ expect ( thumbFrom . getAttribute ( 'role' ) ) . toBe ( 'slider' ) ;
1896+ expect ( thumbTo . getAttribute ( 'role' ) ) . toBe ( 'slider' ) ;
1897+ } ) ) ;
1898+
1899+ it ( 'should apply aria-valuenow, aria-valuemin, and aria-valuemax to thumbs' , fakeAsync ( ( ) => {
1900+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
1901+ slider = fixture . componentInstance . slider ;
1902+ fixture . detectChanges ( ) ;
1903+ tick ( ) ;
1904+
1905+ const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
1906+ const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
1907+
1908+ expect ( thumbFrom . getAttribute ( 'aria-valuenow' ) ) . toBe ( String ( slider . lowerValue ) ) ;
1909+ expect ( thumbFrom . getAttribute ( 'aria-valuemin' ) ) . toBe ( String ( slider . minValue ) ) ;
1910+ expect ( thumbFrom . getAttribute ( 'aria-valuemax' ) ) . toBe ( String ( slider . maxValue ) ) ;
1911+
1912+ expect ( thumbTo . getAttribute ( 'aria-valuenow' ) ) . toBe ( String ( slider . upperValue ) ) ;
1913+ expect ( thumbTo . getAttribute ( 'aria-valuemin' ) ) . toBe ( String ( slider . minValue ) ) ;
1914+ expect ( thumbTo . getAttribute ( 'aria-valuemax' ) ) . toBe ( String ( slider . maxValue ) ) ;
1915+ } ) ) ;
18611916
18621917 it ( 'should apply aria-valuenow to the thumbs' , fakeAsync ( ( ) => {
18631918 fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
@@ -1895,16 +1950,78 @@ describe('IgxSlider', () => {
18951950 expect ( thumbTo . getAttribute ( 'aria-valuenow' ) ) . toBe ( '70' ) ;
18961951 } ) ) ;
18971952
1898- it ( 'should have correct aria-labelledby references for each thumb ' , ( ) => {
1953+ it ( 'should apply aria-valuetext when labels are provided ' , fakeAsync ( ( ) => {
18991954 fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
1955+ slider = fixture . componentInstance . slider ;
1956+ fixture . detectChanges ( ) ;
1957+ tick ( ) ;
1958+
1959+ slider . labels = [ 'Low' , 'Medium' , 'High' ] ;
1960+ tick ( ) ;
19001961 fixture . detectChanges ( ) ;
19011962
19021963 const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
19031964 const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
19041965
1905- expect ( thumbFrom . getAttribute ( 'aria-labelledby' ) ) . toBe ( 'slider-label-from' ) ;
1906- expect ( thumbTo . getAttribute ( 'aria-labelledby' ) ) . toBe ( 'slider-label-to' ) ;
1907- } ) ;
1966+ expect ( thumbFrom . getAttribute ( 'aria-valuetext' ) ) . toBe ( 'Low' ) ;
1967+ expect ( thumbTo . getAttribute ( 'aria-valuetext' ) ) . toBe ( 'High' ) ;
1968+
1969+ slider . value = {
1970+ lower : 1 ,
1971+ upper : 1
1972+ } ;
1973+ fixture . detectChanges ( ) ;
1974+ tick ( ) ;
1975+
1976+ expect ( thumbFrom . getAttribute ( 'aria-valuetext' ) ) . toBe ( 'Medium' ) ;
1977+ expect ( thumbTo . getAttribute ( 'aria-valuetext' ) ) . toBe ( 'Medium' ) ;
1978+ } ) ) ;
1979+
1980+ it ( 'should apply correct aria-label to thumbs' , fakeAsync ( ( ) => {
1981+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
1982+ slider = fixture . componentInstance . slider ;
1983+ fixture . detectChanges ( ) ;
1984+ tick ( ) ;
1985+
1986+ const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
1987+ const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
1988+
1989+ expect ( thumbFrom . getAttribute ( 'aria-label' ) ) . toBe ( 'Slider thumb from' ) ;
1990+ expect ( thumbTo . getAttribute ( 'aria-label' ) ) . toBe ( 'Slider thumb to' ) ;
1991+ } ) ) ;
1992+
1993+ it ( 'should apply correct aria-orientation to thumbs' , fakeAsync ( ( ) => {
1994+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
1995+ slider = fixture . componentInstance . slider ;
1996+ fixture . detectChanges ( ) ;
1997+ tick ( ) ;
1998+
1999+ const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
2000+ const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
2001+
2002+ expect ( thumbFrom . getAttribute ( 'aria-orientation' ) ) . toBe ( 'horizontal' ) ;
2003+ expect ( thumbTo . getAttribute ( 'aria-orientation' ) ) . toBe ( 'horizontal' ) ;
2004+ } ) ) ;
2005+
2006+ it ( 'should update aria-disabled when the slider is disabled' , fakeAsync ( ( ) => {
2007+ fixture = TestBed . createComponent ( RangeSliderTestComponent ) ;
2008+ slider = fixture . componentInstance . slider ;
2009+ fixture . detectChanges ( ) ;
2010+ tick ( ) ;
2011+
2012+ const thumbFrom = fixture . debugElement . query ( By . css ( THUMB_FROM_CLASS ) ) . nativeElement ;
2013+ const thumbTo = fixture . debugElement . query ( By . css ( THUMB_TO_CLASS ) ) . nativeElement ;
2014+
2015+ expect ( thumbFrom . getAttribute ( 'aria-disabled' ) ) . toBe ( 'false' ) ;
2016+ expect ( thumbTo . getAttribute ( 'aria-disabled' ) ) . toBe ( 'false' ) ;
2017+
2018+ slider . disabled = true ;
2019+ fixture . detectChanges ( ) ;
2020+ tick ( ) ;
2021+
2022+ expect ( thumbFrom . getAttribute ( 'aria-disabled' ) ) . toBe ( 'true' ) ;
2023+ expect ( thumbTo . getAttribute ( 'aria-disabled' ) ) . toBe ( 'true' ) ;
2024+ } ) ) ;
19082025 } ) ;
19092026
19102027 const verifySecondaryTicsLabelsAreHidden = ( ticks , hidden ) => {
0 commit comments