@@ -566,4 +566,134 @@ describe("SegmentedButtonItem Accessibility", () => {
566566 . trigger ( "mouseover" )
567567 . should ( "have.attr" , "title" , TOOLTIP_TEXT ) ;
568568 } ) ;
569- } ) ;
569+ } ) ;
570+
571+ describe ( "SegmentedButtonItem: click event" , ( ) => {
572+ it ( "should fire selection change event when item is clicked" , ( ) => {
573+ const clickSpy = cy . spy ( ) . as ( "clickSpy" ) ;
574+ const selectionChangeSpy = cy . spy ( ) . as ( "selectionChangeSpy" ) ;
575+
576+ cy . mount (
577+ < SegmentedButton >
578+ < SegmentedButtonItem id = "item1" selected > First</ SegmentedButtonItem >
579+ < SegmentedButtonItem id = "item2" > Second</ SegmentedButtonItem >
580+ </ SegmentedButton >
581+ ) ;
582+
583+ cy . get < SegmentedButton > ( "[ui5-segmented-button]" )
584+ . then ( $el => {
585+ $el [ 0 ] . addEventListener ( "selection-change" , selectionChangeSpy ) ;
586+ } ) ;
587+
588+ cy . get ( "#item2" )
589+ . then ( $el => {
590+ $el [ 0 ] . addEventListener ( "click" , clickSpy ) ;
591+ } ) ;
592+
593+ cy . get ( "#item2" )
594+ . realClick ( ) ;
595+
596+ cy . get ( "@clickSpy" )
597+ . should ( "have.been.calledOnce" ) ;
598+
599+ cy . get ( "@selectionChangeSpy" )
600+ . should ( "have.been.calledOnce" ) ;
601+ } ) ;
602+
603+ it ( "should prevent selection when preventDefault is called" , ( ) => {
604+ cy . mount (
605+ < SegmentedButton >
606+ < SegmentedButtonItem id = "item1" > First</ SegmentedButtonItem >
607+ < SegmentedButtonItem id = "item2" > Second</ SegmentedButtonItem >
608+ </ SegmentedButton >
609+ ) ;
610+
611+ cy . get < SegmentedButton > ( "[ui5-segmented-button]" )
612+ . then ( $el => {
613+ $el [ 0 ] . addEventListener ( "selection-change" , cy . spy ( ) . as ( "selectionChangeSpy" ) ) ;
614+ } )
615+
616+
617+ cy . get ( "#item2" )
618+ . then ( $el => {
619+ $el [ 0 ] . addEventListener ( "click" , ( e : Event ) => {
620+ e . preventDefault ( ) ;
621+ } ) ;
622+ } ) ;
623+
624+ cy . get ( "#item1" )
625+ . should ( "have.attr" , "selected" ) ;
626+ cy . get ( "#item2" )
627+ . should ( "not.have.attr" , "selected" ) ;
628+
629+ cy . get ( "#item2" )
630+ . realClick ( ) ;
631+
632+ // Item 2 should NOT be selected because we called preventDefault
633+ cy . get ( "#item1" )
634+ . should ( "have.attr" , "selected" ) ;
635+ cy . get ( "#item2" )
636+ . should ( "not.have.attr" , "selected" ) ;
637+
638+ cy . get ( "@selectionChangeSpy" )
639+ . should ( "not.have.been.called" ) ;
640+ } ) ;
641+
642+ it ( "should not fire click event when disabled item is clicked" , ( ) => {
643+ const clickSpy = cy . spy ( ) . as ( "clickSpy" ) ;
644+
645+ cy . mount (
646+ < SegmentedButton >
647+ < SegmentedButtonItem id = "item1" > First</ SegmentedButtonItem >
648+ < SegmentedButtonItem id = "item2" disabled > Second</ SegmentedButtonItem >
649+ </ SegmentedButton >
650+ ) ;
651+
652+ cy . get ( "#item2" )
653+ . then ( $el => {
654+ $el [ 0 ] . addEventListener ( "click" , clickSpy ) ;
655+ } ) ;
656+
657+ // Click the disabled item directly
658+ cy . get ( "#item2" )
659+ . shadow ( )
660+ . find ( "li" )
661+ . click ( { force : true } ) ;
662+
663+ cy . get ( "@clickSpy" ) . should ( "not.have.been.called" ) ;
664+ cy . get ( "#item2" ) . should ( "not.have.attr" , "selected" ) ;
665+ } ) ;
666+
667+ it ( "should provide item and originalEvent in click event detail" , ( ) => {
668+ cy . mount (
669+ < SegmentedButton >
670+ < SegmentedButtonItem id = "item1" > First</ SegmentedButtonItem >
671+ < SegmentedButtonItem id = "item2" > Second</ SegmentedButtonItem >
672+ </ SegmentedButton >
673+ ) ;
674+
675+ cy . get ( "#item2" )
676+ . then ( $el => {
677+ $el [ 0 ] . addEventListener ( "click" , cy . spy ( ( e : CustomEvent ) => {
678+ // Check that event detail contains item and originalEvent
679+ expect ( e . detail ) . to . have . property ( "item" ) ;
680+ expect ( e . detail ) . to . have . property ( "originalEvent" ) ;
681+
682+ // Check item reference and properties
683+ expect ( e . detail . item ) . to . equal ( $el [ 0 ] ) ;
684+ expect ( e . detail . item . id ) . to . equal ( "item2" ) ;
685+ expect ( e . detail . item . slotTextContent ) . to . equal ( "Second" ) ;
686+
687+ // Check originalEvent is a MouseEvent
688+ expect ( e . detail . originalEvent ) . to . be . instanceOf ( MouseEvent ) ;
689+ } ) . as ( "clickSpy" ) ) ;
690+ } ) ;
691+
692+ cy . get ( "#item2" )
693+ . realClick ( ) ;
694+
695+ cy . get ( "@clickSpy" )
696+ . should ( "have.been.calledOnce" ) ;
697+ } ) ;
698+ } ) ;
699+
0 commit comments