@@ -3794,6 +3794,54 @@ describe("DatePicker", () => {
37943794 } ) ;
37953795 } ) ;
37963796
3797+ describe ( "Calendar Header Accessibility" , ( ) => {
3798+ it ( "renders day names with sr-only full weekday and visible short name" , ( ) => {
3799+ const { container } = render ( < DatePicker /> ) ;
3800+ const input = safeQuerySelector ( container , "input" ) ;
3801+ fireEvent . focus ( input ) ;
3802+
3803+ const headers = container . querySelectorAll (
3804+ '.react-datepicker__day-names > [role="columnheader"]' ,
3805+ ) ;
3806+ expect ( headers . length ) . toBe ( 7 ) ;
3807+
3808+ headers . forEach ( ( header ) => {
3809+ // Should have a visually hidden span with the full weekday name
3810+ const srOnly = header . querySelector ( ".sr-only" ) ;
3811+ expect ( srOnly ) . toBeTruthy ( ) ;
3812+ expect ( srOnly ?. textContent ?. length ) . toBeGreaterThan ( 2 ) ;
3813+
3814+ // Should have a visible short name
3815+ const visible = header . querySelector ( 'span[aria-hidden="true"]' ) ;
3816+ expect ( visible ) . toBeTruthy ( ) ;
3817+ expect ( visible ?. textContent ?. length ) . toBeLessThanOrEqual ( 3 ) ;
3818+ } ) ;
3819+ } ) ;
3820+
3821+ it ( "renders week number column header with sr-only label and visible #" , ( ) => {
3822+ const { container } = render ( < DatePicker showWeekNumbers /> ) ;
3823+ const input = safeQuerySelector ( container , "input" ) ;
3824+ fireEvent . focus ( input ) ;
3825+
3826+ const headers = container . querySelectorAll (
3827+ '.react-datepicker__day-names > [role="columnheader"]' ,
3828+ ) ;
3829+ expect ( headers . length ) . toBe ( 8 ) ;
3830+
3831+ const weekNumberHeader = headers [ 0 ] as Element ;
3832+ const srOnly = weekNumberHeader . querySelector ( ".sr-only" ) ;
3833+ expect ( srOnly ) . toBeTruthy ( ) ;
3834+ expect ( srOnly ?. textContent ?. trim ( ) ?. toLowerCase ( ) ) . toEqual ( "week number" ) ;
3835+
3836+ // Should have a visible short name
3837+ const visible = weekNumberHeader . querySelector (
3838+ 'span[aria-hidden="true"]' ,
3839+ ) ;
3840+ expect ( visible ) . toBeTruthy ( ) ;
3841+ expect ( visible ?. textContent ?. trim ( ) ?. toLowerCase ( ) ) . toEqual ( "#" ) ;
3842+ } ) ;
3843+ } ) ;
3844+
37973845 it ( "should show the correct start of week for GB locale" , ( ) => {
37983846 registerLocale ( "en-GB" , enGB ) ;
37993847
0 commit comments