@@ -3794,6 +3794,54 @@ describe("DatePicker", () => {
3794
3794
} ) ;
3795
3795
} ) ;
3796
3796
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
+
3797
3845
it ( "should show the correct start of week for GB locale" , ( ) => {
3798
3846
registerLocale ( "en-GB" , enGB ) ;
3799
3847
0 commit comments