@@ -564,4 +564,100 @@ describe('TreeView', () => {
564
564
expect ( node2 ) . toHaveClass ( `${ prefix } --tree-node--selected` ) ;
565
565
expect ( node3 ) . toHaveClass ( `${ prefix } --tree-node--selected` ) ;
566
566
} ) ;
567
+
568
+ it ( 'should expand a collapsed parent node when Enter key is pressed' , async ( ) => {
569
+ const user = userEvent . setup ( ) ;
570
+
571
+ render (
572
+ < TreeView label = "Tree View" >
573
+ < TreeNode
574
+ data-testid = "parent-node"
575
+ label = "Parent Node"
576
+ isExpanded = { false } >
577
+ < TreeNode data-testid = "child-node" label = "Child Node" />
578
+ </ TreeNode >
579
+ </ TreeView >
580
+ ) ;
581
+
582
+ const parentNode = screen . getByTestId ( 'parent-node' ) ;
583
+
584
+ // Initially, the parent node should not be expanded
585
+ expect ( parentNode ) . not . toHaveAttribute ( 'aria-expanded' , 'true' ) ;
586
+
587
+ // Focus on the parent node
588
+ parentNode . focus ( ) ;
589
+ expect ( parentNode ) . toHaveFocus ( ) ;
590
+
591
+ // Press the Enter key
592
+ await user . keyboard ( '[Enter]' ) ;
593
+
594
+ // The parent node should now be expanded
595
+ expect ( parentNode ) . toHaveAttribute ( 'aria-expanded' , 'true' ) ;
596
+
597
+ // Child node should be visible
598
+ const childNode = screen . getByTestId ( 'child-node' ) ;
599
+ expect ( childNode ) . toBeInTheDocument ( ) ;
600
+ } ) ;
601
+
602
+ it ( 'should collapse an expanded parent node when Enter key is pressed' , async ( ) => {
603
+ const user = userEvent . setup ( ) ;
604
+
605
+ render (
606
+ < TreeView label = "Tree View" >
607
+ < TreeNode
608
+ data-testid = "parent-node"
609
+ label = "Parent Node"
610
+ isExpanded = { true } >
611
+ < TreeNode data-testid = "child-node" label = "Child Node" />
612
+ </ TreeNode >
613
+ </ TreeView >
614
+ ) ;
615
+
616
+ const parentNode = screen . getByTestId ( 'parent-node' ) ;
617
+
618
+ // Initially, the parent node should be expanded
619
+ expect ( parentNode ) . toHaveAttribute ( 'aria-expanded' , 'true' ) ;
620
+
621
+ // Focus on the parent node
622
+ parentNode . focus ( ) ;
623
+ expect ( parentNode ) . toHaveFocus ( ) ;
624
+
625
+ // Press the Enter key
626
+ await user . keyboard ( '[Enter]' ) ;
627
+
628
+ // The parent node should now be collapsed
629
+ expect ( parentNode ) . toHaveAttribute ( 'aria-expanded' , 'false' ) ;
630
+ } ) ;
631
+
632
+ it ( 'should expand/collapse nodes with Enter key while maintaining selection' , async ( ) => {
633
+ const user = userEvent . setup ( ) ;
634
+
635
+ render (
636
+ < TreeView label = "Tree View" >
637
+ < TreeNode
638
+ data-testid = "parent-node"
639
+ label = "Parent Node"
640
+ isExpanded = { false } >
641
+ < TreeNode data-testid = "child-node" label = "Child Node" />
642
+ </ TreeNode >
643
+ </ TreeView >
644
+ ) ;
645
+
646
+ const parentNode = screen . getByTestId ( 'parent-node' ) ;
647
+
648
+ // Focus and select the parent node
649
+ parentNode . focus ( ) ;
650
+ await user . click ( parentNode ) ;
651
+ expect ( parentNode ) . toHaveClass ( `${ prefix } --tree-node--selected` ) ;
652
+
653
+ // Press Enter to expand
654
+ await user . keyboard ( '[Enter]' ) ;
655
+ expect ( parentNode ) . toHaveAttribute ( 'aria-expanded' , 'true' ) ;
656
+ expect ( parentNode ) . toHaveClass ( `${ prefix } --tree-node--selected` ) ; // Should still be selected
657
+
658
+ // Press Enter again to collapse
659
+ await user . keyboard ( '[Enter]' ) ;
660
+ expect ( parentNode ) . toHaveAttribute ( 'aria-expanded' , 'false' ) ;
661
+ expect ( parentNode ) . toHaveClass ( `${ prefix } --tree-node--selected` ) ; // Should still be selected
662
+ } ) ;
567
663
} ) ;
0 commit comments